访问$ _POST,$ _GET和其他变量时,避免在PHP中使用isset?

时间:2010-10-10 18:54:58

标签: php variables configuration undefined

如果每次我尝试检查变量是否有内容并且某个变量尚未使用时,我怎么能阻止PHP返回未定义变量错误?在我以前的设置中,我可以检查$ _POST ['email'],即使我还没有放任何东西。它只返回一个空白或空结果。这就是我希望我的PHP设置工作的方式,但对于我的生活,我似乎无法找到如何配置它。 :(

示例:

<?php
if ($_POST['info'] != '') {
  // do some stuff
}
?>
<form method="post">
<input type="text" name="info" />
<input type="submit" />
</form>

当您在单个PHP页面中使用上述脚本并在我当前的设置上运行它时,它会返回未定义变量错误。在我之前的设置中,该脚本就像一个魅力。任何人都可以分享我的这个问题。如果您需要更多详细信息,请这样说,我会尝试在此帖子中添加更多详细信息。

知道关于 isset()检查,但我不想在我的所有脚本上使用它。我希望成为关于变量的限制性

6 个答案:

答案 0 :(得分:4)

您可以使用empty函数,如果变量未设置或为空(即零长度字符串,0,NULL,FALSE等),则返回true:

if(!empty($_POST['variable'])){
    /* ... */
}

这与你现在正在进行的测试几乎相同,只是当未设置变量时,它也将返回false(不运行块),没有警告。

答案 1 :(得分:3)

最有可能的不是错误,而是警告。如果需要,可以将PHP设置为不显示错误/警告。只需将其添加到代码的开头:

ini_set('display_errors', 0);

尽管如此,我建议你不要懒惰,并且你的代码不会显示任何错误,警告,任何通知,比抱歉更安全。

做你想做的事情的首选方式是

<?php
if (isset($_POST['info'])) {
  // do some stuff
}
?>
<form method="post">
<input type="text" name="info" />
<input type="submit" />
</form>

答案 2 :(得分:0)

我有时会做以下操作来进行比较并避免关于未设置变量的警告:

if( @$_POST['variable'] == 'value' )
{
     ...
}

虽然PHP仍然会调用自定义错误处理程序,所以我可能需要重新考虑这个策略。

答案 3 :(得分:0)

您使用自己的服务器吗?如果是这样,您可以通过PHP.INI更改error_reporting。在线上

“error_reporting = E_ALL;” (可能不是E_ALL)会有一个小文档说明您可以显示哪种类型的错误。

如果您正在使用来自虚拟主机公司的共享服务器,我相信有些人可能会在您的虚拟主机帐户CP下提供快速的PHP管理。

我希望我帮忙; /

ps-如果您有自己的服务器,则必须重新启动Apache。我不确定它是如何在Ubunto中完成的(如果那是你正在使用的)但是对于CentOS它是:

/sbin/service httpd restart

答案 4 :(得分:0)

只要您发送了form

,变量就会始终为SET

因此,最好检查变量不是empty

if(!empty($_POST['var']))

答案 5 :(得分:0)

如果您想设置$ _POST变量,那么拥有大量这些语句会使您的代码变得混乱:

if (isset($_POST['info']))
  $info = $_POST['info'];
... etc....

这个怎么样?

function setPostVar( &$v ) {
    $trace = debug_backtrace();
    $vLine = file( __FILE__ );
    $fLine = $vLine[ $trace[0]['line'] - 1 ];
    preg_match( "#\\$(\w+)#", $fLine, $match ); 
    eval("\$v = isset(\$_POST[\"$match[1]\"])?\$_POST[\"$match[1]\"]:'';");
}

现在,只要你喜欢命名类似于你的POST变量的变量

ie. $Foo = $_POST['Foo'];

你可以这样做:

setPostVar($Foo); // equivalent to if(isset($_POST['Foo']) $Foo = $_POST['Foo'];
setPostVar($Bar); // ditto
setPostVar($Baz); // ditto