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,我如何阻止它同时显示两条消息?
发布于 2012-08-11 01:28:17
你的代码很清楚地解释了所有的事情:
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";
}发布于 2012-08-11 01:28:41
你似乎在用一种非常奇怪的方式做这件事。
while($stmt->fetch()) {因此,您将遍历数据库中的整个结果列表,检查每个结果是否与用户的详细信息匹配。为什么不在查询本身中包含详细信息呢?这样,你只需要检查从数据库返回的结果-如果你得到一个返回的结果,你就知道它是一个有效的登录;如果没有,你可以显示你的'invalid login‘消息。
一旦你知道你得到了一个有效的结果,你就可以检查该帐户是否需要激活。
在伪代码中:
if ($stmt->fetch()) {
if ($row->$dbActive) {
# valid login
} else {
# needs activation
}
} else {
# invalid login
}发布于 2012-08-11 01:26:06
这个逻辑可以变得更简单
发自:
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...";
}https://stackoverflow.com/questions/11906419
复制相似问题