【问题标题】:Forgotten password page help [PHP/HTML]忘记密码页面帮助 [PHP/HTML]
【发布时间】:2014-12-16 17:10:29
【问题描述】:

我有一个 CMS,我正在创建一个忘记密码的页面,该页面将要求用户输入电子邮件地址,代码将在数据库中找到它并向他们发送电子邮件,在我的数据库中,我有多个用户分配给一个电子邮件地址的帐户。 我想要它,以便如果用户输入一个电子邮件地址并且分配给它的帐户不止一个,错误消息说请联系您的管理员,但 atm,它没有这样做。有什么建议吗?

这是我忘记密码的页面代码:

                    if ($lookup) {
                        $user->sendPasswordResetEmail();
                        echo"sent email";
                        } elseif ($lookup) {
                            echo "please contact your admin";
                                }else{ 
                                $echo"Can't find user";
                                }
            }
    }else{
        echo "please enter an email address";
        }
}

我从另一个文件中获取信息,这里是我获取数据库的代码的 sn-p:

 $resetsystem = $db->query($qry);
 if ($resetsystem && $resetsystem->num_rows == 1) {
 $that->setUserData($rs->fetch_assoc());
 return true;
        }
            if ($resetsystem && $resetsystem->num_rows > 1) {
                return;
            }
        return false;
    }

【问题讨论】:

  • 在第一个代码块中,这看起来很时髦:$numfound = $
  • 你的elseif 不是在检查null,而是在检查true。
  • 对不起,我忘了删除 $numfound = $
  • @JeremiahWinsley 感谢您的回复,我不希望它检查 null,我希望 elseif 检查是否有多个电子邮件地址,然后输出错误消息
  • 当有多个电子邮件地址时,您的函数会返回 null。要检查这一点,您需要检查 null。如果您不希望这样,请更改您的函数以返回不同的内容。

标签: php html


【解决方案1】:

更新以下代码:

function lookupByEmail($userID) { 
  global $db; 
  $this->id = $userID; $qry = " SELECT user_id, user_first_name, user_last_name, user_username, user_email, user_suspended FROM cms_users WHERE user_email = " . $db->SQLString($this->id) . " AND user_deleted
= 0;"; 
$rs = $db->query($qry); 
if ($rs && $rs->num_rows == 1) { 
  $this->setUserData($rs->fetch_assoc()); 
  return 1; 
} 
if ($rs && $rs->num_rows > 1) { 
  return 2; 
} 
return 0; 
}

然后在您检查 $found 变量的地方进行这些更新

if ((int)$found == 1) {
  $user->sendPasswordResetEmail();
  $str_Message = '<div class="success_message">User found, an email has been dispatched to you.</div>';
} elseif ((int)$found > 1) {
  $errors->defineError("too_many_users", "please contact your admin", array());
}else{ 
  $errors->defineError("user_not_found", "The specified user could not be found.  Please try again.", array());
}

【讨论】:

  • 这行得通,你能解释一下这些变化吗?我还在学习中,如果你能详细解释一下,我将不胜感激。
  • 在 lookupByEmail 中,我已将返回值从 boolean 更改为 int,因此我们可以满足多种情况,例如0,1 和 2 以及在 $found 中,如果条件我使用了这些返回值,如果我的答案对你有用,那么可以帮助其他有相同问题的人。
  • 我已经设置为已回答了,你为什么将cases设置为0 1和2,这些数字有什么意义吗?真假不能用吗?
  • 真为假只是两个值,在我们的例子中我们需要 3 个返回值,一个如果为真,一个如果为假,一个如果为真,但有多个结果,这就是我改变它的原因跨度>
  • 我已经更改了我的代码并调整了您的答案,请您查看更改。
猜你喜欢
  • 1970-01-01
  • 2015-03-08
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
相关资源
最近更新 更多