function StoreUserProfileInSession( $username, $password )
{
session_start();
$query = pg_query( "SELECT * FROM mytable where username = '$username' AND password = '$password'" );
$rows = pg_fetch_array( $query );
foreach( $rows as $key => $value )
{
if( $key == 'password' ) //do not store password in session because it's DANGEROUS!
continue;
$_SESSION[$key] = $value;
}
}
这个函数被调用后,我被重定向到我的前端。
当我尝试print_r($_SESSION);
在那里,我只得到一个值在会话,这是user_id,我有很多字段在我的表。
为什么我只得到一个值?这有什么不对吗?
任何帮助或想法将非常感激和奖励!
谢谢!:)
两件事:
-
pg_fetch_array()
没有返回您期望的内容。 -
$_SESSION
不能有任何键名,也不能是php变量名。
$rows
看起来像这样:
$rows = array(
'user_id' => 1
1,
'password' => 'THE PASSWORD',
'THE PASSWORD',
);
$rows['user_id'] === $rows[0];
// etc
因此,在foreach循环中,就在user_id
键之后,您实际上是这样做的:
$_SESSION[0] = 1;
这是非法的,所以会话对象停止工作。
应该这样做:
// PGSQL_ASSOC says, "only return named keys, not numeric keys"
$therow = pg_fetch_array($query, null, PGSQL_ASSOC);
unset($therow['password']);
$_SESSION['user'] = $therow;
pg_free_result($query);
// get user data like this:
$_SESSION['user']['user_id']
也许这是因为你只得到一行后,你执行你的查询?
返回多少行:
"SELECT * FROM mytable where username = '$username' AND password = '$password'"
谢谢你的回答。我成功地回答了这个问题。
function StoreUserProfileInSession( $username, $password )
{
session_start();
$query = pg_query( "SELECT * FROM mytable where username = '$username' AND password = '$password'" );
$fields = array();
while( $rows = pg_fetch_array( $query ) )
{
$fields[] = $rows;
}
foreach( $fields[0] as $key => $value )
{
if( is_int( $key ) || $key == 'password' )
continue;
$_SESSION[$key] = $value;
}
}