2013-06-06 2 views
0

Я пишу простой скрипт входа PHP, но имею некоторые проблемы с запросом mysql. Структура таблицы Идент выглядит следующим образом:Ошибка простейшего входа PHP

username attribute value 

userA password 123456 
userA status active 
userB password 987654321 
userB status active 

Эта структура выглядит глупо, но я должен сохранить структуру, как это.

$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 
$sql="select username, value from authtable where (attribute <=> 'password')"; 
$result=mysql_query($sql); 
$myusername = $result['username']; 
$mypassword = $result['value']; 
$count=mysql_num_rows($result); 

следующее обработка результата:

if($count==1){ 

session_register("myusername"); 
session_register("mypassword"); 
header("location:manager.php"); 
} 
else { 
echo "Login failed"; 
} 

Но этот сценарий всегда возвращает сбой входа в систему, хотя обеспечить правильное имя пользователя и пароль.

Не могли бы вы указать, где проблема? Большое спасибо.

+0

OT: Никогда, никогда не сохранять пароли в виде обычного текста! – simplyray

ответ

0
select username, value from authtable where (attribute <=> 'password') 

Дает вам столько записей, сколько у вас есть.

Вы забыли указать, какого пользователя вы хотите.

SELECT `username`, `value` 
FROM `authtable` 
WHERE `attribute` <=> 'password' 
    AND `username` = '{$myusername}' 
+0

Спасибо, я наконец нашел, что просто используйте $ sql = "select * from authtable, где username = '{$ myusername}' и value = '{$ mypassword}'" будет работать, так как всегда будет только одна строка, соответствующая требования. – thepusher

0

всегда

стол как:

username password status  

userA 123456 active 
userA 987654321 active 

и SQL, как:

select username, value from authtable where (password = ? and username = ?)