2010-10-23 99 views
1

我试图使用php登录页面,但是当我使用header()重定向到另一个页面时,我的用户/通过检查我的数据库以某种方式失败。难道我做错了什么?php登录:与标题问题

此外,我知道我错过了安全卫士,我正在实施步骤,因为我还是比较新的PHP。但一些技巧和建议,将不胜感激!

$dbc = mysqli_connect('localhost', 'root', 'admin', 'wamad') 
or die("Error connecting to MySQL server."); 

$query = "SELECT * FROM $table WHERE username = '$username' and password = '$password';"; 

$result = mysqli_query($dbc, $query) 
    or die("Login error"); 

if(mysqli_num_rows($result) == 1){ 

header("Location:login_success.php"); 
}else{ 
    echo "Wrong username or password."; 
} 

echo mysqli_num_rows($result); 
mysqli_close($dbc); 

回答

1

我不是100%正面你想要做的,但通常你需要在使用位置标题后杀死脚本。

header('Location: login_success.php'); 
die(); 

否则脚本在设置标题后继续运行。

+0

我想检查,如果用户登录尝试是否有效。当我没有header()行时,它可以正常工作,但是当它被包含时,它似乎无法正确检查我的db。我打印出用户/通过的搜索查询,并且当包含该行时,我得到一个0。 – 2010-10-23 19:20:55

+0

哦,...杀死脚本也没有工作 – 2010-10-23 19:22:30

2

你不需要分号。发送一个头文件后,我从未使用过die();,并且它始终正常工作。

在发送标题之前,您是否将一些输出发送到浏览器?如果是这种情况,您的标题将不会被设置。你是否显示PHP错误?你有错误日志吗?有错误显示吗?

此外,标题应始终以断行结束了,所以送header ("Location: login_success.php\n");

+0

不,我不会在发送标题之前输出任何东西。这个问题主要与mysqli_num_row($ result)有关。当我包含标题时,它找不到我的查询,否则它工作正常。 你能解释为什么标题应该总是以换行符结束吗? – 2010-10-25 08:26:13

+0

换行符分隔标题字段。你在error_log中收到任何错误消息吗? – stpn108 2010-10-25 08:49:55

+0

关于错误的nvm,我知道我在做什么错误...愚蠢的错误。谢谢! – 2010-10-27 06:26:24