我正在尝试将用户的注册过程完成到我的网站上。带有激活链接的确认电子邮件正确发送。然而,当我点击激活链接时,我只能得到结果“错误,看起来你正在尝试做一些与众不同的事情。请联系我们”,这应该是在人们试图搞砸时保留的结果等 我写的SQL查询旨在转移已注册其信息但尚未将其帐户从“tempusers”表激活到“用户”表的人。一旦他们点击电子邮件中的链接,就会发生这种情况。 我无法看到我的逻辑错误在哪里以及为什么当'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";
}
?>
答案 0 :(得分:0)
看起来以下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))
假设您在网址中设置了电子邮件和密钥,并且很可能您100%确定get中有关键变量且它将包含32个字符,然后只留下 preg_match ,其中必须是错误。电子邮件也可能是网址编码的。通过将其打印出来,确保在$ _GET ['email']中具有预期值时。如果它不符合您的预期,您可能需要对其进行消毒......