PHP帐户注册确认电子邮件代码未确认

PHP帐户注册确认电子邮件代码未确认,php,mysql,variables,if-statement,get,Php,Mysql,Variables,If Statement,Get,我正在尝试完成一个用户在我的网站上的注册过程。带有激活链接的确认电子邮件将正确发送。然而,当我点击激活链接时,我只能得到结果“错误,看起来你试图做一些不同寻常的事情。请与我们联系”,这应该是在人们试图搞乱结果时保留的。 我编写的SQL查询旨在将已注册信息但尚未激活帐户的人员从“tempusers”表转移到“users”表。一旦他们点击电子邮件中的链接,就会发生这种情况。 我看不出我的逻辑哪里是错误的,为什么当“tempusers”表中有注册用户时,该记录没有被提取。这是我的activation.

我正在尝试完成一个用户在我的网站上的注册过程。带有激活链接的确认电子邮件将正确发送。然而,当我点击激活链接时,我只能得到结果“错误,看起来你试图做一些不同寻常的事情。请与我们联系”,这应该是在人们试图搞乱结果时保留的。 我编写的SQL查询旨在将已注册信息但尚未激活帐户的人员从“tempusers”表转移到“users”表。一旦他们点击电子邮件中的链接,就会发生这种情况。 我看不出我的逻辑哪里是错误的,为什么当“tempusers”表中有注册用户时,该记录没有被提取。这是我的activation.php代码。非常感谢您的帮助

<?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中设置了emailkey,并且您很可能100%确定get中有key变量,它将有32个字符,那么只剩下preg_match了,其中一定是错误。电子邮件也可能是url编码的。请确保当您在$中有期望值时,通过打印它来获取['email']。如果不是您所期望的,您可能希望对其进行清理…

不要使用mysql查询,请使用PDO或mysqli_*