PHP-Login Fehler?

1 Antwort

Schau dir mal die Doku und Beispiele zu fetch an:

https://www.php.net/manual/de/mysqli-stmt.fetch.php

fetch() liefert nur ein Bool zurück und du musst deine Werte mit bind_result an Variablen binden.

Woher ich das weiß:Berufserfahrung – Entwickle Webseiten seit über 25 Jahren.
pfand1879 
Fragesteller
 02.09.2023, 11:58

Danke, versuche mich mal einzulesen.

0
pfand1879 
Fragesteller
 02.09.2023, 12:11

Habe es jetzt so gemacht:

<?php

// Datenbankverbindung

include ('connection.php');

// Benutzereingabe aus Formular

$username = $_POST['username'];

$password = $_POST['password'];

// SQL-Abfrage, um das gespeicherte Passwort abzurufen

$sql = "SELECT password_hash FROM users WHERE username = ?";

$stmt = $conn->prepare($sql);

$stmt->execute([$username]);

//$row = $stmt->bind_result();

//$row = $stmt->fetch();

$stmt->bind_result($row);

// Überprüfen, ob das eingegebene Passwort korrekt ist

if ($row && password_verify($password, $row['password_hash'])) {

    // Anmeldung erfolgreich, führe die notwendigen Aktionen aus

    // z.B., setze eine Sitzung und leite den Benutzer weiter

    header('Location: index.html');

} else {

    echo "Anmeldung fehlgeschlagen, versuche es erneut.";

}

?>

Das Problem ist nur wenn ich das richtige Passwort eingebe um mich anzumelden, werde ich nicht weitergeleitet (if) sondern es kommt der else-Fall:

Die Anmeldung ist fehlgeschlagen, versuche es erneut!

Woran liegt das?

0
Babelfish  02.09.2023, 12:17
@pfand1879

Lies dir die Doku und die Beispiele doch mal in Ruhe durch! Du hast zwei Fehler:

Erstens muss nach den bind_result auch noch ein fetch kommen und zweitens bekommst du kein Array zurück, sondern einen String.

$stmt->bind_result($passwordHash);

if ($stmt->fetch() && password_verify($password, $passwordHash)) {
  header('Location: index.html');
} else {
  echo "Anmeldung fehlgeschlagen, versuche es erneut.";
}

PS: Bitte nutze für Code auch die Quelltext-Formatierung von GF.

0