这是我在登录时使用的代码:
$q = $lacz->query("SELECT email, pass, activation_code
FROM users
WHERE email='". $nazwa_uz_l ."'
AND pass = '". $haslo_l ."'
AND activation_code IS NULL ");
if($q->num_rows>0) {
$_SESSION['prawid_uzyt'] = $nazwa_uz_l; }
else
{
echo 'Pass or Log are wrong, or activation code is not confirmed (check email).';
exit;
}在这个查询中,我检查了所有三件事情:电子邮件、密码和激活代码,然后输出一个错误。我想要做的是在Pass或Log错误时输出第一个错误,当激活代码不是NULL时输出第二个错误(类似于elseif)。我尝试了else if和两个查询,但是我得到了错误。你能帮帮我吗?我核对答案并给点分数,谢谢。
发布于 2014-06-25 16:40:29
从查询中删除“和activation_code为空”,并执行以下操作
if($q->num_rows>0)
{
$row = $q->fetch_assoc();
if(!is_null($row['activation_code']))
{
$_SESSION['prawid_uzyt'] = $nazwa_uz_l;
}
else
{
echo 'Activation code is not confirmed (check email).';
exit;
}
}
else
{
echo 'Pass or Log are wrong.';
exit;
}发布于 2014-06-25 16:36:21
不要检查查询中的激活代码。只需获取用户信息,以及激活代码字段:
SELECT email, pass, activation_code
..
WHERE email='foo' and pass='bar'然后,您可以测试代码中的各个条件:
if (number_of_rows == 0) {
... bad username/password
} else if ($activation_code == '') {
... code is blank/null
}发布于 2014-06-25 16:37:02
如果从查询的AND activation_code IS NULL子句中删除WHERE,就可以为匹配给定电子邮件/密码的用户提取数据。然后,您将能够确定用户是否存在,或者他们的激活代码是否为空:
$q = $lacz->query("SELECT email, pass, activation_code
FROM users
WHERE email='". $nazwa_uz_l ."'
AND pass = '". $haslo_l ."'");
if ($q->num_rows === 0) {
echo 'Password or email address are wrong.';
exit;
} else {
$row = $result->fetch_assoc();
if (empty($row['activation_code'])) {
echo 'Activation code is not confirmed.';
exit;
} else {
$_SESSION['prawid_uzyt'] = $nazwa_uz_l;
}
}备注(不相关答案):我强烈建议使用参数化查询,而不是直接将值插入SQL;如果您喜欢当前的方法,请确保首先清理输入以防止SQL注入。
https://stackoverflow.com/questions/24414080
复制相似问题