PHP帐户注册确认电子邮件代码未确认
我正在尝试完成一个用户在我的网站上的注册过程。带有激活链接的确认电子邮件将正确发送。然而,当我点击激活链接时,我只能得到结果“错误,看起来你试图做一些不同寻常的事情。请与我们联系”,这应该是在人们试图搞乱结果时保留的。 我编写的SQL查询旨在将已注册信息但尚未激活帐户的人员从“tempusers”表转移到“users”表。一旦他们点击电子邮件中的链接,就会发生这种情况。 我看不出我的逻辑哪里是错误的,为什么当“tempusers”表中有注册用户时,该记录没有被提取。这是我的activation.php代码。非常感谢您的帮助PHP帐户注册确认电子邮件代码未确认,php,mysql,variables,if-statement,get,Php,Mysql,Variables,If Statement,Get,我正在尝试完成一个用户在我的网站上的注册过程。带有激活链接的确认电子邮件将正确发送。然而,当我点击激活链接时,我只能得到结果“错误,看起来你试图做一些不同寻常的事情。请与我们联系”,这应该是在人们试图搞乱结果时保留的。 我编写的SQL查询旨在将已注册信息但尚未激活帐户的人员从“tempusers”表转移到“users”表。一旦他们点击电子邮件中的链接,就会发生这种情况。 我看不出我的逻辑哪里是错误的,为什么当“tempusers”表中有注册用户时,该记录没有被提取。这是我的activation.
<?php
include("includes/connect.php");
if(isset($_GET['email']) && preg_match(
'/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/', $_GET['email'])){
$email = mysql_real_escape_string($_GET['email']);
}
if(isset($_GET['key']) && (strlen($_GET['key'])==32)){
$key = mysql_real_escape_string($_GET['key']);
}
if(isset($email) && isset($key)){
$result = mysql_query(" SELECT * FROM tempusers WHERE (email='$email' AND activation='$key') LIMIT 1 ")
or die(mysql_error());
while($row = mysql_fetch_array($result)){
$user_id = mysql_real_escape_string($row['user_id']);
$username = mysql_real_escape_string($row['username']);
$email = mysql_real_escape_string($row['email']);
$password = mysql_real_escape_string($row['password']);
}
$result1 = mysql_query(" INSERT INTO users (user_id,username,email,password,role,credits)
VALUES ('','$username','$email','$password','user',0)") or die(mysql_error());
$result2 = mysql_query(" DELETE FROM tempusers WHERE user_id='$user_id' ") or die(mysql_error());
if(!$result1){
echo "Oops your account could not be activated, please contact the system admin team!";
}else{
header( 'Location:prompt.php?x=0' );
}
}else{
echo "Error, looks like you were trying to do something out of the ordinary. Please contact us";
}
?>
看起来以下4项之一为假
(isset($_GET['email']) or
preg_match('/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/', $_GET['email']) or
(isset($_GET['key']) or
(strlen($_GET['key'])==32))
假设您在get的url中设置了email和key,并且您很可能100%确定get中有key变量,它将有32个字符,那么只剩下preg_match了,其中一定是错误。电子邮件也可能是url编码的。请确保当您在$中有期望值时,通过打印它来获取['email']。如果不是您所期望的,您可能希望对其进行清理…不要使用mysql查询,请使用PDO或mysqli_*