【问题标题】:Avoid using isset in PHP when accessing $_POST, $_GET, and other variables?访问 $_POST、$_GET 和其他变量时避免在 PHP 中使用 isset?
【发布时间】:2011-04-23 12:52:04
【问题描述】:

如何防止 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() 检查,但我不想在我的所有脚本中使用它。我希望它对变量限制

【问题讨论】:

  • 这不是错误。这是一个 E_NOTICE。许多货运公司没有意识到这一点,但这是一个调试信息。 error_reporting(E_ALL) 返回许多这样的冗余调试通知,所以关闭它。当您调试代码时,偶尔启用它。不要用 isset 混淆它,因为这可能会在您需要时妨碍跟踪。顺便说一句,if ($_POST['info']) 就足够了。 php.net/manual/en/…

标签: php variables configuration undefined


【解决方案1】:

如果你想设置 $_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

【讨论】:

    【解决方案2】:

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

    所以最好检查变量不是empty

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

    【讨论】:

    • 取决于输入类型。某些类型,例如复选框,如果未选中或以其他方式与之交互以赋予它们一个值,则不会在提交后发送。
    【解决方案3】:

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

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

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

    希望对我有所帮助;/

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

    /sbin/service httpd restart
    

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

          很可能不是错误,而是警告。如果需要,您可以将 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>
          

          【讨论】:

          • 或者实际检查您是否正在处理 POST:if ($_SERVER['REQUEST_METHOD'] == 'POST') { ... }
          猜你喜欢
          • 2012-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-26
          相关资源
          最近更新 更多