【问题标题】:Is there a PHP function to call all variables from a form?是否有 PHP 函数可以从表单中调用所有变量?
【发布时间】:2010-11-02 21:23:17
【问题描述】:

您好,我正在网站上为客户编写反馈表,但是有超过 100 个输入(所有输入都是唯一的)。我想知道是否可以运行一个循环来获取所有变量,您是否必须像这样调用它们:

$variable = $_REQUEST['variable'];

编辑:

我将按照这里的每个人的建议使用 $_POST - 感谢您的意见!我将手动检查并为我拥有的每个 $_POST 写一行。

【问题讨论】:

  • 不要使用 REQUEST,如果是发布的则使用 POST,如果来自 URL,则使用 GET。严重地。你永远不应该使用 REQUEST。
  • 你这样做具体是为了什么?为什么一个表单甚至有 100 个独特的输入?可能有更好的解决方案。我倾向于单独处理表单字段,因为我需要对每个字段进行不同的完整性检查,但我不知道您要实现什么。

标签: php forms text input variables


【解决方案1】:
foreach($_POST as $key=>$value) {
            ${$key} = $value;
    }

但这和 extract() 做的一样

【讨论】:

    【解决方案2】:

    将数组与您要从 POST 复制的字段一起使用,并将数据存储在数组中。它更容易维护。

    $fields = array("name","email","addr","bla","bla2");
    $form = array();
    foreach($fields as $field){
        $form[$field] = $_POST[$field];
    }
    

    现在您已经获得了 $form 中的所有数据。
    您也可以在创建表单时做类似的事情。 (虽然它更棘手..)

    干杯!

    【讨论】:

      【解决方案3】:

      我无法对 Pim Jager 的帖子添加评论,但这里有一个示例代码:

      foreach($_POST as $key=>$value) {
          echo($key.' > '.$value.'<br />');
      }
      

      【讨论】:

        【解决方案4】:

        我认为你应该从你期望的所有变量的列表开始,然后只循环这些变量。如果你不这样做,黑客可以注入 any 变量名......事实上,你正在重新实现 Register Globals 的旧的、非常糟糕的想法。所以,不要那样做……

        事实上,为什么不将输入保存在一个关联数组中,就像 $_POST 一样?您可能仍想删除那些您没有预料到的值。

        【讨论】:

          【解决方案5】:

          如果您不想拥有数百个唯一命名的变量并希望在客户端显示数据数组,那么您可能想尝试一个方便的表单技巧。

          <form>
            <input name="foo[a]" type="text" />
            <input name="foo[b]" type="text" />
            <input name="bar[]" type="text"  />
            <input name="bar[]" type="text"  />
          

          客户端:

          <?php
             $_POST['foo']['a']; 
             $_POST['foo']['b'];
             $_POST['bar'][0];
             $_POST['bar'][1];
          ?>
          

          【讨论】:

            【解决方案6】:

            您可以遍历 $_PREQUEST 数组中的所有可验证变量:

            foreach($_REQUEST as $key=>$value){
              //doStuff
            }
            

            但是,这将包括所有发送参数,而不仅仅是输入。此外,您不应使用 $_REQUEST 而应使用 $_POST 或 $_GET

            【讨论】:

              【解决方案7】:

              $_GET$_POST 数组变量分别包含通过 URL 或 POST 方法传递的每个参数。您应该使用该变量而不是像 register_globals optionextract function 那样提取每个项目。原因见Using Register Globals

              【讨论】:

              • 您可能想澄清一下,寄存器全局变量绝不是个好主意。出于任何的原因。 认为这是个好主意的人最终会打着网站的幌子编写安全漏洞。
              【解决方案8】:
              echo "<pre>";
              print_r($_POST); // or $_GET
              echo "</pre>";
              

              如果您正在处理可能不知道名称但需要值的项目,那么您正在处理的问题比您想象的要大得多。

              但上面的 sn-p 应该会在您提交表单时显示所有变量集及其值

              【讨论】:

              • 了解 OP 很有用,但不会帮助您实际使用它们。
              【解决方案9】:

              您可以编写简单的代码以通过算法从已发布的表单中获取所有输入,但这是一项危险的业务,很容易被利用。

              【讨论】:

                【解决方案10】:

                正如我上面的评论,不要使用 REQUEST,使用 POST。我可能会为每个人写一行,以便我知道发生了什么。您不希望人们发布仍然会被解析的额外变量。

                【讨论】:

                  猜你喜欢
                  • 2012-09-11
                  • 1970-01-01
                  • 2014-12-16
                  • 1970-01-01
                  • 2010-09-08
                  • 2014-07-26
                  • 2017-09-10
                  • 1970-01-01
                  • 2021-12-06
                  相关资源
                  最近更新 更多