密码重置脚本只会激活一半的时间

时间:2009-10-04 01:30:24

标签: php mysql

根据用户输入用户名或电子邮件地址,我有一条效率低下的代码用于重置密码。 PHP脚本根据使用的标识符进行分支。我把它折叠成一个,如果用户输入他们的用户名,现在可以正常工作,但如果他们输入了他们的电子邮件地这是突出的代码:

$identifier = isset($_POST["username"])?"username":"email";
$ident = isset($_POST["username"])?trim(mysqli_real_escape_string($mysqli,(check_chars_username($_POST["username"])))):trim(mysqli_real_escape_string($mysqli, (check_chars_email($_POST["email"]))));


    //create and issue the query
    $sql = "SELECT * FROM aromaMaster WHERE $identifier = '$ident'";
    $sql_res =mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));

    if(mysqli_num_rows($sql_res) == 0) {
      //wrong login info
      header("Location: password_reset_form.html/error=$ident");
      exit();
    }
      $info = mysqli_fetch_array($sql_res);
        $userid = $info["id"];
        $username = stripslashes($info["username"]);
        $email = stripslashes($info["email"]);

我检查并加倍检查电子邮件表单字段是否被称为电子邮件。这让我挠头。特别有趣的是标题重定向。当我输入电子邮件地址并重定向时,变量$ ident显示为空。

1 个答案:

答案 0 :(得分:0)

正如您在评论中指出的那样,您必须检查username数组的$_POST变量是否为空。

除了在测试变量为空白之前和之前,检查变量是否在第一位也是一个好主意。

$identifier = 
 (isset($_POST["username"]) && !empty($_POST["username"])) ? "username":"email";

当您发送表单时,所有文本输入字段都会通过,即使它们是空白的。空白与空白不一样。这就是三元运算符的第一部分在初始代码中始终为true的原因。