Problem mit PHP / MySQL ( loginscript )

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von martinustreveri.

    zu deinem Problem: in VB vergleicht man etwas mit =, in PHP mit ==.
    Ich hab deinen Code mal etwas umgeschrieben und sicherer gemacht:

    PHP-Quellcode

    1. //connecting to database
    2. $connect = mysql_connect("localhost","root","");
    3. mysql_select_db("martinustreveri");
    4. //überprüfung
    5. $username = mysql_real_escape_string($_POST['username']); // wegen sql injections
    6. $passwort = md5($_POST['passwort']); // pw mit md5 hahsen
    7. $repeatpasswort = md5($_POST['repeatpass']);
    8. $user = mysql_query("SELECT benutzername FROM user WHERE benutzername = '".$username."'"); // variablen und strings sollte man immer trennen
    9. while($row = mysql_fetch_assoc($user)) {
    10. if($username == $row['benutzernamae']) {
    11. echo('Der Benutzername wird schon verwendet. Bitte wähle einen anderen.');
    12. echo('<br><a href="register.php">Zurück</a>');
    13. }
    14. else {
    15. if ($repeatpasswort != $passwort) {
    16. echo('Du hast dein Passwort nicht richtig wiederholt.');
    17. }
    18. else {
    19. $speichern = mysql_query("INSERT INTO user (benutzername, passwort) VALUES ('".$username."', '".$passwort."')"); // strings und variablen wieder trennen
    20. echo('Die Daten wurden gespeichert. Du kannst dich jetzt anmelden.');
    21. }
    22. } // if
    23. } // while


    habs nicht getestet, sollte aber funktionieren

    wsl
    du hast in $user auch nur den Query drin, den musste erstmal noch auswerten in ein Array oder einem Object

    also in ein Array:

    PHP-Quellcode

    1. $daten = mysql_fetch_assoc($user);


    oder Object:

    PHP-Quellcode

    1. $daten = mysql_fetch_object($user);


    Und dann musst du vergleichen wie oben beschrieben mit ==.

    PHP-Quellcode

    1. if($username == $daten['benutzername'])


    oder

    PHP-Quellcode

    1. if($username == $date->benutzername)


    Aufjedenfall auch angewöhnen mit POST oder GET übergebene Variablen zu Escapen um MySQL Injections zu vermeiden.

    Edit: Du musst nur einen Query machen nicht 2. Du ließt einmal den Kompletten Benutzerdatensatz ein

    PHP-Quellcode

    1. $user = mysql_fetch_assoc(mysql_query("SELECT `benutzername`, `passwort` FROM `user` WHERE `benutzername` = '$username' LIMIT 1"));
    2. if($user['benutzername'] == $username && $user['passwort'] == $passwort) {
    3. // Eingeloggt
    4. }
    Nunja zuerst holste den Query, dann muss dieser noch aufgeteilt werden, dass du zugriff auf die Spalten hast wo die Daten drinstehen.

    PHP-Quellcode

    1. $query = mysql_query("SELECT * FROM tabelle");
    2. $daten = mysql_fetch_array($query);


    $daten ist nun ein Array mit anzahl der Elemente wie Spalten in der Tabelle. Jedoch nur Integer, also wenn deine Tabelle so aussieht

    ID,benutzername,passwort,name,text

    wird in $daten[0] die ID drin stehen, in $daten[1] der benutzername und so weiter. Einfacherer zur verwaltung ist fetch_assoc weil hierbei bekommst du ein assoziativ Array. Das heißt in $daten['ID'] steht nun die ID, $daten['benutzername'], $daten['passwort'] und so weiter.

    PHP-Quellcode

    1. //mit datenbank verbinden:
    2. $connect = mysql_connect("localhost","root","");
    3. mysql_select_db("martinustreveri");
    4. //daten übernehmen:
    5. $username = mysql_real_escape_string($_POST['username']);
    6. $password = md5($_POST['passwort']); // hier wird das pw mit md5 gehasht, du musst aber auch das pw md5-gehasht in deiner db ablegen, sonst funktionert der vergleich nicht und es kommt immer error als ausgabe
    7. //überprüfen:
    8. $query = mysql_query("SELECT benutzername, passwort FROM user WHERE benutzername = '".$username."' AND passwort = '".$password."'");
    9. $login = mysql_num_rows($query); // die zeilen des ergebnisses aus $query zählen
    10. if($login == 0) {
    11. echo('eingeloggt');
    12. }
    13. elseif($login > 0) {
    14. echo('error');
    15. }


    so geht das richtig^^


    wsl

    btw: weißt du wie man das manual auf php.net benutzt?
    Hinzuzufügen wäre noch das Passwort sollte als MP5 Hash in der Tabelle liegen, nicht als Klartext. deswegen auch den $_POST['passwort'] mit MD5 Verschlüsseln und mit dem Hash in der Datenbank vergleichen, so geht man sicher, dass niemand so einfach das PW hacken kann.
    Hallo martinustreveri,

    das Manual benutzt man folgendermaßen:
    Wenn du zB wissen willst, wie der Befehl/die Funktion 'echo' funktioniert, also was man für Parameter übergeben kann usw., und su willst ein Beispiel haben, dann schreibst du in die Browserleiste

    php.net/echo

    drückst Enter und schon bist du da wo du hinwillst. Das ist so aufgebaut:
    php.net/funktionsname
    wenn du ein Beispiel zur Funktion mysql_select_db haben willst, schreibst du also: php.net/mysql_select_db. Das ist sehr einfach und geht schnell.

    Ich hoffe ich konnte dir helfen.


    wsl