An Ihrem Code sind viel zu viele Dinge falsch, und es wird äußerst schwierig sein, eine Lösung bereitzustellen, indem Sie das beheben, was Sie jetzt haben.
Erstens gilt MD5 nicht mehr als sicher für die Passwortspeicherung.
Konsultieren:
- https://security.stackexchange.com/questions/ 19906/ist-md5-als-unsicher
- https://en.wikipedia.org/wiki/MD5
Außerdem verwenden Sie vorbereitete Anweisungen nicht korrekt.
- Konsultieren Sie:http://php.net/manual/en/mysqli. vorbereitung.php
Wie gesagt, der mysqli_escape_string()
Funktion erfordert, dass als erster Parameter eine Datenbankverbindung übergeben wird:
Tu dir selbst einen Gefallen und verwenden Sie diese, eine der Antworten von ircmaxell https://stackoverflow.com/a/29778421/
Aus seiner Antwort gezogen:
Verwenden Sie einfach eine Bibliothek. Ernsthaft. Sie existieren aus einem bestimmten Grund.
- PHP 5.5+:Verwenden Sie
password_hash()
- PHP 5.3.7+:Verwenden Sie
password-compat
(ein Kompatibilitätspaket für oben) - Alle anderen:Verwenden Sie phpass
Mach es nicht selbst. Wenn Sie Ihr eigenes Salz herstellen, MACHEN SIE ES FALSCH . Sie sollten eine Bibliothek verwenden, die das für Sie erledigt.
$dbh = new PDO(...);
$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);
$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);
Und beim Login:
$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
if (password_verify($_POST['password'], $users[0]->password) {
// valid login
} else {
// invalid password
}
} else {
// invalid username
}