如果有人询问我很抱歉,但我不知道该搜索什么来寻找答案。
我刚刚开始学习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,你现在已经登录了。”。
这两个变量应该是相同的...为什么一个工作而另一个不工作?
答案 0 :(得分:1)
检查控制流程:
你有while循环while($row = mysqli_fetch_array($query))
- 所以你要为$row
分配一个新值并进行测试。如果它的计算结果为false(即没有更多行),则会中断循环。
这意味着,在循环$row
之后不再具有有效内容。您存储的值(例如$dbfirstname
)来自循环的上一次迭代,因此包含有效数据。