2010-04-14 3 views
0

На входе:массив с сессиями, печатает только одна буква

$result = mysql_query("SELECT `id`, `username`, `email` FROM `users` 
        WHERE `username` = '$username' 
     AND `password` = '$passwd'"); 
$userdata = array('id','username','email'); 
$_SESSION['user'] = mysql_result($result, 0, $userdata); 

И когда я хочу, чтобы напечатать пользователи имя пользователя:

echo $_SESSION['user']['username'] 

он печатает только первую букву:/

Что не так?

+0

@jolabero: добро пожаловать в SO. Обычно вы можете получить более быструю помощь по своим вопросам, пометив их языком, который вы используете. Удачи. – bernie

ответ

1

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

+0

Согласовано с Danten –

0

попробовать это

$_SESSION['user']['id'] = mysql_result($result, 0, 'id'); 
$_SESSION['user']['username'] = mysql_result($result, 0, 'username'); 
$_SESSION['user']['email'] = mysql_result($result, 0, 'email'); 

также убедитесь, что сама база данных не содержит только первую букву изначально.

0

Возможно, вы, вероятно, захотите использовать mysql_fetch_assoc() вместо mysql_result(). mysql_result() дает только одно значение ячейки из вашего набора результатов, поэтому, когда вы назначаете $_SESSION['user'] = mysql_result($result,0,$userdata);, вы получаете только первое значение ячейки в строке результата. Доступ к нему с помощью ассоциативного ключа (то есть $_SESSION['user']['username']) невозможно, так как это не массив.

Если вы используете mysql_fetch_assoc(), вы будете иметь ключ/значение пары ваших имен столбцов и значений для работы с:

$result = mysql_query("SELECT `id`, `username`, `email` FROM `users` 
        WHERE `username` = '".mysql_real_escape_string($username)."' 
     AND `password` = '".mysql_real_escape_string($passwd)."'"); 
$_SESSION['user'] = mysql_fetch_assoc($result); 

Как побочный эффект, mysql_fetch_assoc() гораздо быстрее, чем mysql_result().

Примечание: Я также разместил там mysql_real_escape_string(), так как вы обязательно должны избегать ваших данных запроса, если только вы не уверены, что это безопасно.

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