如果每次我尝试检查变量是否有内容并且某个变量尚未使用时,我怎么能阻止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()检查,但我不想在我的所有脚本上使用它。我希望不成为关于变量的限制性。
答案 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
。
因此,最好检查变量不是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