Er zijn veel te veel dingen mis met je code en het zal buitengewoon moeilijk zijn om een oplossing te bieden door te repareren wat je nu hebt.
Ten eerste wordt MD5 niet langer als veilig beschouwd om te gebruiken voor wachtwoordopslag.
Raadpleeg:
- https://security.stackexchange.com/questions/ 19906/is-md5-considered-insecure
- https://en.wikipedia.org/wiki/MD5
Bovendien gebruikt u voorbereide verklaringen niet correct.
Zoals ik al zei, de mysqli_escape_string()
functie vereist dat een databaseverbinding wordt doorgegeven als de eerste parameter:
Doe jezelf een plezier en gebruik dit, een van de antwoorden van ircmaxell https://stackoverflow.com/a/29778421/
Getrokken uit zijn antwoord:
Gebruik gewoon een bibliotheek. Ernstig. Ze bestaan met een reden.
- PHP 5.5+:gebruik
password_hash()
- PHP 5.3.7+:gebruik
password-compat
(een compatibiliteitspakket voor hierboven) - Alle andere:gebruik phpass
Doe het niet zelf. Als je je eigen zout maakt, JE DOET HET VERKEERD . Je zou een bibliotheek moeten gebruiken die dat voor je afhandelt.
$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]);
En bij inloggen:
$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
}