• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Welches Motiv unseres Fotowettbewerbes gefällt Euch in diesem Monat am Besten? Hier geht es lang zur Abstimmung --> Klick

problem mit php und mysql

tjerk

Idared
Registriert
18.04.12
Beiträge
28
Hallo :)

ich habe vor kurzem angefangen mal ein bisschen mit PHP herum zu spielen und nun stehe ich vor einem kleinen Problem.

Ich versuche eine Registrierung zu programmieren es gibt laut PHP auch keinen syntaxfehler und die Verbindung mit der Db besteht ja auch, aber es wird einfach nix abgespeichert, ich bin echt am verzweifeln, ich hoffe mir kann jemand helfen.

hier der Code:
Code:
<?php




        if ($_GET ["page"]== "2"){
        
        
                                $db = mysql_connect ("localhost","*****","******")
                                                or die ("UPPS DA IST WOHL EIN FEHLER AUFGETRETEN, BITTE VERSUCHEN SIE ES ERNEUT");
                        


        
                                mysql_select_db ("htmlworld")
                                or die ("Die Verbindung zur Datenbank ist fehlgeschlangen");
                        


         
              $username = strtolower ($_POST ["username"]);
        
                $passwort = md5 ($_POST ["passwort"]);
        
                $passwort2= md5 ($_POST ["passwort2"]);
                
                $passwort3 = ($_POST ["passwort"]);
        
                $passwort4=  ($_POST ["passwort2"]);
                
                
                $date            = date ("D.d.m.y");
                
    
        if ($username =="" or $passwort = ""){
    
        
                    if ($passwort3 == $passwort4){
                                            
                            
                            $diepasswörterstimmennichtüberein = "Bitte tragen Sie einen usernamen und ein Passwort ein";
                                
                
                }
            
                
                
                else{
    
        
                                $controll =0;
                    
                                $usernameübereinstimmumg = "SELECT username FROM einloggen WHERE username ='$username'";
                        
                                $wennja = mysql_query ($usernameübereinstimmumg);
                        
                                    
                                    
                                while($row = mysql_fetch_object($wennja)){
                            
                            
                            
                            
                                            $controll ++;
                            
                            
                                }
    


        
                                if ($controll != 0){
            
            
                                        $diepasswörterstimmennichtüberein = "Leider existiert der username  schon <a href\"register.php\">zurück</a>";
            
            
                                }
                                
                                else{    
                                    
                                
        
                        
                            $logindaten = "INSERT INTO einloggen
    
    (username, passwort, passwort2)
    
    VALUES
    
    ('$username','$passwort', '$passwort2')";
    
    $eintragen =  mysql_query ($logindaten);
    
    
    }
    
    
    
    
                }
                
                
                
            }
                    
                    else {


        
        
                            $diepasswörterstimmennichtüberein    = "die Passwörter stimmen nicht überein, Bitte Wiederholen sie ihre Eingabe";
                        
                            
                            }
        
                    }
    
    
    




        
    mysql_close($db);




        ?>
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Dein Script öffnet Tür und Tor für SQL-Injections und Du verwendest ungesalzene Hashes. Zudem empfehle ich die die Verwendung von PDO als MySQL-Verbindung.

Vielleicht ist es besser, wenn Du ein Framework wie Symfony nutzt. Dort musst Du Dich mit dem ganzen "Low-Level-Kram" auseinandersetzen und vor allem sind darin schon einige Sicherheitsvorkehrungen implementiert.

Auf jeden Fall solltest Du Dich erstmal in die Grundlagen einlesen, denn beim bloßen Überfliegen sehe ich schon eine Masse an Fehlern und umständlichen Konstrukten. Warum verwendest Du bspw. den Tabellennamen "einloggen" und speicherst darin das Passwort redundant ab? Was soll das $controll++ ? ;)
 

tjerk

Idared
Registriert
18.04.12
Beiträge
28
erst mal, danke für die schnelle Antwort :)

kennst du evtl eine gute Lektüre oder ein sich langsam aufbauendes Tutorial, das einem von Grund auf alles beibringt?

wäre dir echt dankbar :)
 

wdominik

Weißer Winterglockenapfel
Registriert
15.01.10
Beiträge
880
Also gerade in der Lernphase kann man da schon noch einmal ein Auge zudrücken, solang das Ganze jetzt nicht umbedingt gleich produktiv irgendwo eingesetzt wird. ;) Heißt natürlich, das ich ebenso empfehle die angesprochenen Probleme zu behandeln bzw. sich näher darüber zu informieren. Der Programmierstil ist eben noch sehr anfängertypisch, aber das wird sich erst mit dem Laufe der Zeit verbessern – gerade weil PHP eben eine Sprache ist, mit der man mal einfach so loslegt und irgendwie drauflos programmiert.

Für den Anfang würde ich solche Dinge immer in kleine Teilschritte zerlegen, in deinem Fall z. B. in:
- Datenbankverbindung aufbauen und konstante Werte in Tabelle schreiben
- Werte von Eingabefeldern in Tabelle schreiben
- Vorherige Validierung der Eingabefelder
Ist ein Schritt absolviert und funktioniert er ordnungsgemäß, dann wir der nächste abgearbeitet usw.

Ist das Programm bereits geschrieben, und es passiert einfach nichts ist es hilfreich Ausgaben zu machen. Gerade bei Bedingungen einfach mal eine solche Ausgabe einfügen um festzustellen, in welchen Zweig das Programm springt. Auch die Ausgabe von Variablenwerten ist in solchen Fällen immer hilfreich.
 

das_micha

Leipziger Reinette
Registriert
11.03.07
Beiträge
1.795
Moin! Schau dir mal php für Dummies an und auch MySQL für Dummies.

Sind als Basis um zu verstehen was die beiden sagen machen recht einfach und anschaulich. Beide haben nur einen Nachteil. Wenn du eine grundaffinität für solche Themen hast sind sie beide nach etwa 1/3 - 1/2 überflüssig da sich die meisten Sachen dann selbst erklären.

Von symfonie oder einem anderen Framework würde ich die für den Einstieg abraten. Gebe bieger recht das dort einiges an Sicherheit implementiert ist, aber ohne grundlegende kenntnisse an der Basis steht man entweder schnell vorm Baum oder kommt nicht weiter wenn man nicht versteht was in dem Framework abläuft.
Wenn ausreichend Erfahrung vorhanden ist, auch in objektorientierter programmierung, würde ich auch ein Framework, mein Rat zend, empfehlen. Macht vieles einfacher und schneller anpassbar. Einziger Nachteil ist der immense Wasserkopf den so ein Framework hat. Also sehr sehr vieles was passiert obwohl es viele kleinere Projekte nicht benötigen. Und performant ist ein Framework auch nur dann wenn man sich intensiv mit dem Thema caching auseinander setzt.

Von pdo würde ich dir beim Einstieg ebenfalls abraten. Es kann sein das die pdo Library inkl der benötigten Treiber. Icht auf den webservern bei providern installiert ist. Nimm lieber erst mysqli. Die sind sich sehr ähnlich und ein Umstieg zu pdo ist, wenn man sich an mysqli in der oop Variante gewöhnt hat recht einfach. Generell stimme ich bieger aber zu was die Verwendung von pdo angeht.

Für sich zur schnellinfo wo der Unterschied ist: generell nur ein kleiner. Im Zusammenspiel mit MySQL machen sie das gleiche, nur pdo kann nen Tick langsamer sein. Der Riesen Vorteil von pdo ist, das du jederzeit auf andere Datenbanksysteme wechseln kannst, z.b Oracle, mssql ohne deinen Code anzupassen.

Viel geshwallert... Fazit: alles hat seine licht und Schattenseiten. Ich würde zu einem Einstieg an der Basis Raten um zu verstehen was überhaupt passiert. Sind die Erfahrungen da würde ich wie von bieger vorgeschlagen einen Blick auf frameworks wie zend oder symfonie werfen. Mit symfonie kenn ich mich kaum aus, zend hat viele Datenbank Adapter u.a. MySQL und auch pdo implementiert.
 

hillepille

Melrose
Registriert
19.07.09
Beiträge
2.508
Hi, selfphp (selfphp.de) wär noch ne Empfehlung. Dann meine ich mich erinnern zu können, dass es in der Galileo Open Book-Reihe auch ein kostenloses Buch über php gibt. Kannste ja mal googeln.
 

tjerk

Idared
Registriert
18.04.12
Beiträge
28
Mich erstaunt es ja immer wieder, wie schnell man hier die passende Antwort auf seine Fragen bekommt :cool:

ich habe mich jetzt erst einmal erkundigt was es so an php-lektüre im Netz gibt.

Ich denke, dass ich erst einmal von ganz unten beginne und mich mit den basics vertraut mache, dann versuche ich mich nochmals ;)
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Von symfonie oder einem anderen Framework würde ich die für den Einstieg abraten. Gebe bieger recht das dort einiges an Sicherheit implementiert ist, aber ohne grundlegende kenntnisse an der Basis steht man entweder schnell vorm Baum oder kommt nicht weiter wenn man nicht versteht was in dem Framework abläuft.
Das ist ja gerade das schöne bei den höheren Frameworks wie Symfony: Da braucht man sich nicht mehr um die Low-Level-Geschichten zu kümmern. Symfony ist im PHP-Bereich das Framework, dass dem Developer am meisten Arbeit abnimmt.
Über die Geschwindigkeit von Frameworks würde ich mir keine Gedanken machen. Die sind im Production-Mode nur unwesentlich langsamer als reines PHP, dafür aber deutlich besser wartbar und verkürzen ungemein die Entwicklungszeit.
Meiner Meinung nach sind die Frameworks für Anfänger deutlich einfach begreifbarer, weil weniger technische Grundlagen beherrscht werden müssen und viele Stolpersteine vom Framework abgefangen werden. Vor allem aber liefern die Framework gleich Entwicklungsphilosophien mit, an denen sich ein Entwickler entlanghangeln kann - Quasi Malen nach Zahlen.

Von pdo würde ich dir beim Einstieg ebenfalls abraten. Es kann sein das die pdo Library inkl der benötigten Treiber. Icht auf den webservern bei providern installiert ist.
Das ist für mich kein Grund: Bei jedem guten Provider ist PDO vorhanden und PDO wird von PHP als Datenbankadapter empfohlen. Und wer lernen möchte, kann sich lokal für das Development alles installieren, was er möchte. ;)
 

das_micha

Leipziger Reinette
Registriert
11.03.07
Beiträge
1.795
Deine Argumente verstehe ich, aber bin nach wie vor der Meinung das man erstmal gehen können muss um laufen zu lernen. Was bringt es einem Neuling mit einer unbekannten Funktion, bei der nur der primärschlüssel übergeben wird nen kompletten Datensatz zu bekommen und nicht zu verstehen was passiert. Ist zwar einfach und zielgerichtet aber gelernt wurde nichts.

Wie es bei symfomy mit der Performance ist kann ich nicht sagen. Bei zend macht es sich stark negativ bemerkbar. Der overhead ist riesig alleine schon was die dB Metadaten angeht. Das alles ließ sich nur durch memcachenutzung reduzieren
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Wir leben aber in einer arbeitsteiligen Welt. Jeder macht das, was er am besten kann. Überhöht gesagt: Warum sollte ich mich mit Befehlssätzen von CPUs auseinandersetzen, wenn ich doch eigentlich einen Eventkalender basteln will? Warum sollte ich nicht die ganzen Low-Level-Fallstricke den Experten überlassen? Nicht umsonst boomen IaaS, PaaS und SaaS zur Zeit.


Ohne Opcode-Cache ist auch PHP ultralangsam langsam, besonders als CGI. Gute Frameworks haben deswegen in der Regel getrennte Einstellungen für Development, Staging und Production und bringen entsprechende Caching-Systeme und Code-Generatoren mit. Je komplexer das Programm wird, desto weniger wird der Performance-Impact durch das Framework.


Warum ich dringend von "Flat-PHP" abrate ist das Risiko, dass man sich einen schrecklichen Programmierstil aneignet. Mit PHP kann man guten Code und gute Apps schreiben, aber leider auch furchtbarsten Spaghetti-Code. Ein gutes Framework bringt meist auch eine bestimmte Philosophie mit und prägt so den angehenden Programmierer auf eine vernünftigen Arbeitsweise. "Flat-PHP" zwingt hingegen, dass man sich bereits ab Tag 1 in technische Details einlesen muss, die für einen angehenden Programmierer vielleicht noch viel zu hoch sind.


Oder aber man geht zu Anfang ganz von PHP weg und startet mit Ruby/Rails oder Python/Django. Gerade Ruby on Rails ist sehr einfach für Anfänger erlernbar, kann direkt auf dem lokalen Rechner ohne große Softwareinstallation genutzt werden und wenn es online gehen soll kann man kleine Projekte z.B. bei Heroku kostenlos hosten.
 

das_micha

Leipziger Reinette
Registriert
11.03.07
Beiträge
1.795
Auch hier stimme ich dir zu. Auch wenn es nichts an meinen Ansichten ändert. Denn auch die strukturellen Vorgaben der Frameworks schützen nich vor codeunarten. Habe schon vollends vermaggelte zend mvcs gesehen. Und ich gestehe bei den ersten versuchen (ohne mich vorher einzulesen) zend ganz schön misshandelt zu haben. Und wenn ich mir überlege das ein neuling der noch nie was von designpattern was gehört hat geschweige von bootstrapping, pre & postdipatching und er muss sich damit auseinandersetzen dann kann ganz schnell die Motivation Flöten gehen. Geht es dann zu simplen Formularen bei denen einem vorgegaukelt wird Man müsse diese verwenden gepaart mit dekoratoren klingeln die Ohren. Aus sicherheitssicht gebe ich dir recht. Aus pädagogischer Sicht nicht. Denn die kleinen Erfolge spornen an. Und wenn man tiefer in die Materie einsteigt diszipliniert man sich automatisch zu besseren Strukturen. So zumindest meine erfahrung
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Es gibt ja verschiedene Level von vermaggeln.

Die kleinen Erfolgserlebnisse bei der komplett manuellen Erstellung von PHP-Skripten täuschen den Einsteiger in dem Sinn, dass er meint, etwas funktionierendes gebaut zu haben. Die Erfahrung, die ein Einsteiger bräuchte, um Funktionen qualitativ in der gleichen Güte zu schreiben, wie sie Framework-Developer nutzen, ist enorm. Die Risiken, dass diese Erfahrungen nicht da sind, sind ebenfalls enorm.

Wie ich bereits erwähnt habe: Besser gar nicht erst PHP nehmen, sondern zu Ruby on Rails greifen. Funktioniert lokal ohne großen Hickhack mit dem eingebauten Server und SQLite und lässt sich prima z.B. auf Heroku hosten. Vor allem sind schnell die Erfolgserlebnisse da, da man bereits am Anfang eine funktionierende Applikation hat, die man recht einfach erweitern kann. Die Quickstarts zu Ruby und Rails sind auch recht einfach verständlich.