我的代码底部附近的if else语句有问题。
如果条件为真,则正确回显登录和用户名“super_user”但如果条件为假我得到一个空白屏幕,它不会回显我的失败消息“nope”
“超级用户”和“密码”从前一页的html输入表单中传递
我不确定我在这里遇到了什么问题,我是PHP新手。
<?php
session_start();
if ($_POST['Submit2']) {
$super_user= $_POST['super_user'];
$password= $_POST['password'];
$db = new mysqli('*******', '******', '*******', '******');
if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}
$sql = <<<SQL
SELECT *
FROM `admin`
WHERE password='$password' AND super_user='$super_user'
SQL;
if(!$result = $db->query($sql)){
die('There was an error running the query [' . $db->error . ']');
}
while($row = $result->fetch_assoc()){
if (($super_user == $row['super_user'] && $password == $row['password'] )){
echo "logged in ";
echo "<br>";
echo $row['super_user'];
}
else
{
echo "nope";
}
}
}
?>
我试图创建一个简单的登录系统,该系统会设置会话并使用以下内容重定向回主页:
$_SESSION['loggedin'] = $super_user;
header("Location:index.php");
exit;
但在我这样做之前,我想只是回显用户名“super_user”,看看我的if else语句是否有效。
答案 0 :(得分:0)
问题是如果你运行一个错误的查询,你将永远不会进入while循环(因为它首先不匹配用户/密码,所以你的sql查询不会返回任何结果/行)。
因此,您的代码会跳过while循环....然后才会结束 - 因此会出现白色&#39;页。
最后添加一条消息:
if ($result->rowCount > 0)
{
while($row = $result->fetch_assoc()){
if (($super_user == $row['super_user'] && $password == $row['password'] )){
echo "logged in ";
echo "<br>";
echo $row['super_user'];
}
else
{
echo "nope";
}
}
}
else
{
echo 'no matching user found';
}
答案 1 :(得分:0)
您的SQL查询将检索具有给定用户名和密码的所有行。有(确切地)有一个或没有。因此,如果有if()
,则while
将始终为真,如果没有,则永远不会执行,因为$found = 0;
while ($row = $result->fetch_assoc())
{
$found = 1;
}
if ($found)
echo "Logged in";
else
echo "nope";
将被执行0次。
相反,你可以使用
if ($result->fetch_assoc())
echo "Logged in";
else
echo "nope";
或更简单:
{{1}}