PHP - 我还需要检查IF ISSET吗?....或IF($ _GET)是否足够好?

时间:2014-08-21 04:59:25

标签: php get isset

我使用了很多($_GET)语句,想知道是否有必要先检查if (isset($_GET))

我已经阅读了不少帖子,这些帖子表明首先检查IF ISSET是非常重要的(我教授代码的方式),但它们都是从2009年左右开始的。现在我们的程序员已经编码了检查IF ISSET,并说检查isset是否是必要的,只会增加脚本的负载。

任何人都可以对此有所了解吗?

代码的一个例子是:

if ($_GET["option"])  { 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://mycurlurl.com/blah);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
....

或其他例子是

if($_GET['type']=='reports') header('location: http://myurl.com/reports');

我想知道它是否应该全部使用ISSET并且看起来像

if (isset($_GET["type"]) && ($_GET["type"] == "reports")) { header('location: http://myurl.com/reports'); }

任何想法都会非常感激。当我测试网站或查看日志时,他的代码没有出错,但我不确定我们的用户是否会发现致命错误,我们无法看到。

5 个答案:

答案 0 :(得分:1)

如果您没有为$ _GET添加isset(),那么您会收到Undefined Index PHP错误,因此最好检查是否存在{{1}在任何地方使用它之前,即使在if条件下也是如此。我强烈建议你把它作为一个好的编程实践。 因此,使用$_GET检查的代码部分是一种很好的做法

isset

答案 1 :(得分:0)

如果我们在php手册中查看$ _GET的解释,它会说“通过URL参数传递给当前脚本的关联变量数组”。 “关联数组”这个词清楚地告诉我们这个错误是什么。 如果我们访问任何未设置的数组变量,它将发出警告,指出索引未定义。这个论点在我们的案例中是否有效?让我们测试一下。让我们通过检查是否设置了表单变量来重写代码,然后尝试访问该变量:

if (isset($_GET['type']))
{
$var1 = $_GET['type'];
if($var1=="reports")
  header('location: http://myurl.com/reports');
}

答案 2 :(得分:0)

我已经看到很多代码没有使用isset()检查,但我倾向于在我编码时使用它,因为1.)比抱歉更安全,以及2.)如果你有错误在php上启用报告,如果你想获得$ _GET ['某些东西'],它会发出警告,指出索引不存在。

在尝试调用/获取数据之前确保数据存在是一种很好的做法。 IMO。

答案 3 :(得分:0)

在PHP中,使用未设置的变量或数组元素不是错误。您默认只获得一个空值。

如果启用了错误报告,它将发出有关使用未定义变量或索引的警告,但代码通常仍会按预期工作。首先检查这个是不错的做法,如果没有别的办法可以减少PHP日志中的混乱。在某些情况下,您需要测试才能获得正确的程序逻辑,但如果您要测试变量是否设置为某个特定值,如问题中的示例所示,则不应该是问题

答案 4 :(得分:0)

isset()或empty()的原因是检查变量是否存在且是否有值。

如果根本没有定义$ _GET ['type'],它将抛出PHP通知。

isset()和empty()都抑制了这一点。

同样,如果($ _GET ['type']){}单独检查是错误的,除非你期望一个布尔值。

如果$ _GET ['type']为空字符串,false或0则不会处理if。

isset() will accept empty string, false and 0.
empty() will accept all of those.

所以你应该看看!empty()因为它会验证变量是否具有某种值。

!empty() will not accept empty string, false, 0 or null.
!isset() will only accept null.