while ($stmt->fetch()) {
if ($teacherusername == $dbTeacherUsername && $teacherpassword == $dbTeacherPassword) {
if ($dbActive == 1) {
$loggedIn = true;
} else if ($dbActive == 0) {
$loggedIn = false;
echo "You Must Activate Your Account from Email to Login";
}
}
}
if ($loggedIn == false && $_POST) {
echo "The Username or Password that you Entered is not Valid. Try Entering it Again";
}
在上面的代码中,我在显示消息时遇到问题,我似乎无法弄清楚我做错了什么。如果用户输入了错误的密码或用户名,则会显示消息
"The Username or Password that you Entered is not Valid. Try Entering it Again"
.
这很好,但如果 $dbActive
= 0,它应该只显示消息
You Must Activate Your Account from Email to Login
.
但相反,当发生这种情况时,它会显示两条消息,因此它会显示
You Must Activate Your Account from Email to LoginThe Username or Password that you Entered is not Valid. Try Entering it Again
.
我知道为什么会这样,但我似乎想不通。如果 $dbActive
= 0,如何阻止它显示两条消息?
你似乎以一种非常奇怪的方式这样做。
while($stmt->fetch()) {
因此,您正在循环访问数据库中的整个结果列表,检查每个结果以查看它们是否与用户的详细信息匹配。为什么不在查询本身中包含详细信息?这样,您只需要检查来自数据库的返回 - 如果您得到返回的结果,您就知道这是一个有效的登录名;如果没有内容,您可以显示"登录无效"消息。
一旦您知道自己获得了有效的结果,就可以检查该帐户是否需要激活。
在伪代码中:
if ($stmt->fetch()) {
if ($row->$dbActive) {
# valid login
} else {
# needs activation
}
} else {
# invalid login
}
你的代码非常清楚地解释了一切:
while($stmt->fetch()) {
if ($teacherusername == $dbTeacherUsername && $teacherpassword == $dbTeacherPassword) {
if ($dbActive == 1){
$loggedIn = true;
} else if ($dbActive == 0) {
$loggedIn = false;
/****************************
*
* at this point, $loggedIn == false.
*
****************************/
echo "You Must Activate Your Account from Email to Login";
}
}
}
/****************************
*
* at this point, $loggedIn == false.
*
* since $loggedIn == false and $_POST is truthy, your if statement will get entered.
*
****************************/
if ($loggedIn == false && $_POST) {
echo "The Username or Password that you Entered is not Valid. Try Entering it Again";
}
那么我们如何解决这个问题呢?容易!我们添加另一个变量来声明用户是否处于活动状态。
$active = true;
.
.
.
if ($dbActive == 0) {
$loggedIn = false;
$active = false;
echo "You Must Activate Your Account from Email to Login";
}
.
.
.
if (!$loggedIn && $active && isset($_POST['formInputName']) {
echo "The Username or Password that you Entered is not Valid. Try Entering it Again";
}
这个逻辑可以更简单
从:
if ($dbActive == 1){
$loggedIn = true;
} else if ($dbActive == 0) {
$loggedIn = false;
echo "You Must Activate Your Account from Email to Login";
}
自:
if ($dbActive == 1){
$loggedIn = true;
} else{
$loggedIn = false;
echo "You Must Activate Your Account from Email to Login";
}
和您的最后条件
if ($loggedIn == false && isset($_POST['somefield']) {
echo "The Username or Passwor...";
}
if ($loggedIn == false && !empty($_POST) && $dbActive != 0) {
echo "The Username or Password that you Entered is not Valid. Try Entering it Again";
}