为什么我不能从数组中回显变量?

时间:2015-11-25 02:25:17

标签: php

如果有人询问我很抱歉,但我不知道该搜索什么来寻找答案。

我刚刚开始学习PHP并且正在做一个简单的教程,我正在“登录”一个数据库(只是检查电子邮件和密码是否与存储的内容相匹配,没有创建实际的会话)。

我有这段代码:

<?php

include("connectToDb.php");
$loginEmail = $_POST['loginEmail'];
$loginPassword = $_POST['loginPassword'];

$query = mysqli_query($dbc, "SELECT * FROM users WHERE email='$loginEmail'");
$numrows = mysqli_num_rows($query);
if($numrows != 0)
{
    while($row = mysqli_fetch_array($query))
    {
        $dbemail = $row['email'];
        $dbpassword = $row['password'];
        $dbfirstname = $row['firstName'];
    }
    if($loginEmail == $dbemail)
    {
        if ($loginPassword == $dbpassword)
        {
            echo "Hi ".$row['firstName'].", you are now logged in.";
        }
        else
        {
            echo "login failed.";
        }
    }
}
mysqli_close($dbc);
?>

但echo语句中的$ row ['firstName']打印为空字符串:“嗨,您现在已登录了。”。如果我使用完全相同的代码,但在echo语句中使用$ dbfirstname重新生成$ row ['firstName'],我会收到格式正确的消息“嗨Jason,你现在已经登录了。”。

这两个变量应该是相同的...为什么一个工作而另一个不工作?

1 个答案:

答案 0 :(得分:1)

检查控制流程:

你有while循环while($row = mysqli_fetch_array($query)) - 所以你要为$row分配一个新值并进行测试。如果它的计算结果为false(即没有更多行),则会中断循环。

这意味着,在循环$row之后不再具有有效内容。您存储的值(例如$dbfirstname)来自循环的上一次迭代,因此包含有效数据。