2014-11-29 5 views
1

Я застрял в проблеме с моим скриптом входа, который не будет успешно извлекать данные пароля из инструкции sql, которую я им даю.Попытка получить пароль из базы данных

Пользователю предлагается ввести их электронный & пароль,

<p><strong>Email: </strong><input type= "text" name= "email"></p> 
<p><strong>Password: </strong><input type= "password" name= "password"></p> 

Через POST, я беру то, что они ввели из формы и положить его в SQL заявление.

$taremail = filter_input(INPUT_POST, 'email'); 
$tarpasswd = filter_input(INPUT_POST, 'password'); 

$sql = "SELECT email, password FROM members WHERE email = '".$taremail."' 
     AND password = PASSWORD('".$tarpasswd."')"; 

Наконец, я проверяю базу данных, чтобы узнать, действительно ли этот адрес электронной почты и пароль они набрали, в базе данных.

$result = mysqli_query($con, $sql) or die(mysqli_error($con)); 

if(mysqli_num_rows($result) == 1){ 

    setcookie("auth", "1", time()+60*30, "/", "", 0); //create cookie for the logged in user  

    $display = "<h2>You have successfully logged in!</h2> 
       <p>Click the link below to go to our main page</p> 
       <a href=\"main.php\">Main Page</a></br> 
       <a href=\"../login.html\">Log out</a>"; 
} else { 
    $display = "<h2>This account is not registered!</br> 
       Please make sure to register before trying to log in.</h2> 
       <a href=\"../register.html\">Register here!</a> 
       <a href=\"../login.html\">Login page</a>"; 
} 

Это либо возвращает то, что данное письмо и пароль действительно содержатся в базе данных, или нет. Достаточно просто?

Моя проблема заключается в том, что он всегда выполняет мой оператор else{}, говоря, что я еще не зарегистрирован.

Следует отметить, что на моей странице регистрации пароль, который они дают, помещается через метод PASSWORD(), поэтому он становится хешированным varchar в базе данных ... Исх. letmein = * D37C49F9CBEFBF8B6F4

+0

Первое изменение '== 1'' '0'. – kezi

+1

НЕТ, я не думаю, что он зашифрован, а хэширован и поэтому не может быть расшифрован. – Rahul

+0

Можете ли вы проверить, существует ли запись для этого письма? – kezi

ответ

1

Итак, я выполнял тесты на то, что я создал для этого, и я думаю, что нашел проблему. Это расстраивало.

http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html

Из документов на PASSWORD() функции:

«Для того, чтобы разместить более длинные хэши паролей, столбец Password в таблице пользователя был изменен на данный момент, чтобы быть 41 байт, ее текущая длина «.

Мой пароль поле в моей колонке пользователя было только хранение 25 байт, так ПАРОЛЬ() моего поддельного пароль «asdfasdf» был выходом «* 1B1A59A0792309FDE6F1A8681D2B58C4F2639156», но мой стол был только хранение «* 1B1A59A0792309FDE6F1A868» из-за отсутствия пространства для хранения.

Я уверен, что вы можете догадаться о результате сравнения этих двух.

Возможно, это не ваша проблема, но это может помочь другому бедному, сломанному человеку в будущем.

+0

hmmm ... Поэтому я бы предположил, что varchar (20) слишком мал, если i ' м собирается хешировать его? – ALMorrow

+1

Да, это будет проблемой, к счастью, нетрудно изменить длину max varchar. Просто увеличьте его до примерно 50. Единственная проблема заключается в том, что все ваши текущие сохраненные пароли по сути являются нежелательными и должны быть исправлены, поскольку они усекаются и никогда не будут правильно сравнивать с выходом функции PASSWORD(). –

+0

Это исправить вашу проблему? –

1

Попробуйте это:

Если функция PASSWORD PHP затем вызвать эту функцию в запросе следующим образом.

$sql = "SELECT email, password FROM members WHERE email = '".$taremail."' 
     AND password = PASSWORD('$tarpasswd')"; 
+0

** Неустранимая ошибка: вызов неопределенной функции PASSWORD() ** - это то, что я получаю, когда пытаюсь использовать это в моем запросе – ALMorrow

+0

'ПАРОЛЬ' является функцией? затем включите эту функцию на этой странице. – kupendra

+0

зарегистрируйте свой код на странице регистрации .. где вызывать эту функцию и шифровать пароль для hase ?? – kupendra

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