我目前正在创建一个网站,用户可以登录到一个账户。为此,我需要检查用户提交的电子邮件和密码是否与MySQL数据库中的相同。如何检查变量是否具有与提取相同的值()
这是我的代码;
<h2> Log in to an existing account </h2>
<form action = "account.php" method = "POST" id = "log">
<p><label> Email </label> <input type = "text" name = "logmail" ></p>
<p><label> Password </label> <input type = "password" name = "logpass"></p>
<p><input type = "submit" value = "Log in"></p>
if(!empty($_POST['logmail']) && !empty($_POST['logpass']))
{
$sql = ("SELECT customer_mail FROM customer_user WHERE customer_mail = '{$_POST['logmail']}'");
$sql2 = ("SELECT customer_pass FROM customer_user WHERE customer_pass = '{$_POST['logpass']}'");
$stmt = $dbh->prepare($sql);
$stmt2 = $dbh->prepare($sql2);
$stmt->execute();
$stmt2->execute();
var_dump($stmt->fetch());
var_dump($_POST['logmail']);
var_dump($stmt2->fetch());
var_dump($_POST['logpass']);
if($stmt->fetch()[0] == $_POST['logmail'])
{
if($stmt->fetch()[0] == $_POST['logpass'])
{
echo "Logged in";
}
else
{
echo "Wrong password";
}
}
else
{
?> <h2> Wrong email </h2> <?php
}
}
当我尝试运行此,该var_dumps给了我一个阵列stmt-> fetch()方法和stmt2->取。这些阵列的位置0是我尝试登录的帐户的电子邮件和密码。它们也与我在表单中的字段中键入的内容相同。 $ _POST的var_dumps证实了这一点。
但即使认为它们完全相同,它也不会触发If语句。
有谁知道这可能是为什么?
为什么不只是有一个SQL查询在一个请求中返回两个值?数据库查询的执行时间很昂贵,所以不要做不必要的查询 –
关闭你的HTML表单 –
你不应该有错误的电子邮件/错误的密码不同的错误信息,否则你将信息给淘气的hackery-键入人物 –