2012-05-11 4 views
0

Я просто пытаюсь написать простой скрипт, который проверяет имя пользователя и пароль пользователя, пытающегося войти в систему ... и затем запускает сеанс. Однако у меня проблемы.SELECT query problem - система входа пользователя

Когда я пытаюсь запустить сценарий ниже, SUCCESS не распечатывает. Однако, как если бы имя пользователя и пароль были неверными, я знаю, что введенное имя пользователя и пароли действительно являются правильными.

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

$result = mysql_query("SELECT * FROM users WHERE username='.$username.' AND password='.$password.'"); 

while($row = mysql_fetch_array($result)){ 
    echo 'SUCCESS'; 
} 

Когда я пытаюсь запустить скрипт ниже, однако, успех распечатывает два раза (это число выборок пользователей у меня в дб до сих пор), что является правильным.

У меня проблема с запросом AND mySQL выше, однако, мне кажется правильным, есть ли проблема с моим первым запросом выше? если нет, то что еще может быть проблемой?

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

$result = mysql_query("SELECT * FROM users"); 

while($row = mysql_fetch_array($result)){ 
    echo 'SUCCESS'; 
} 
+0

fyi! - http://php.net/manual/en/function.mysql-real-escape-string.php – trapper

+3

некоторые люди упомянули уязвимость внедрения SQL, но также убедитесь, что вы не храните пароли открытого текста в своей базе данных. даже простой 'md5()' лучше, но для достижения наилучших результатов используйте сильную схему шифрования и достаточно длинную соль. – davethegr8

+0

Буду, спасибо за совет. Я все еще на начальных этапах создания веб-сайта и еще не предпринял никаких мер безопасности; Я обязательно планирую в будущем, спасибо вам;) – AnchovyLegend

ответ

3

Вы - parsing variables, а не concatenating им, вам не нужен ..

"SELECT * FROM users WHERE username='$username' AND password='$password'" 
+0

спасибо! вы совершенно правы, это устранило мою проблему. Я ценю вашу помощь. – AnchovyLegend

+0

Нет проблем. Рад, что смог помочь :-) –

3

username является защищенным ключевым словом , попробуйте следующее:

$result = mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `password`='$password'"); 
+1

Нет, это не так. http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html –

+0

Спасибо за ответ. Я думаю, что вы слишком усложняете проблему :) Обратите внимание на ответ @Rockets. – AnchovyLegend

+0

@Rocket вы правы – Bloafer

2

Попробуйте вместо этого:

$result = mysql_query("SELECT * FROM users WHERE username=\"$username\" AND password=\"$password\""); 

Очевидно, что это не лучший способ вставки данных. Вы должны посмотреть на mysqli, чтобы вставить данные как минимум.

+0

Вы можете использовать одинарные кавычки в запросе, вместо того, чтобы избегать двойных кавычек. –

3

Игнорируя зияющую SQL injection уязвимости, вы построение вашей строки запроса неправильно:

$result = mysql_query("SELECT * FROM users WHERE username='.$username.' AND password='.$password.'"); 
                 ^  ^

Вы все еще в «режиме строки», где указанные периоды (и для секции пароля слишком), поэтому вы вставляете литеральные периоды в строку запроса, а не выполняете конкатенацию строк.

Дистанционные периоды, и вы будете лучше (но по-прежнему уязвимы к SQL Injection):

$result = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password'"); 
1

попробовать эту линию вместо:

$result = mysql_query("SELECT * FROM `users` WHERE `username`='".$username."' AND `password`='".$password."'"); 

Примечание I дополнительные " «ы 've добавил (а). до его поиска '.$username.'

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