假设我的用户已将他们的电子邮件输入重置密码表单,他们会收到一封电子邮件,其中包含一个链接,该链接会将他们带到上面的页面,并在其链接中显示特殊代码
例如 -
http://mylink.com/resetpassword.php?email=blabla@gmail.com&code=2384753
当我尝试使用$_GET['email']
从链接中获取电子邮件并使用查询进行检查时,它无法正常工作
以下是我的代码的一部分:
$email = $_GET['email'];
$check = mysqli_query($conn, "SELECT * FROM users WHERE email='$email' ");
if(mysqli_num_rows($check) == 1){
mysqli_query($conn, "UPDATE users SET password='$password' ");
}else{
echo "failed 2";
}
但我收到failed 2
错误。而且我很确定它是因为当我点击提交时,链接中的所有额外内容都会消失,而它只是resetpassword.php
当我打开错误报告时,会出现以下内容 -
Notice: Undefined index: email in /var/www/resetpass.php on line 6
有谁知道问题可能是什么?
答案 0 :(得分:0)
您需要对@
符号进行URL编码,然后对其进行解码
echo urlencode('blabla@gmail.com');
//outputs blabla%40gmail.com
您还需要意识到您已将值直接传递给SQL,这使您可以对SQL injection
进行全面开放最后你必须有一个WHERE
声明。在这种情况下,我将假设您已经清理过$email
和$password
(您真的需要考虑password_hash)
mysqli_query($conn, "UPDATE users SET password='$password' WHERE email='$email' ");
答案 1 :(得分:0)
当我建议您这样做时,当resetpassword.php
页面加载时,您检查电子邮件和代码是否有效(通过数据库中的检查),然后将这些值放在表单中的隐藏字段中resetpassword
页面。
当您执行submit
时,由于$_GET
的操作标记仅为form
,因此resetpassword.php
消失了$_GET
该操作代码中的{{1}}个变量。