2015-10-11 3 views
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-тега, например '

+0

Ваш код входа не соответствует действующим правилам безопасности. Прочитайте подготовленные заявления и посмотрите на https://www.youtube.com/watch?v=eNdW5HWBhG0 – Gordon

ответ

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

Похоже, вы не можете получать значения посылок, которые в свою очередь разбивают ваш SQL. Убедитесь, что вы получили все значения из сообщения формы. Это можно сделать путем сброса значений post, например: var_dump ($ _ POST ['form_filed']). –

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

} 
Смежные вопросы