Det är alldeles för många saker fel med din kod och det kommer att vara extremt svårt att ge en lösning genom att fixa det du har nu.
För det första anses MD5 inte längre vara säker att använda för lösenordslagring.
Konsultera:
- https://security.stackexchange.com/questions/ 19906/is-md5-considered-insecure
- https://en.wikipedia.org/wiki/MD5
Dessutom använder du inte förberedda påståenden korrekt.
- Konsultera:http://php.net/manual/en/mysqli. prepare.php
Som jag sa, mysqli_escape_string()
funktionen kräver att en databasanslutning skickas som den första parametern:
Gör dig själv en tjänst och använd detta, ett av ircmaxells svar https://stackoverflow.com/a/29778421/
Drag ur hans svar:
Använd bara ett bibliotek. Allvarligt. De finns av en anledning.
- PHP 5.5+:använd
password_hash()
- PHP 5.3.7+:använd
lösenordskompatibel
(ett kompatibilitetspaket för ovan) - Alla andra:använd phpass
Gör det inte själv. Om du skapar ditt eget salt, GÖR DU DET FEL . Du bör använda ett bibliotek som hanterar det åt 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]);
Och vid inloggning:
$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
}