Ada terlalu banyak hal yang salah dengan kode Anda dan akan sangat sulit untuk memberikan solusi dengan memperbaiki apa yang Anda miliki sekarang.
Pertama, MD5 tidak lagi dianggap aman digunakan untuk penyimpanan kata sandi.
Konsultasikan:
- https://security.stackexchange.com/questions/ 19906/is-md5-dianggap-tidak aman
- https://en.wikipedia.org/wiki/MD5
Plus, Anda tidak menggunakan pernyataan yang disiapkan dengan benar.
- Konsultasikan:http://php.net/manual/en/mysqli. persiapan.php
Seperti yang saya nyatakan, mysqli_escape_string()
fungsi membutuhkan koneksi database yang diteruskan sebagai parameter pertama:
Tolonglah dirimu sendiri dan gunakan ini, salah satu jawaban ircmaxell https://stackoverflow.com/a/29778421/
Diambil dari jawabannya:
Gunakan saja perpustakaan. Dengan serius. Mereka ada karena suatu alasan.
- PHP 5.5+:gunakan
password_hash()
- PHP 5.3.7+:gunakan
password-compat
(paket kompatibilitas untuk di atas) - Yang lainnya:gunakan phpass
Jangan lakukan sendiri. Jika Anda membuat garam sendiri, ANDA LAKUKANNYA SALAH . Anda harus menggunakan perpustakaan yang menanganinya untuk Anda.
$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]);
Dan saat masuk:
$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
}