我在一个数据库中有两个用户,当我尝试登录时,它只是停留在索引页面上。如果数据库中有一个用户,您可以登录,但如果有两个用户,则只会重定向到索引页。有什么问题。
<?php
include("connect.php");
$username = $_POST["username"];
$password = $_POST["password"];
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
echo $username;
echo $password;
if (empty($_POST['username']) || empty($_POST['password']))
{
//$_SESSION["login_error"] = "1";
echo 'error code 1';
header ('Location: ../index.php');
}
//$password = sha1($password);
$sql = "SELECT * FROM users";
$result = mysql_query($sql);
if (!$result) die('Invalid query: ' . mysql_error());
$userid = "";
while ($row3 = mysql_fetch_array($result, MYSQL_ASSOC))
{
if(($username == $row3["username"]) && ($password == $row3["password"]))
{
$userid = $row3["id"];
$_SESSION["userid"] = $userid;
//$online = mysql_query("UPDATE numbers SET online='1' WHERE id='".$userid."'")
//or die(mysql_error());
//$type = mysql_query("UPDATE numbers SET type='facetime' WHERE id='".$userid."'")
//or die(mysql_error());
echo $userid;
echo 'error code 2';
header ('Location: ../control_panel.php');
}
else
{
$userid = "";
$_SESSION["userid"] = "";
header ('Location: ../index.php');
echo 'error code 3';
}
//debug
//echo $password;
//$useridvar = $_SESSION["userid"];
//echo $useridvar;
}
if ($_SESSION["userid"]=="")
{
header ('Location: ../index.php');
echo 'error code 4';
}
//else
//{
// $userid = "";
// $_SESSION["userid"]= "";
// header ('Location: ../login.php');
//}
?>发布于 2011-07-29 17:14:11
你的代码很糟糕。你是在遍历整个用户表吗?那太可怕了。试试这个:
<?php
include("connect.php");
$username = $_POST["username"];
$password = $_POST["password"];
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
if (empty($_POST['username']) || empty($_POST['password']))
{
header ('Location: ../index.php?emptyusernameorpassword');
die();
}
$result = mysql_query("SELECT * FROM users where username = '".$username."' and password = '".$password."' LIMIT 1") or die('Invalid query: ' . mysql_error());
$row3 = mysql_fetch_assoc($result);
if(mysql_num_rows($result) != 0)
{
$_SESSION["userid"] = $row3["id"];
header ('Location: ../control_panel.php');
die();
}
else
{
$_SESSION["userid"] = "";
header ('Location: ../index.php?invaliduserorpassword');
die();
}
?>发布于 2011-07-29 17:41:15
好了,其他的答案已经指出了你的主要错误:“在发送报头之前不要输出任何东西”。Develroot还说,您不应该遍历users表的所有记录。
但是,如果您仍然对两个用户被重定向到索引的原因感兴趣,,那么答案是:
在您的循环中,您计划遍历users表的所有记录,如果找到正确的记录,将重定向到正确的位置,如果找到错误的记录,则重定向到索引。
因此,根据表中记录的顺序,您的代码通常会执行以下操作:
如果你在找到好的用户后中断你的循环,你的代码就可以工作了。(效率低下,但可以工作)。
当然,你真的应该按照Develroot建议的方式来设计这个过程。
发布于 2011-07-29 17:14:35
在调用header()函数之前,会先调用echo()。据我所知,如果您的脚本之前生成了输出,则添加HTTP标头将不起作用。另外,我认为Location header需要以http://或/开头的绝对路径。然后,您可能应该在对header()的调用之后立即添加exit()调用,以防止稍后添加任何其他头信息。
https://stackoverflow.com/questions/6870953
复制相似问题