我创建了自己的这个帐户注册激活脚本,我已经一次又一次地查看它以查找错误,我没有看到特定的错误......
域名将是这样的:
http://domain.com/include/register.php?key=true&p=AfRWDCOWF0BO6KSb6UmNMf7d333gaBOB
来自电子邮件,当用户点击它时,它们会被重定向到此脚本:
if($_GET['key'] == true)
{
$key = $_GET['p'];
$sql = "SELECT * FROM users
WHERE user_key = '" . $key . "'";
$result = mysql_query($sql) or die(mysql_error());
if(mysql_affected_rows($result) > 0)
{
$sql = "UPDATE users
SET user_key = '', user_active = '1'
WHERE user_key = '" . $key . "'";
$result = mysql_query(sql) or die(mysql_error());
if($result)
{
$_SESSION['PROCESS'] = $lang['Account_activated'];
header("Location: ../index.php");
}
else
{
$_SESSION['ERROR'] = $lang['Key_error'];
header("Location: ../index.php");
}
}
else
{
$_SESSION['ERROR'] = $lang['Invalid_key'];
header("Location: ../index.php");
}
}
它甚至根本不起作用,我用带有该键的用户查看数据库,它匹配,但它一直出现错误,这非常令我烦恼。数据库是正确的,表和列是正确的,数据库没有错,这是脚本无效。
帮助我,伙计们。
谢谢:)
答案 0 :(得分:3)
$_GET['key'] == true
更改为$_GET['key'] == "true"
if
成功mysql_connect(...)
或mysql_pconnect(...)
?mysql_affected_rows($result);
更改为mysql_num_rows($result);
。受影响的您可以使用DELETE
或UPDATE
SQL语句。mysql_result(...)
,mysql_free_result($result);
之前添加,以释放分配给之前结果的内存。if($result)
更改为if(mysql_affected_rows($result));
。你可以在这里做到。header(...);
函数调用后添加return 0;
或exit(0);
取决于您的完整代码逻辑。$key
变量,以使您的代码在 SQL注入攻击上更加安全{get} $key = $_GET['p'];
到{{ 1}} $key = mysql_real_escape_string($_GET['p']);
功能中的位置失败。在header()
网址中,地址应如下所示:http://www.example.com/somewhere/index.php header()
变量是否存在!!如果这不存在且存在$_GET['p']
,则会找到所有已激活的用户。然后我认为如果你有user_activated标记,那么将user_key设置为''是必须的。答案 1 :(得分:0)
你不应该使用:
if(mysql_affected_rows($result) > 0)
你应该使用mysql_num_rows()
答案 2 :(得分:-1)
你的问题是:
$result = mysql_query($sql) or die(mysql_error());
“或”使你的语句boolean
所以$ result得到True
而不是mysql_query()返回的值
echo 'Hello' or die('bye'); // outputs nothing, because result is True not 'Hello'
3 or die() == True; // true
3 or die() != 3; // true
OR 与 || 相同,是逻辑声明的操作符。
这将有效:
$result = mysql_query($sql);
if(!$result) die(mysql_error());
几个小时前犯了同样的错误:link
可以使用OR的案例:
defined('FOO') or
define('FOO', 'BAR');
mysql_connect(...) or die(...);
mysql_select_db( .... ) or die(...);
mysql_query('UPDATE ...') or die(...);
if(FOO or BAR) { ... }