【问题标题】:PHP $_POST with variable namePHP $_POST 带有变量名
【发布时间】:2018-03-15 12:15:23
【问题描述】:

我在活动网站上有带有变量名称的下拉字段,所以我不确定如何使用 $_POST 捕获数据

一个例子是

tkt-slctr-qty-346[]
tkt-slctr-qty-358[]

有没有办法通过使用通配符来捕获 $_POST 的数据?

编辑:这里是html

    <select name="tkt-slctr-qty-346[]" id="ticket-selector-tbl-qty-slct-346-1" class="ticket-selector-tbl-qty-slct">
   <option value="0">&nbsp;0&nbsp;</option>
   <option value="1">&nbsp;1&nbsp;</option>
   <option value="2">&nbsp;2&nbsp;</option>
   <option value="3">&nbsp;3&nbsp;</option>
   <option value="4">&nbsp;4&nbsp;</option>
   <option value="5">&nbsp;5&nbsp;</option>
   <option value="6">&nbsp;6&nbsp;</option>
   <option value="7">&nbsp;7&nbsp;</option>
   <option value="8">&nbsp;8&nbsp;</option>
   <option value="9">&nbsp;9&nbsp;</option>
   <option value="10">&nbsp;10&nbsp;</option>
</select>

【问题讨论】:

  • 什么意思?名称是$_POST 数组的键...
  • 我想捕捉下拉菜单中选择的任何内容
  • 它们是数组吗?我是根据括号来假设的?
  • 客户端作为 POST 值发送的任何内容都会填充到服务器端的 $_POST 数组中。在服务器端,您无需为此做任何事情。
  • 我已经添加了 html。希望这是有道理的。

标签: php variables post wildcard


【解决方案1】:

而不是将 id 作为“名称”的一部分(将用作 $_POST 数组中的键,PHP 支持直接使用数组表示法:

name="tkt-slctr-qty[346]"
name="tkt-slctr-qty[358]"

然后您可以在一个键下迭代这些:

if (!empty($_POST['tkt-slctr-qty']) && is_array($_POST['tkt-slctr-qty'])) {
    foreach ($_POST['tkt-slctr-qty'] as $id => $qty) {
        // handle each id/qty value
    }
}

如果您确实对每个 id 也有多个选择框,请将 [] 附加到每个选择框,并创建一个内部循环:

name="tkt-slctr-qty[346][]"

...

name="tkt-slctr-qty[358][]"

然后在内循环中处理:

if (!empty($_POST['tkt-slctr-qty']) && is_array($_POST['tkt-slctr-qty'])) {
    foreach ($_POST['tkt-slctr-qty'] as $id => $qtys) {
        if (is_array($qtys)) {
            foreach ($qtys as $qty) {
                // handle each qty if there are multiple fields.
            }
        }
    }
}

【讨论】:

  • 您将 OP 密钥从 tkt-slctr-qty-346[] 更改为 tkt-slctr-qty[346],这不起作用。
  • @DanFromGermany 这就是重点——如果他改变了键,他会自动得到一个正确的数组。
  • 数组已经正确。您假设只有 1 个选择字段,但显然有多个选择。
  • 您是对的,将单个值字段标记为名称中带有[] 的数组是没有意义的。应该先修复 HTML。
  • 不,这不是假设。首先,显然有多个选择字段 - 但不一定针对每个 id - 如果是这种情况,请附加 [] 以获取每个 id 的数组。关键是您应该将前缀检查的可变部分移动到正确的数组键,而不是进行任何魔术前缀匹配。 PHP 有办法正确地做到这一点并准确地表达发布者想要做什么(即使每个 id 有多个选择框)。
【解决方案2】:

您可以将变量发布到数组中,然后在过滤时对其进行迭代。

foreach($_POST as $key => $value) {
  $pos = strpos($key , "tkt-slctr-qty-");
  if ($pos === 0){
    // do something with $value
  }
}

【讨论】:

    【解决方案3】:

    当您提交这些数组时,PHP 将以这种方式接收它们:

    $_POST['tkt-slctr-qty-358'][0]
    $_POST['tkt-slctr-qty-358'][1]
    // ...
    

    如果您的意思是动态捕获键末尾的数字,它的工作原理如下:

    foreach ($_POST as $k => $v) {
        if (strpos($k, 'tkt-slctr-qty-') === 0) {
            foreach ($v as $innerValue) {
                echo 'Key: ' . $k . ' has value: ' . $innerValue . '<br>';
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      您必须遍历保存集合的 $_POST 数组。遵循以下模式

      $counter = count($_POST['tkt-slctr-qty-346']);
          $image = '';
              for($i=0; $i< $counter; $i++)
              {
              $data = $_POST['tkt-slctr-qty-346'][$i];
              //Then Write the code that processes the data here
              }   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-02
        • 2012-03-30
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-30
        相关资源
        最近更新 更多