[英]unknown problems with php login
我是新来的,很高兴认识你们所有人^ _ ^
我有一个项目,目的是实施一个允许用户登录的简单网站,我尝试在网上搜索,但仍然不知道如何解决。 下面是我在参考了多个源代码后编写的代码(login.php)。
if(!($stmt = $mysqli->prepare("SELECT * FROM attendant WHERE username = ?")))
{
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
else
{
if(!($stmt->bind_param('s',$username)))
{
echo "bind parameter failed";
}
else
{
if(!($stmt->execute()))
{
echo "Execute Failed:(" . $stmt->errno .")". $stmt->error;
}
else
{
$res = $stmt->get_result();
while($row = $res->fetch_assoc())
{
if($row["username"] == $username && $row["password"] == $password && $row["status"] == $status)
{
$_SESSION['user']=$username;
header("Location: test.html?user=$username");
}
else if($row["username"] == $username && $row["password"] == $password && $row["status"] != $status)
{
header("Location: test.html?user=$username#verify-slide");
}
else
{
header("Location: test.html?Login=Fail#login-slide");
}
}
}
}
}
$stmt->close();
}
如果用户名确实存在于数据库中,则登录名可以正常工作。 但是,如果不是这样,则该功能将无法正常工作,只会保留在login.php文件中。
如果db中没有匹配的记录,那么它将不会进入while循环。
添加exit();
在head(...)
,并放置header("Location: test.html?Login=Fail#login-slide");
在while循环之外。
而且while循环不是必需的,您可以像下面这样更改代码:
$res = $stmt->get_result();
if ($row = $res->fetch_assoc() && $row["password"] == $password) {
if($row["status"] == $status) {
$_SESSION['user']=$username;
header("Location: test.html?user=$username");
} else {
header("Location: test.html?user=$username#verify-slide");
}
} else {
header("Location: test.html?Login=Fail#login-slide");
}
exit();
如果没有与用户名匹配的内容,则永远不会进入while循环。 这意味着您的脚本将继续到最后。 您应该首先在每个标头调用之后放置一个exit()
语句。 然后,如果在while循环后用户名不存在,您应该做任何想做的事情。
也许你可以试试这个:
if(!($stmt = $mysqli->prepare("SELECT * FROM attendant WHERE username = ?")))
{
echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
else
{
if(!($stmt->bind_param('s',$username)))
{
echo "bind parameter failed";
}
else
{
if(!($stmt->execute()))
{
echo "Execute Failed:(" . $stmt->errno .")". $stmt->error;
}
else
{
$res = $stmt->get_result();
if($res->mysqli_num_rows()==0)
{
header("Location: test.html?Login=Fail#login-slide");
}
else
{
while($row = $res->fetch_assoc())
{
if($row["username"] == $username && $row["password"] == $password && $row["status"] == $status)
{
$_SESSION['user']=$username;
header("Location: test.html?user=$username");
}
else if($row["username"] == $username && $row["password"] == $password && $row["status"] != $status)
{
header("Location: test.html?user=$username#verify-slide");
}
}
}
}
}
}
$stmt->close();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.