[英]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.