根据用户输入用户名或电子邮件地址,我有一条效率低下的代码用于重置密码。 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显示为空。
答案 0 :(得分:0)
正如您在评论中指出的那样,您必须检查username
数组的$_POST
变量是否为空。
除了在测试变量为空白之前和之前,检查变量是否在第一位也是一个好主意。
$identifier =
(isset($_POST["username"]) && !empty($_POST["username"])) ? "username":"email";
当您发送表单时,所有文本输入字段都会通过,即使它们是空白的。空白与空白不一样。这就是三元运算符的第一部分在初始代码中始终为true
的原因。