Benutzerlogin über mysql

  • Hallo zusammen,


    ich lerne derzeit PHP und mysql und versuche mich daran, einen Login über meine Datenbank zu basteln.

    Es ist gewollt, dass sich der User über seine Matrikelnummer und sein Passwort anmeldet.

    jedoch bekomme ich immer die Fehlermeldung: Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, string given in D:\XAMPP\htdocs\myphp\login.php on line 20

    Ich habe bereits im Internet gesucht, aber noch hat nichts bei mir funktioniert. Da ich noch ziemlich neu in dem Thema bin, finde ich es auch einfach nicht raus (sitze schon einige Stunden hier)


    Ich hab schon verstanden, dass ein Text zurückgegeben wird. Jedoch soll mysqli_num_rows doch eine Zahl liefern? Wie ist das umsetzbar? Immerhin ist die Matrikelnummer als INT gegeben.


    Vielen Dank im Voraus.


  • Ich bin das ja auch noch am lernen, aber meiner meinung nach sieht das so besser aus


    ungefäh so in der art

  • Oh wow,danke dir

    wir kommen der Sache näher. Jetzt hat er den Fehler nicht mehr angezeigt, sondern, dass keine DB vorhanden war. Die habe ich nun bei mysqli_conenct nachgetragen.

    Nachdem ich jetzt deinen Code eingetragen habe, wurde der Fehler leider nur verschoben

    Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, string given in D:\XAMPP\htdocs\myphp\login.php on line 25


    Ich habe nun schon noch einiges geändert, aber trotzdem bleibt der Fehler. Tut mir leid, wenn ich irgendwas offensichtliches nicht sehe.

    mysqli_result ist doch kein Befehl oder?

  • sorry, aber damit kann ich nicht viel anfangen. Ich habe das jetzt so genommen (du hattest das nochmal editiert :D)


    nun sagt er

    Notice: Object of class mysqli_result could not be converted to int in D:\XAMPP\htdocs\myphp\login.php on line 23
    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given in D:\XAMPP\htdocs\myphp\login.php on line 23


    das hatte ich schonmal, dass er dauernd zwischen String und Bool springt. Aber es soll doch ein INT sein.

  • warum hast du eigentlich eine while Schleife ? wie viele user erwartest du den da mit der gleichen artikelnummer ?


    Was soll das werden

    Code
    1. $dbPasswort == Passwort)

    wo kommt das Passwort her ? Wahrscheinlich von oben aus den POST ?

    Das sollte man auch verschlüsselt speichern und nicht sichtbar .


    Eigenlich müsstest du das Script nochmal neu machen

  • ja ich kann mir das schon denken, dass es alles andere als sicher ist :D. Der Sinn hinter der While Schleife ist, dass alle Reihen durchsucht werden um das passwort aus dem Login mit dem aus der DB abzugleichen.

    Ich hatte mir über youtube diese Möglichkeit geholt.

    Hast du eine andere Idee, wie das abgeglichen werden soll. Für mich war das der nachvollziehbarste Code

    <-- Anfänger

  • die while Schleife ist nicht dafür da das das Script die Datenbank durchsucht.


    Die While Schleife geht durch die gefundene Ergebnisse


    Nach dieser Zeile

    Code
    1. $query = "SELECT Matrikelnummer FROM Student WHERE Matrikelnummer='$Matrikelnummer'";
    2. $result = mysqli_query($con, $query);

    sind alle möglichen Treffer schon in ( $result ) drinne. ( Mist erklärung ich weiß )

    Da bei so ein Login keine 2 Treffer sen sollte brauchst du da keine Schleife mehr.

    Das sollte da so reichen


    Code
    1. $query = "SELECT Matrikelnummer FROM Student WHERE Matrikelnummer='$Matrikelnummer'";
    2. $result = mysqli_query($con, $query) or die ("ERROR: ".mysqli_error($con));
    3. if(mysqli_num_rows($result)==1){
    4. $row = mysqli_fetch_assoc($query);
    5. $dbMatrikelnummer = $row["Matrikelnummer"];
    6. $dbPasswort = $row["Passwort"];
    7. bla...

    Doch den Mist unverschlüsselt zu Speichern geht gar nicht.

    Kuck dir mal das an das sollte dir an anfang schon mal weiter helfen


    https://www.php-einfach.de/exp…odebeispiele/loginscript/

  • Passwörter werden NIEMALS in Klartext gespeichert!

    Sieh Dir das hier an: Loginpasswort richtig hashen - password_hash() & password_verify()


    Ich empfehle Die wirklich PDO statt mysqli zu nuten.

    Das ist mMn einfacher und besser documentiert.

    PDO: https://www.php.net/manual/de/book.pdo.php


    Nutze niemals Variablen in der sql-query! (egal ob mysqli oder PDO).

    Stichwort: "SQL-Injection" (google).


    Zum Ablauf: hier mal ein Rohes Bsp. mit Comments