Der er alt for mange ting galt med din kode, og det vil være ekstremt svært at give en løsning ved at rette det, du har nu.
For det første anses MD5 ikke længere for at være sikker at bruge til lagring af adgangskoder.
Rådfør dig:
- https://security.stackexchange.com/questions/ 19906/er-md5-betragtes som usikker
- https://en.wikipedia.org/wiki/MD5
Derudover bruger du ikke forberedte udsagn korrekt.
Som jeg sagde, mysqli_escape_string()
funktion kræver, at en databaseforbindelse sendes som den første parameter:
Gør dig selv en tjeneste og brug dette, et af ircmaxells svar https://stackoverflow.com/a/29778421/
Fra hans svar:
Bare brug et bibliotek. Helt seriøst. De eksisterer af en grund.
- PHP 5.5+:brug
password_hash()
- PHP 5.3.7+:brug
password-compat
(en kompatibilitetspakke til ovenstående) - Alle andre:brug phpass
Gør det ikke selv. Hvis du laver dit eget salt, GØR DU DET FORKERT . Du bør bruge et bibliotek, der håndterer det for dig.
$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]);
Og ved 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
}