使用来自激活电子邮件的数据。 $ email& $键。
$ result1 mysql_query -
结果是只有email
,role
,credits
被插入到表格users
中。未插入数据项username
,password
。
$ result2 mysql_query -
不会从表tempusers
如果我回显来自while循环的数据,则返回正确的数据。
要做一些简单但我无法看到它。感谢。
CODE:
include 'core/init.php'; /* database connection*/
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' ") 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` (`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 administrator!";
} else {
header('Location: prompt.php?x=0');
}
} else {
echo "Error. Please contact the system administrator!";
}
?>
答案 0 :(得分:0)
此$_get
in => mysql_real_escape_string($_get['key'])
是小写字母。
$_GET
是superglobal,必须设置为大写字母,例如this => $_GET
旁注: 我注意到您在key
等中使用了$_GET['key']
这个词。
如果您的其他脚本恰好使用此单词作为列引用,则需要在反引号中设置它,因为key
是MySQL reserved word。 我只是在这里思考。
将错误报告添加到文件顶部,这将有助于生产测试。
error_reporting(E_ALL);
ini_set('display_errors', 1);
另外,我建议您使用mysqli_
functions with prepared statements或PDO prepared statements。
答案 1 :(得分:0)
您确定查询会执行吗?你还确定查询至少有1个结果吗? $email
已设置,但要设置您的查询需要至少有1个结果的用户名和密码。
我也注意到$_get['key']
但我不确定是否需要将其更改为$_GET['key']
。