Совершенно хороший скрипт входа в PHP / MySQL не работает - PullRequest
0 голосов
/ 20 августа 2010

Эй, ребята, я уже несколько часов ломаю голову над этим сценарием входа.Это тот, который я всегда использовал, и я знаю, что он работает на моей версии MySQL.Он просто не отправит меня на правильную авторизованную страницу, он всегда будет перенаправлен в файл "login_failed.php".

Любая помощь очень ценится.

<?php
ob_start();
$host="localhost";
$username="*****"; 
$password="*****";
$db_name="*****"; 
$tbl_name="*****";

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$myusername=$_POST['user']; 
$mypassword=$_POST['pass'];

$encrypted_password=md5($mypassword);

$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and passwd='$mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($count==1){
session_register("myusername");
session_register("mypassword"); 
header("location:main.php");
}
else {
header("location:login_failed.php");
}

ob_end_flush();
?>

Ответы [ 4 ]

3 голосов
/ 20 августа 2010

То, что я вижу, не совсем верно в отношении кода:

  1. Скорее всего, вам не понадобится stripslashes(), поскольку магические кавычки устарели.

  2. Вам не нужно экранировать хешированный пароль.Можно считать, что результат вызова md5() может быть 32 шестнадцатеричными символами.

  3. НЕ используйте SELECT * ..., когда вам не нужны всеfields.

  4. Вероятно, вам следует trim() ввести ($_POST['user'] и $_POST['pass']), чтобы избавиться от лишних пробелов, которые могли быть случайно вставлены.

  5. Как указано в ircmaxell, вы не используете хешированный пароль в запросе.Я надеюсь, что это была просто ошибка при построении запроса.

  6. Вы должны посолить свои пароли.Прочитайте эту статью: Просто хеширования далеко недостаточно.

Теперь ... Вы пытались повторить запрос и запустить его самостоятельно, чтобы увидеть, что на самом деле происходит?Например:

Удалите перенаправления и введите echo $sql, прежде чем позвонить mysql_query()

2 голосов
/ 20 августа 2010

может быть двух таких пользователей в БД ... также проверьте правильность значений, которые вы используете в запросе.Вы используете нелатинские / специальные символы в имени пользователя / пароле?

0 голосов
/ 08 февраля 2013

Убедитесь, что вы проверяете на наличие ошибок после вызова mysql_query, например, так:

if (!($res = mysql_query($query)))
  die("MySQL query $query failed: ".mysql_error()) ;

Если это не вызывает ошибок, добавьте:

echo("Running query $query");

перед вызовом mysql_query () и посмотрите, соответствует ли запрос тому, что вы ожидали, и если да, будет ли он успешно выполняться из клиента командной строки MySQL или какого-либо другого инструмента, который позволяет выполнять запросы к MySQL.

0 голосов
/ 20 августа 2010

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

//instead of ...
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and passwd='$mypassword'";

//try...        
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and passwd='$encrypted_password'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...