我让用户在注册我们的网站时通过电子邮件点击激活链接。该链接看起来像http://www.site.com/?u=123&a=xyz
。
当用户点击链接时,我的代码会解析$_GET["u"]
和$_GET["a"]
参数。代码确保没有恶意,什么不是。此代码还会检查是否设置并定义了$_GET["u"]
。如果它为空,则会发出错误消息。
if(isset($_GET["u"]) && ($_GET["u"] !== "") && is_numeric($_GET["u"]) {
// proceed to function
$u = clean_it($_GET["u"]);
} else {
// show error screen
}
如果这些参数不是空的,则会将它们发送到函数以检查数据库的值。
我在此功能中的检查是:
if($u === NULL) {
return FALSE;
} else {
// check $u against the db
$sql = "SELECT * FROM users WHERE user_id=$u LIMIT 1;";
}
因此,当请求进入时,它会立即进入该函数并进入sql调用。根据这些请求,我的查询看起来像是:
SELECT * FROM users WHERE user_id=NULL LIMIT 1;
为什么会这样?有任何想法吗? $_GET["u"]
肯定是被设置的(我可以在referer中看到它)。这个问题并不总是发生;这很随意。每天约有140个新帐户中的2-3个。
答案 0 :(得分:0)
如果只是有时发生,我个人会将$u === NULL
替换为empty($u)
。我想你只是想检查一下你是否有价值。
if(!empty($_GET['u']) && is_numeric($_GET["u"]) {
// proceed to function
$u = clean_it($_GET["u"]);
} else {
// show error screen
}
if(empty($u)) {
return FALSE;
} else {
// check $u against the db
$sql = "SELECT * FROM users WHERE user_id=$u LIMIT 1;";
}
当然,因为你只提供了代码片段,所以你的变量可能会在我们看不到的其他地方被删除。
在旁注 - 建立您的查询,这是一个坏主意。研究PHP的PDO。