我让我们的用户在注册我们的网站时通过电子邮件单击激活链接。链接看起来像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"]
肯定是设置的(我可以在引用中看到它)。这个问题并不总是发生;这很随机。每天大约 140 个新帐户中可能有 2-3 个。