在访问$\u POST、$\u GET和其他变量时,避免在PHP中使用isset?
如何防止PHP在每次尝试检查某个变量是否有内容且该变量尚未使用时返回未定义变量错误?在我以前的设置中,我可以检查$_POST['email'],即使我还没有在其中放入任何内容。它只返回一个空白或空的结果。这就是我希望我的PHP设置工作的方式,但就我个人而言,我似乎不知道如何配置它( 例如:在访问$\u POST、$\u GET和其他变量时,避免在PHP中使用isset?,php,variables,configuration,undefined,Php,Variables,Configuration,Undefined,如何防止PHP在每次尝试检查某个变量是否有内容且该变量尚未使用时返回未定义变量错误?在我以前的设置中,我可以检查$_POST['email'],即使我还没有在其中放入任何内容。它只返回一个空白或空的结果。这就是我希望我的PHP设置工作的方式,但就我个人而言,我似乎不知道如何配置它( 例如: <?php if ($_POST['info'] != '') { // do some stuff } ?> <form method="post"> <input typ
<?php
if ($_POST['info'] != '') {
// do some stuff
}
?>
<form method="post">
<input type="text" name="info" />
<input type="submit" />
</form>
当你在一个PHP页面中使用上面的脚本并在我当前的设置中运行它时,它返回一个未定义的变量错误。在我以前的设置中,该脚本工作得很好。有人能分享一些关于我这个问题的信息吗?如果你需要更多详细信息,请说出来,我将尝试在这篇文章中添加更多详细信息
我了解isset()检查,但我不想在我的所有脚本上使用它。我希望它不是关于变量的限制性的。很可能这不是一个错误,而是一个警告。如果需要,可以将PHP设置为不显示错误/警告。只需在代码开头添加以下内容:
ini_set('display_errors', 0);
if (isset($_POST['info']))
$info = $_POST['info'];
... etc....
尽管如此,我还是建议您不要偷懒,不要让代码显示任何错误、警告、通知,这比“抱歉”更安全
做你想做的事情的首选方法是
<?php
if (isset($_POST['info'])) {
// do some stuff
}
?>
<form method="post">
<input type="text" name="info" />
<input type="submit" />
</form>
您可以使用该函数,如果变量未设置或为空(即零长度字符串、0、NULL、FALSE等),该函数将返回true:
这与您现在所做的测试几乎相同,只是当变量未设置时,它也会返回false(不运行块),而不会出现警告。我有时会执行以下操作来进行比较,以避免出现有关未设置变量的警告:
if( @$_POST['variable'] == 'value' )
{
...
}
尽管PHP仍然会调用自定义错误处理程序,所以我可能需要重新考虑这一策略。您是否使用自己的服务器?如果是这样,您可以通过PHP.INI.在上面更改错误报告 “error_reporting=E_ALL;”(可能不是E_ALL)将有一个小文档解释您可以显示哪种类型的错误 如果您使用的是一家网络托管公司的共享服务器,我相信有些公司可能会在您的网络托管帐户CP下提供快速PHP管理 我希望我能帮忙/ ps-如果您有自己的服务器,则必须重新启动Apache。我不确定在Ubto中是如何完成的(如果您使用的是Ubto),但对于CentOS,它是:
/sbin/service httpd restart
只要您发送
表单
,变量就会一直设置
因此最好检查变量的值是否为空
if(!empty($\u POST['var'])
如果要设置$\u POST vars,那么大量这些语句确实会使代码变得混乱:
ini_set('display_errors', 0);
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
相关:这不是一个错误。这是一个E_通知。许多货运公司没有意识到这一点,但这是一条调试消息。
error_reporting(E_ALL)
返回许多此类冗余的调试通知,因此请将其关闭。在调试代码时偶尔启用它。不要将其与isset混淆,因为这可能会在需要时妨碍跟踪。顺便说一句,if($\u POST['info'))
就足够了。或者实际检查您是否正在处理POST:if($\u SERVER['REQUEST\u METHOD']='POST')){…}
取决于输入类型。某些类型,如复选框,如果未选中,则不会在提交后发送,或者以其他方式与它们交互以给它们一个值。