首页 文章

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

提问于
浏览
3

每次我尝试检查一个变量是否有内容并且某个变量还没有输入任何内容时,我怎么能阻止PHP返回 Undefined variable 错误 . 它只返回一个空白或空结果 . 那似乎找不到如何配置它 . :(

例:

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

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

know 关于 isset() 检查,但我不想在我的所有脚本上使用它 . 我希望 not 是关于变量的 restrictive .

6 回答

  • 4

    最有可能的不是错误,而是警告 . 如果需要,可以将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>
    
  • 0

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

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

    这与您现在正在进行的测试几乎相同,只是当未设置变量时,它也会返回false(不运行块),而不会发出警告 .

  • 0

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

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

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

  • 0

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

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

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

    我希望我帮忙; /

    ps-如果你有自己的服务器,你将不得不重启Apache . 我不确定它是如何在Ubunto中完成的(如果这是你正在使用的)但是对于CentOS来说:

    /sbin/service httpd restart
    
  • 3

    只要您发送 form ,变量将始终为SET .

    所以最好检查变量不是 empty .

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

  • 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
    

相关问题