Очень просто, как можно проверить, существует ли пользователь в моей базе данных MySQL?

0

Здесь то, что у меня есть, но ничего не выводится на экран.:\

<html>
<head>
</head>
<body>
<? 
mysql_connect(localhost, "sergio", "123");
@mysql_select_db("multas") or die( "Unable to select database");

$query="SELECT * FROM usuario";
$result=mysql_query($query);

$num=mysql_numrows($result);
$i=0;

$username=GET["u"];
$password=GET["p"];

while ($i < $num) {

$dbusername=mysql_result($result,$i,"username");
$dbpassword=mysql_result($result,$i,"password");

if(($username == $dbusername) && ($password == $dbpassword)){
echo "si";
}

$i++;
}

?>
</body>
</html>

Я выполняю итерацию через всех пользователей и вижу, есть ли соответствие для пользователя && пароль.

Любые указания?

Теги:

2 ответа

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

Вы должны запросить базу данных напрямую, используя фильтр WHERE. В вашем случае вы можете сделать что-то вроде

$user = mysql_real_escape_string($_GET["u"])
$pass = mysql_real_escape_string($_GET["p"])

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

$query = "SELECT * FROM usario WHERE username = '$user' AND password = '$pass'"

Таким образом, на самом деле вам не нужно перебирать всех пользователей в вашем приложении. Скорее всего, MySQL может сделать эту операцию гораздо эффективнее. Если результирующий набор пуст, то имя пользователя или пароль не существует в базе данных. Если результирующий набор содержит запись, он вернет в запрос только запись, соответствующую имени пользователя и паролю.

Обратите внимание, что переменные get в PHP фактически находятся в глобальной переменной $_GET, а не просто GET. Вызов mysql_real_escape_string необходим для предотвращения атак SQL-инъекций.

1

Вы не хотите извлекать ВСЕ пользователей, а затем сравнивать один за другим с корневым паролем имени пользователя, поверьте мне.

Попробуйте следующее:

$query= "SELECT id FROM usuario 
         WHERE LOWER(username) = LOWER('" . mysql_real_escape_string($_GET["u"]) . "'
         AND
         password = '" . mysql_real_escape_string($_GET["p"]) ."';";

Тогда

$result=mysql_query($query) or die (mysql_error());
if(mysql_numrows($result) > 0) echo 'si';

И что это.

Теперь ошибка в вашем коде здесь $username=GET["u"]; должна быть $username=$_GET["u"];. Кроме того, возможно, вы захотите передать имя пользователя и пароль через POST вместо GET по соображениям безопасности.

Ещё вопросы

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