Что не так с моим кодом формы входа?

1

Я получил этот код как часть моей формы входа, но я попробовал, и я все еще могу войти без использования пароля. Я изменил все на чувствительность к регистру, мой код, похоже, не имеет синтаксических ошибок, и я в тупике.

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!";
}

}
  • 0
    Вы пробовали войти с разными пользователями?
  • 0
    Добавьте сообщение об ошибке в начало файла (ов) сразу после открывающего тега PHP, например <?php error_reporting(E_ALL); ini_set('display_errors', 1); затем остальная часть вашего кода, чтобы увидеть, дает ли он что-нибудь.
Показать ещё 1 комментарий
Теги:

3 ответа

0
Лучший ответ

любезно выполните следующие действия для устранения

  1. Включить отчет об ошибках в начале сценария добавить ниже: error_reporting (E_ALL); ini_set ('display_errors', 1);
  2. var_dump запрос и запуск в консоли phpmyadmin/mysql - убедитесь, что все правильно

Вышеупомянутое, скорее всего, покажет проблему, если нет, то опубликуйте соответствующий html

  • 0
    Я попробовал первый, и получил некоторые "неопределенный индекс" и "неопределенную переменную" там. Когда я попытался запустить код на консоли MySQL, я получил это: # 1064 - у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'if ($ _POST [' login ']) {$ query = "SELECT * FROM users WHERE email ='". ' в строке 1
  • 0
    Похоже, вы не можете получить значения Post, которые в свою очередь нарушают ваш SQL. Убедитесь, что вы получаете все значения из формы сообщения. Это может быть сделано путем сброса значений записей, например: var_dump ($ _ POST ['form_filed']).
0

Вы не проверили, сколько записей присутствует в результате. Замените свой код на следующий код, он будет работать нормально.

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!";
}

}
0

Я вижу, что у вас есть двойной пароль для входа +, полученный в вашем запросе. Зашифрован ли он дважды? Одного хэша достаточно. Для безопасности 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";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню