-2

我让我们的用户在注册我们的网站时通过电子邮件单击激活链接。链接看起来像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 个。

4

1 回答 1

0

如果它只是有时发生,就个人而言,我会$u === NULLempty($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。

于 2013-10-09T16:44:35.703 回答