Здесь то, что у меня есть, но ничего не выводится на экран.:\
<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>
Я выполняю итерацию через всех пользователей и вижу, есть ли соответствие для пользователя && пароль.
Любые указания?
Вы должны запросить базу данных напрямую, используя фильтр 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-инъекций.
Вы не хотите извлекать ВСЕ пользователей, а затем сравнивать один за другим с корневым паролем имени пользователя, поверьте мне.
Попробуйте следующее:
$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
по соображениям безопасности.