[PHP] Problem mit Registerscript - Brauche Hilfe

  • Hallo StageTwo,
    Ich versuche mich momentan an meiner eigenen Homepage und stoße gerade auf ein Problem.
    Wenn ich mich Registrieren möchte geht es nicht, es wird keine ErrorMSG ausgegeben und es wird auch nichts in die Datenbank eingetragen. (Ja Daten sind richtig - habe sie nur Zensiert und auch alle Datein liegen in den richtigen Ordnern !)


    Seite wo ich mich Registriere:
    http://paste.www.stagetwo.eu/paste.php?key=uucg26h4&title=Register Problem
    die Includete Seite :
    http://paste.www.stagetwo.eu/paste.php?key=jp4m4fjc&title=Register%20Problem


    Und bitte nicht wundern, bin noch recht neu. :) Ein kollege hat mir bei den CSS sachen geholfen.


    Bild von der DB :

    Bild von der HP, sie bleibt auch so - egal ob ich auf Register klicke oder nicht.

    mfg. b0ykoe. :)

  • Sowie ich das sehe, müsste das erste Problem hier liegen:


    PHP
    1. $errormsg = "";
    2. $status = 0;
    3. if($status == 0) {
    4. <form action="register.php" method="POST" style="text-align:center;">


    Du schickst das Formular falsch abschickst, denn du schickst das Formular an "register.php",
    aber auf der Seite vom ersten Link bindest du die Seite wo alles abgefragt wird unter dem Namen
    "inc_register.php" ein. Außerdem wird jedem Seitenaufruf der "inc_register.php" $errormsg auf "" und $status auf 0 gesetzt,
    also ist die if-Abfrage immer wahr und er kommt nicht in den else-Zweig.


    Dann wegen dem INSERT:


    SQL
    1. INSERT INTO user (id, úsername, ...)


    hast du ein ´ auf dem u, das wird der Fehler sein warum er nichts einträgt.


    Guck noch mal über die Stellen drüber und wenn du Hilfe brauchst, kannst du ja noch mal nachfragen.

  • Erstmal solltest du die Verbindung zur DB in einer Datei machen, die am besten nicht via HTTP erreichbar ist.


    Nickname09 : Nein, die Datei die inc_register.php inkludiert heißt register.php, daher ist es schon korrekt.
    Die Fehlermeldung wird dennoch nicht angezeigt, da du die erst unten setzt, aber oben ausgeben willst, also den gesamten Block mit dem MySQL Part über das Formular setzten.

  • Erstmal solltest du die Verbindung zur DB in einer Datei machen, die am besten nicht via HTTP erreichbar ist.


    Nickname09 : Nein, die Datei die inc_register.php inkludiert heißt register.php, daher ist es schon korrekt.
    Die Fehlermeldung wird dennoch nicht angezeigt, da du die erst unten setzt, aber oben ausgeben willst, also den gesamten Block mit dem MySQL Part über das Formular setzten.



    Alles klar, funktioniert nun hab es einfach umgesetzt. :)


    Sonst noch etwas? Vom Aufbau her alles okey? :s oder kann ich da noch etwas effizienter machen, bzw. sicherer?

  • Das Größte Problem ist wohl, dass du die Usereingaben einfach übernimmst. Wenn man wollte könnte man dadurch SQL Injections machen. Solltest sie duch mysql_real_espace (glaube so hieß die Funktion) jagen.


    Bspw. könnte ich als Usernamen imo sowas nehmen "; DROP TABLE user;" und dein skript würde es ausführen ;)

  • großte problem is dein schutz gegen sql injection, dann kommen die inline styles und der aufbau des codes (keine trennung von html un php, dazu bissel oop waer och gut), fuer spaeter waer schon einmal eine implementation von mehreren sprachen sinnvoll

  • Das Größte Problem ist wohl, dass du die Usereingaben einfach übernimmst. Wenn man wollte könnte man dadurch SQL Injections machen. Solltest sie duch mysql_real_espace (glaube so hieß die Funktion) jagen.


    Bspw. könnte ich als Usernamen imo sowas nehmen "; DROP TABLE user;" und dein skript würde es ausführen ;)


    Okey - ich habe jetzt eine Config Datei angelegt, welche so aussieht.


    http://paste.www.stagetwo.eu/paste.php?key=iag3s84m&title=config


    und ich habe das ganze so überarbeitet, sollte es nun sicher genug sein?


    http://paste.www.stagetwo.eu/paste.php?key=az2i8us0&title=reg


    KoKsPfLaNzE , was ist OOP? Php und HTML hab ich doch getrennt, ich hab das Php immer geschlossen wenn ich Php angefangen habe, oder was meintest du jetzt? :s - was meinst du mit inline Styles? :/ Bin quasi komplett neu in diesem Gebiet, bräuchte einwenig erklärung dazu.
    Was für andere Sprachen und wofür noch? :)

  • OOP ist Objektorientierte Programmierung, das ist ein Konzept wie man ein Problem lösen kann. Ist in den lezten Jahren dank Java und co. sehr beliebt, aber da müsstest du dich dann rein lesen und das würde es erstmal unnötig komplex machen.
    Mit der Trennung meint er, dass du entweder den Code und das Design komplett getrennt hast (bspw. wenn man nach MVC Pattern arbeitet aber das ist für Anfänger nicht immer so leicht zu verstehen). In deinem Fall würde es reichen, wenn du am Anfang der Datei eigentlich alle Operationen in PHP machst und dann der HTML Part kommt in dem PHP nur zur Ausgabe genutzt wird.
    Inline Styles wäre:

    Code
    1. <div style="border: 1px solid black">Hallo</div>

    das soll man eigentlich nicht tun und stattdessen class oder id nutzen und dann in einem zentralen CSS alles stylen.
    Mit Sprachen meinte er wohl bspw. Englisch, wobei das auch nur sinnvoll ist, wenn du auf deiner Seite auch Besucher der entsprechenden Sprache erwartest, ansonsten ist es übertrieben.


    Achja in deinem Code hasht du das password mit MD5 bei der Abfrage aber nicht beim Speicher, solltest es bei beidem tun.

  • Hier hast mal ein kleines Beispiel zu OOP und der Trennung von PHP und HTML Code


    http://d.pr/i/oNR7


    Was vielleicht dir auch angucken könntest wäre eine Datenbankschicht, sprich eine Class steht für eine Tabelle und hat bestimmte Methoden die du so zur Db brauchst.


    BSP:
    http://d.pr/i/Bo44


    Zu den Sprachen, ja ich mein das so das man es schon einmal einbauen kann, sprich das die platzhalter da sind, ob es nun schon alle Sprachen gibt oder nur Deutsch bzw. English das ist in dem Punkt egal, hat einfach den Grund das man später schnell mal was adden kann und nicht erst den ganzen Code durch gehen muss.


    Wenns dich interessiert nutze als IDE Aptana (baut auf Ecplise auf) und habe mich bissel dem Zend Framework verschrieben in zusammenarbeit mit Twig.

  • Nein, war mein Fail ^^ Hatte vergesse, dass du es in der gleichen Variable wie vorher speicherst ^^


    Sollte jetzt sicherer sein.



    Ist das ganze denn für einen Anfänger nötig? Ich hab früher immer alles (PHP + HTML) in eine Datei gekritzelt - nun mache ich es ja so das ich den 'großen' PHP-Teil 'extern' Speicher und dann Includiere, ist das nicht auch eine Ordentliche Art? :s Für mich erscheint es so leichter und hat so ziemlich den gleichen Sinn.


    mfg.

  • Wie ich schon oben gesagt habe: MVC (das ist das was Zend btw macht) ist etwas viel für einen Anfänger, der erstmal Grundlagen bzw. erweiterte Grundlagen fehlerfrei hinkriegen muss.
    Ich vermute du meinst mit der "Datenbankschicht" einen OR-Mapper wie bspw. Propel, auch da ist es noch ein bisschen Weg hin, da es dem ganzen wieder noch eine Abstraktionssicht aufsetzt und somit für Einsteiger wieder etwas schwieriger werden kann.
    Ich würde dir empfehlen, erstmal weiter zu machen und dich dann nebenbei über OOP/MVC/ORM zu Informieren und dich da einzulesen, denn ganz ehrlich sowas wie Zend macht bei kleinen Projekten wenig bis gar keinen Sinn, solche Frameworks spielen ihre Stärke erst dann wirklich aus, wenn die Seite selber ne gewisse Komplexität erreicht hat.


    EDIT: Naja im Grunde machen es die Frameworks ähnlich, nur halt dass sie andere Paradigmen verfolgen und es anders aussieht. Aber wie ich sagte: Mach erstmal so weiter und dann kann man nach ein bisschen darüber reden ob es Sinn macht sowas einzusetzten.

  • Direkt einen Kickstart in die ModelViewController-Welt ist vielleicht ein bischen hart :D
    Aber du könntest ein Template-Framework verwenden. Smarty z.B. ist einfach zu verwenden, kann sehr viel und dazu noch performant.


    Es spricht Code-Technisch nichts gegen Inline-PHP. So war PHP ja auch ursprünglich gedacht.
    Das einzige Problem an Inline ist, das es schwerer lesbar ist im Gegensatz zu Code und HTML getrennt.


    Du kannst dich prinzipell auch darauf beschränken, dass du die Logik in externe Dateien auslagerst (z.B. Datenbank-Abfragen) und zwischen in den HTML-Code nur für die Ausgabe relevanten Code machst (genau das macht Smarty auch)


    Beispiel:

    PHP
    1. <div>
    2. <?php if ($eingeloggt == true) { ?>
    3. Hallo <?php echo $benutzername; ?>
    4. <?php } else { ?>
    5. Bitte melden sie sich <a href="#">Hier</a> an.
    6. <?php } ?>
    7. </div>


    Oder:

    PHP
    1. <table>
    2. <?php foreach ($liste as $eintrag) { ?>
    3. <tr>
    4. <td><?php echo $eintrag['id']; ?></td>
    5. <td><?php echo $eintrag['spielername']; ?></td>
    6. </tr>
    7. <?php } ?>
    8. </table>


    Objekt-Orientierung ist auch wieder ein Part für sich. Wenn du strukturiert vorgehst, und kein PHP-Chaos anrichtest, kommst du auch gut ohne Klassen aus. Ging bei mir auch jahrelang gut.
    Meiner Meinung nach Bedarf es aber etwas Erfahrung im Umgang mit Klassen, bis man raus hat wies "richtig" geht. Wenn ich so auf meine ersten Versuche mit Klassen zurückblicke wirds mir schwindelig.


    Wenn du das Gefühl hast, du kommst so wie du jetzt arbeitest gut klar/hast keine Probleme, dann mach so weiter. Irgentwann wirst du an ein Limit stoßen und dann bist du warscheinlich auch soweit den nächsten Schritt in Richtung MVC/OOP/CMS zu gehen.


    Gruß
    florian0

  • Im Grunde hast du genau das gesagt, was ich versucht habe klar zu machen ;)
    Es macht als Anfänger keinen Sinn direkt mit Paradigmen anzufangen, wenn man noch grundlegendere Schwierigkeiten hat. Selbst ich, der täglich mit MVC programmiert, muss manchmal nochmal ne Sekunde überlegen wo denn das was ich nun machen will genau hingehört.
    Wo ich dir aber widerspreche ist, dass es OOP schwerer ist als "normales" PHP, da muss man einfach umdenken und wenn das klappt, dann ist es kein Problem mehr. Wenn man das Prinzip hinter OOP verstanden hat, dann ist es relativ einfach, aber ob es sauberer und übersichtlicher ist hängt auch wieder vom Programmierer ab und hat nix damit zu tun.
    Als Programmierer muss man viele Paradigmen und Prinzipen kennen und immer das für die Problemstellung passende auswählen (es sei denn man spezialisiert sich bspw. in Java oder Fortran oder so), aber ich denke die Diskussion sollte eher in einem speziellen Thread über die Paradigmen und Prinzipien in der Programmierung geführt werden ^^

  • Soll auch nur ein ansporn für später sein, solltest glaub min 1jahr programmieren bevor dich damit beschäftigst. Zend kannst auch für kleine Webseiten nehmen, da meist mit der Zeit immer mehr Funktionen kommen und somit lohnt es meiner meinung schon was richtiges zuverwenden.

  • Soll auch nur ein ansporn für später sein, solltest glaub min 1jahr programmieren bevor dich damit beschäftigst. Zend kannst auch für kleine Webseiten nehmen, da meist mit der Zeit immer mehr Funktionen kommen und somit lohnt es meiner meinung schon was richtiges zuverwenden.


    Overkill hoch 10, wenn du bei jeder kleinen Seite Zend (oder ein anderes Framework) nutzt, dann hast du soviel Overhead, aber naja jedem das seine ^^ Muss gestehen, dass ich seit gut 1-2 Jahren PHP nur noch warte und nicht mehr aktiv programmiere, da es gerade im Bereich OOP mMn immer noch eine Qual ist es einzusetzen.

  • Wo stand da im Script was von Prepare? Prepared Statements sichern gegen die meisten SQL Injections in PHP afaik automatisch ab, aber wenn man sie nicht nutzt, dann muss man das von Hand tun.