繁体   English   中英

PHP Isset问题

[英]PHP Isset Issue

我正在使用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会产生以下回显结果,但仍附加where子句,即使(至少对我而言) isset()应该返回false

Select * from users where userID = ''

我希望/预期的第二个echo语句(上面的一个)是

Select * from users

isset()是在此实例中使用的错误检查吗? 如果是这样,我应该在该地方使用什么支票?

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

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

因此,直接检查$_GET值。

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

echo $sql;

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

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

$sql = "SELECT * FROM users";

if ($user != '') {

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

}

echo $sql;

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

另一种方法是使用PHP的empty()函数-假定该变量无论如何都不应该为空。 空不等于NULL

最好使用此检查(如果变量必须等于SOMETHING才能使页面正常工作)(尤其是使用ELSE语句,指示该变量是否为空),而不是使用isset,因为它没有相同的检查。

这是函数bool empty ( mixed $var )

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

  • “”(空字符串)
  • 0(0为整数)
  • 0.0(0为浮点数)
  • “ 0”(0作为字符串)
  • 空值
  • array()(一个空数组)
  • $ var; (已声明变量,但没有值)

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

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

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

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的错误。

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

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

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

echo $sql;

您可以简单地使用此

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM