我正在使用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()
是否在此实例中使用了错误的检查?如果是这样,我应该使用哪种支票?
答案 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'";
}