1

isset()用来检查变量是否有值。我的问题是,即使变量没有值(参数未在 url 中传递),仍然会修改 sql 字符串以附加 where 子句。

例如 - 如果这是传递的 URL

http://internal/test/trbm?userID=3213

这是我的 php 片段

$user = urldecode($_GET['userID']);

$sql = "Select * from users"
if (isset($user)) {
    $sql .= " WHERE userID = '$user'";
}

echo $sql;

回声结果是:

Select * from users where userID = '3213'

但是,此 URLhttp://internal/test/trbm产生以下回显结果,仍然附加 where 子句,即使(至少对我而言)isset()应该返回 false

Select * from users where userID = ''

我想要/期望的第二个回声语句(右上方的那个)是

Select * from users

在这种情况下是否isset()使用了不正确的检查?如果是这样,我应该在它的地方使用什么支票?

4

5 回答 5

2

....以及正确的方法,使用 Joomla 的JInput类:

$userId = JFactory::getApplication()->input->get('userID', '', 'STRING');
$sql    = 'Select * from users';

if (isset($userId)
{
    $sql .= ' WHERE userID = ' . urldecode($userId);
}

echo $sql;
于 2017-07-15T23:36:48.180 回答
2

$user将被设置,因为你在这一行设置了它

$user = urldecode($_GET['userID']);

因此,请直接检查该$_GET值。

$sql = "Select * from users"
if (isset($_GET['userID']) {
    $user = urldecode($_GET['userID']);
    $sql .= " WHERE userID = '$user'";
}

echo $sql;
于 2017-07-12T13:39:23.220 回答
1

你的问题是你的$user变量被设置了,无论如何,因为你只是在上面设置了它。不管它是否为空,它都是设置的。您只需要检查是否$_GET在 IF 语句中设置了$user变量,然后在该 IF 语句中设置变量。

另一种方法是使用 PHP 的empty()函数——假设变量不应该为空。空不等于 NULL

如果变量必须等于 SOMETHING以使页面工作,最好使用此检查(特别是使用带有指示变量是否为空的 ELSE 语句),而不是使用 isset,因为它没有相同的检查。

这是功能bool empty ( mixed $var )

这是一个被认为是空的东西的列表:

  • ""(一个空字符串)
  • 0(0 为整数)
  • 0.0(0 作为浮点数)
  • "0" (0 作为字符串)
  • 无效的
  • 错误的
  • array() (一个空数组)
  • $var; (声明的变量,但没有值)

您可以在php.net了解更多信息

empty在将变量设置为页面变量之前,您需要检查变量是否存在。

在这种情况下,我建议检查它是否为空,如果不是,则设置变量。

if(!empty($_GET['userID'])) {
    $user = $_GET['userID'];
    $sql .= " WHERE userID = '$user'";
}

如果您愿意,您也可以在那里放置一条else语句来重定向/显示没有用户 ID 的错误。


你当然可以对 isset 做同样的事情,但它检查的东西更少。

您还可以反转 if 语句的方向(如,使用empty您想要 NOT 运算符!但对于 isset 您不想要那个。),因为您要确保它被设置为设置变量。

if(isset($_GET['userID'])) {
    $user = $_GET['userID'];
    $sql .= " WHERE userID = '$user'";
}

如果您愿意,您也可以在那里放置一条else语句来重定向/显示没有用户 ID 的错误。

于 2017-07-12T13:43:39.880 回答
1

运行 isset() 检查 $_GET 变量是否已提交,如果已提交,请将 $user 变量设置为它,否则将其留空

$user = '';
if (isset($_GET['userID'])) {
    $user = urldecode($_GET['userID']);
}

$sql = "SELECT * FROM users";

if ($user != '') {

    $sql .= " WHERE userID = '$user'";

}

echo $sql;
于 2017-07-12T13:40:34.517 回答
0

你可以简单地使用这个

if($_GET['userID']) {
    $user = $_GET['userID'];
    $sql .= " WHERE userID = '$user'";
}
于 2017-07-25T05:55:35.643 回答