функция входа не работает должным образом - PullRequest
1 голос
/ 11 декабря 2011

Здравствуйте, я столкнулся со странной проблемой;Я использую этот код для проверки данных для входа в систему с помощью моего db

include("includes/config.php");
include("includes/database.php");

$name = $_POST['username'];
$pass = $_POST['password'];

$sql = "SELECT * FROM info_user WHERE user_name = '$name' AND password = '$pass'";

$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($result) or die(mysql_error());
echo $row['user_name']. " - ". $row['password'];


if (mysql_num_rows($sql)) {
echo "success"; 
}

else
{
 echo "failed"; 
}

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

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

Сначала:

$row = mysql_fetch_array($result) or die(mysql_error());

Если вы передадите неправильное имя пользователя или пароль, mysql_fetch_array () вернет FALSE, потому что нет строк, из которых можно извлечь.Это приводит к выполнению вашей or die(mysql_error()) части, что означает, что ваш сценарий умирает и ничего не выводит, поскольку mysql не завершился с ошибкой - что снова означает, что mysql_error () не имеет к вам никакого возврата.

Во-вторых, выиспользование mysql_num_rows () в строке $sql, а не в переменной $result, которая фактически содержит ресурс mysql, который вы должны использовать.

Перед использованием mysql_fetch_array () также следует проверить mysql_net_rows (), так чточто вы не пытаетесь извлечь некоторые данные, которых у вас нет.

Наконец, ваше решение полно недостатков безопасности.Вы передаете необработанные данные в свою базу данных mysql, что делает вас уязвимым для SQL-инъекций, и вы храните ваши пароли в виде простых текстовых значений в вашей базе данных (не текстовые файлы, а просто текстовые значения).

Выследует Google SQL инъекций и хеширования паролей, чтобы улучшить вашу безопасность.

0 голосов
/ 11 декабря 2011

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

$num_rows = mysql_num_rows($result);

if ($num_rows > 0) { 
echo "success";
} else { 
echo "failed"; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...