PHP if else语句else给出空白屏幕

时间:2014-07-23 11:41:41

标签: php if-statement

我的代码底部附近的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语句是否有效。

2 个答案:

答案 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}}