PHP问题集

时间:2017-07-12 13:35:21

标签: php joomla joomla3.5

我正在使用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'

但是,此URL http://internal/test/trbm会产生以下echo结果,仍会附加where子句,即使(至少对我来说)isset()应该返回false

Select * from users where userID = ''

我期望/预期的第二个回声声明(正确的声明)是

Select * from users

isset()是否在此实例中使用了错误的检查?如果是这样,我应该使用哪种支票?

5 个答案:

答案 0 :(得分:3)

$user将被设置,因为您在此行中设置了

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

因此请直接检查$_GET值。

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

echo $sql;

答案 1 :(得分:1)

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

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

$sql = "SELECT * FROM users";

if ($user != '') {

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

}

echo $sql;

答案 2 :(得分:1)

您的问题是您的$user变量已设置,无论如何,因为您只需将其设置在上面。无论它是否为空,都会被设置。您只需要检查IF语句中是否设置了$_GET变量,并在该IF语句中设置$user变量。

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

不同

如果变量 必须等于SOMETHING 以使页面起作用,那么使用此检查要好得多(特别是对于带有方向的ELSE语句,如果变量IS为空),而不是使用isset,因为它没有相同的检查。

这是函数bool empty ( mixed $var )

这是一个被认为是空的事物清单:

  
      
  • "" (空字符串)
  •   
  • 0(0为整数)
  •   
  • 0.0(0作为浮动)
  •   
  • " 0" (0作为字符串)
  •   
  • NULL
  •   
  • FALSE
  •   
  • array()(空数组)
  •   
  • $变种; (声明的变量,但没有值)
  •   

您可以在php.net

了解详情

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

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

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

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

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

你也可以反转if语句的方向(如同使用empty你想要NOT运算符!,但对于isset,你不需要它。),因为你想确定它IS设置为设置变量。

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

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

答案 3 :(得分:1)

....以及正确的方式,使用Joomla的JInput课程:

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

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

echo $sql;

答案 4 :(得分:0)

您可以使用这个

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