Registrationsscript [Problem] PHP/MySQL

  • PHP
  • Registrationsscript [Problem] PHP/MySQL

    Hallo,

    ich habe an einem Registrationsscript gebastelt, zum Teil aus dem Internet (Von einem guten Tutorial entnommen), jedoch ist das von 2009.
    Jetzt stehe ich vor einem Problem. Wenn man nämlich auf die Seite kommt, wo man sich registrieren soll, kommt sofort die Meldung "Erfolgreich registriert", obwohl man noch garnichts eingegeben hat geschweige denn irgendwo auf Abschicken geklickt hat. Es wird also ein namenloser Benutzer ohne Passwort erstellt - im Prinzip Luft.
    In der Datenbank ist er jedoch vorhanden, aber halt ohne Namen und ohne Passwort.

    Hier das Originalscript:

    PHP-Quellcode

    1. <?php
    2. // PHP-Code Beginn
    3. require_once('db_config.php');
    4. // Die Datenbankverbindungsdaten einbinden, damit die Funktion "mysql_connect" funktioniert
    5. mysql_connect($host, $user, $pass);
    6. // Öffnet eine Verbindung zu dem MySql-Server
    7. mysql_select_db($dbase);
    8. // Wählt die Datenbank $dbase aus
    9. $Benutzername = mysql_real_escape_string($HTTP_GET_VARS['benutzername']);
    10. // In der Variable steht der String der in der Url nach "benutzername=" übermittelt wurde
    11. $Passwort = md5(mysql_real_escape_string($HTTP_GET_VARS['passwort']));
    12. // In der Variable steht der String der in der Url nach "passwort=" übermittelt wurde
    13. // md5() verschüsselt den String nun
    14. if ($Benutzername != "" || $Passwort != "")
    15. // ... wenn $Benutzername oder (||) $Passwort ungleich (!=) leer ("") ist
    16. {
    17. $result_select = mysql_query("SELECT * FROM User_Daten WHERE Benutzername='" . $Benutzername . "'");
    18. // Sendet die Anfrage an die MySql-DB: "Wähle alle Daten aus der Tabelle User_Daten wo der Benutzername gleich $Benutzername ist"
    19. // !!! Achtung !!! - Habt ihr vorher den Namen der Tabelle verändert müsst ihr logischerweise auch den neuen Namen verwenden
    20. $row = mysql_fetch_row($result_select);
    21. // mysql_fetch_row($result) gibt ein Array zurück mit alles Daten aus der Spalte in der der Benutzername gleich $Benutzername ist
    22. if (!$row)
    23. // ... wenn der Benutzername nicht gefunden wurde - "!$row" bedeutet mysql_fetch_row($result_select) lieferte kein Ergebnis
    24. {
    25. $result_insert = mysql_query("INSERT INTO User_Daten (`Benutzername`, `Passwort`) VALUES ('$Benutzername', '$Passwort')");
    26. // Sendet die Anfrage an die MySql-DB: "Füge in die Tabelle User_Daten, in die Spaltem Benutzername und Passwort, die Variablen $Benutzername und $Passwort ein"
    27. // !!! Achtung !!! - Habt ihr vorher den Namen der Tabelle verändert müsst ihr logischerweise auch den neuen Namen verwenden
    28. if ($result_insert)
    29. // ... wenn Einfügen erfolgreich, dann ...
    30. {
    31. echo 1;
    32. // ... eine 1 ausgeben
    33. exit;
    34. }
    35. else
    36. // ... sonst Einfügen war nicht erfolgreich, dann ...
    37. {
    38. echo 0;
    39. // ... eine 0 ausgeben
    40. exit;
    41. }
    42. }
    43. else
    44. // ... sonst Benutzername wurde gefunden -> existiert also bereits in der Datenbank
    45. {
    46. echo 2;
    47. // ... eine 2 ausgeben
    48. exit;
    49. }
    50. }
    51. else
    52. // ... sonst $Benutzername oder $Passwort waren leer (""), dann ...
    53. {
    54. echo 3;
    55. // ... eine 3 ausgeben
    56. exit;
    57. }
    58. ?>
    Alles anzeigen


    Hier das von mir abgeänderte Script:

    PHP-Quellcode

    1. <?php
    2. require_once('db_config.php');
    3. echo '<form action="" method="post">';
    4. echo '<p>Benutzername: <input name="benutzername"></p>';
    5. echo '<p>Passwort: <input type="password" name="passwort"></p>';
    6. echo '<p><input type="submit" name="submit" value="Abschicken"></p>';
    7. echo '</form>';
    8. mysql_connect($host, $user, $pass);
    9. mysql_select_db($dbase);
    10. $Benutzername = mysql_real_escape_string($_POST['benutzername']);
    11. $Passwort = md5(mysql_real_escape_string($_POST['passwort']));
    12. if ($Benutzername !="" || $Passwort !="")
    13. {
    14. $result_select = mysql_query("SELECT * FROM User_Daten WHERE Benutzername='" . $Benutzername . "'");
    15. $row = mysql_fetch_row($result_select);
    16. if (!$row)
    17. {
    18. $result_insert = mysql_query("INSERT INTO User_Daten (`Benutzername`, `Passwort`) VALUES ('$Benutzername', '$Passwort')");
    19. if ($result_insert)
    20. {
    21. echo 'Registration erfolgreich';
    22. exit;
    23. }
    24. else
    25. {
    26. echo 'Registration fehlgeschlagen';
    27. exit;
    28. }
    29. }
    30. else
    31. {
    32. echo 'Benutzername exestiert bereits';
    33. exit;
    34. }
    35. }
    36. else
    37. {
    38. echo 'Bitte gebe einen Benutzernamen und ein Passwort ein';
    39. exit;
    40. }
    41. ?>
    Alles anzeigen


    Ich sehe bei meinem abgeänderten Script jetzt keinerlei Fehler, aber ich bin auch noch nicht so erfahren was PHP betrifft.

    Mein Anliegen ist es, ob jemand mir eventuell erklären könnte wie es richtig muss, damit es klappt, ohne dass gleich ein Text ausgegeben wird, wenn man auf die Seite geht bzw. ein namenloser Benutzer registriert wird.

    MfG
    icqgamer
  • Meine PHP Kentnisse reichen auch nicht aus um diesen Code sicher umzuschreiben.. aber glaube die Ursache für das Problem ist einfach: Du benutst das selbe Skript um die Form anzuzeigen und auch um die Person zu regsitrieren und das ohne zwischen diesen beiden Fällen zu unterscheiden.
    Mit anderen Worten das Skript macht genau das was du gesagt hast: Registriert sofort.

    Weisst du wie man mit POST umgeht?
    Sofern dein form-Teil stimmt musst du nämlich nur abfragen ob die Variable "benutzername" aus POST exitiert oder nicht.
    Wenn diese nicht existiert, heisst das, dass das Skript grade zum ersten mal aufgerufen wird. D.h. in dem Fall sol ausschlislichl der Form-Code angezeigt bzw. ausgeführt werden, welcher die EIngabefelder, etc anzeigt.
    Das Klicken auf "Abschicken" sollte bewirken dass das Skript neu geladen wird. Diesmal aber mit den eingegebenen Werten als POST veriablen (sofern der Code syntaxisch stimmt, sollte das gehen).
    Dementsprechend muss, wenn die Post-Variable existiert, die Person registriert werden und nur dann wird der ganze Teil der mySql enthält, ausgeführt!

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • PHP-Quellcode

    1. if ($Benutzername != "" || $Passwort != "")
    2. // ... wenn $Benutzername oder (||) $Passwort ungleich (!=) leer ("") ist
    3. {


    Sollte das nicht && sein, denn es soll nicht Benutzername leer sein und nicht Passwort oder ist das so gedacht, das man einen leeren Benutzernamen eingeben kann?
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Hallo, ersteinmal danke für eure Hilfe.

    DragonGamer schrieb:

    Meine PHP Kentnisse reichen auch nicht aus um diesen Code sicher umzuschreiben.. aber glaube die Ursache für das Problem ist einfach: Du benutst das selbe Skript um die Form anzuzeigen und auch um die Person zu regsitrieren und das ohne zwischen diesen beiden Fällen zu unterscheiden.
    Mit anderen Worten das Skript macht genau das was du gesagt hast: Registriert sofort.

    DragonGamer schrieb:

    Weisst du wie man mit POST umgeht?
    Sofern dein form-Teil stimmt musst du nämlich nur abfragen ob die Variable "benutzername" aus POST exitiert oder nicht.
    Wenn diese nicht existiert, heisst das, dass das Skript grade zum ersten mal aufgerufen wird. D.h. in dem Fall sol ausschlislichl der Form-Code angezeigt bzw. ausgeführt werden, welcher die EIngabefelder, etc anzeigt.
    Das Klicken auf "Abschicken" sollte bewirken dass das Skript neu geladen wird. Diesmal aber mit den eingegebenen Werten als POST veriablen (sofern der Code syntaxisch stimmt, sollte das gehen).
    Dementsprechend muss, wenn die Post-Variable existiert, die Person registriert werden und nur dann wird der ganze Teil der mySql enthält, ausgeführt!
    Wenn das Klicken auf Absenden das Script neu läd bzw. das die registration dann ausgeführt werden kann heißt das, dass ich die Eingabefelder etc. am Ende des Codes hinpacken muss, oder? ( Wenn ich das mache, kommt vom PHP Editor ein Fehler - im Web werden die Felder dann garnichtmehr angezeigt. )
    Aber wahrscheinlich bin ich einfach nur zu dämlich um das zu verstehen xD

    henrik1235 schrieb:

    if ($Benutzername != "" || $Passwort != "")
    // ... wenn $Benutzername oder (||) $Passwort ungleich (!=) leer ("") ist
    {

    henrik1235 schrieb:

    Sollte das nicht && sein, denn es soll nicht Benutzername leer sein und nicht Passwort oder ist das so gedacht, das man einen leeren Benutzernamen eingeben kann?
    Jap, jetzt wird man zumindest nichtmehr sofort registriert. Jetzt kommt nurnoch die Nachricht "Bitte Benutzernamen und Passwort eingeben", was zumindest ein kleiner Fortschritt ist. Jetzt muss ich das nurnoch mit dem, was DragonGamer geschrieben hat verbinden, dann sollte es klappen. Stellt sich nurnoch die Frage wie.

    Nochmals danke für eure Hilfe!
    icqgamer

    EDIT:
    Ich habe es nun hinbekommen, indem ich if ($_POST['submit']) beigefügt habe!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von icqgamer ()

  • Du kannst ein extra Skript machen und dann darauf verweisen (mit dem PHP Code) oder du musst prüfen ob die zwei Post Variablen gesetzt sind:

    PHP-Quellcode

    1. if (isset($HTTP_GET_VARS['benutzername']) && isset($HTTP_GET_VARS['passwort'])) {
    2. //Code
    3. }
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Wie DragonGamer bereits geschrieben hatte, muss dein Formular der Registrierungsprozedur die Daten über einen GET oder POST-Request übergeben:
    1. Zuerst packst du dazu dein Skript in eine eigene php Datei. (z.b. "register.php")
    2. Und dann fügst du dem Formular, um dem "register.php" die Daten per GET-Request zu übergeben, folgendes hinzu:

      PHP-Quellcode

      1. <form id='register' action='register.php' method='get' accept-charset='UTF-8'>



    Edit: Wie du richtig herausgefunden hast, ist es mit "if ($_POST['submit'])" auch möglich dieses Problem zu umgehen.