Я получил этот код как часть моей формы входа, но я попробовал, и я все еще могу войти без использования пароля. Я изменил все на чувствительность к регистру, мой код, похоже, не имеет синтаксических ошибок, и я в тупике.
if ($_POST['login']) {
$query= "SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $_POST['loginemail'])."' AND password='".md5(md5($_POST['loginemail'])+$_POST['loginpassword'])."' LIMIT 1";
$result= mysqli_query($link, $query);
$row= mysqli_fetch_array($result);
if ($row) {
$_SESSION['id']= $row['id'];
header("location:mainpage.php");
} else {
$error= "We could not find any user with the submitted informations!";
}
}
любезно выполните следующие действия для устранения
Вышеупомянутое, скорее всего, покажет проблему, если нет, то опубликуйте соответствующий html
Вы не проверили, сколько записей присутствует в результате. Замените свой код на следующий код, он будет работать нормально.
if ($_POST['login']) {
$query= "SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $_POST['loginemail'])."' AND password='".md5(md5($_POST['loginemail'])+$_POST['loginpassword'])."' LIMIT 1";
$result= mysqli_query($link, $query);
if ($result->num_rows==1) {
$row= mysqli_fetch_array($result);
$_SESSION['id']= $row['id'];
header("location:mainpage.php");
exit(0);//Best practice to quit the execution after done the page redirection.
} else {
$error= "We could not find any user with the submitted informations!";
}
}
Я вижу, что у вас есть двойной пароль для входа +, полученный в вашем запросе. Зашифрован ли он дважды? Одного хэша достаточно. Для безопасности md5()
не лучший метод, hash() намного лучше (http://php.net/manual/fr/function.hash.php). Особенно с параметром sha512
для параметра $algo
. Если вы mutlitplies md5
, отпечаток никогда не будет хорошим. Пример с md5()
:
$query= "SELECT * FROM users
WHERE
email='".mysqli_real_escape_string($link, $_POST['loginemail'])."'
AND
password='".hash('md5', $_POST['loginemail']+$_POST['loginpassword'])."'
LIMIT 1";
<?php error_reporting(E_ALL); ini_set('display_errors', 1);
затем остальная часть вашего кода, чтобы увидеть, дает ли он что-нибудь.