【问题标题】:PHP $_POST Loop Multiple fieldsPHP $_POST 循环多个字段
【发布时间】:2013-07-29 19:40:39
【问题描述】:

我正在尝试准备一个循环,它将下面表单字段中的数据存储为一个变量,然后我可以使用它来根据这些数据创建一个新的动态表单。

流程示例:
1. jquery在弹出的iframe中提交隐藏表单(完成)
2. PHP 从 iframe 中的隐藏表单循环 POST 并在当前弹出 iframe 中作为新表单输出。
3. 用户选择他们希望提交到数据库的字段。提交表单。
4.增加数据库入口
5. 从当前 iframe 中删除选定的字段。未选择任何内容。

我被困在代码的循环部分,我需要一个有效的解决方案,让我可以循环 POST 并输出用户可以提交的新表单。

我知道有很多问题要问,但任何帮助都会很棒,我一直把头撞在墙上试图弄清楚如何做到这一点。 :(

谢谢, 史蒂夫

附言。有时会有 10 个字段,有时会有 2 个......这完全取决于创建 iframe 时页面上的内容。但是每个字段的数量总是相同的。就像我在下面的字段示例中一样。

字段示例(全部隐藏)

<input type="hidden" id="data[]" name="data[]" value="SOMETHING HERE">
<input type="hidden" id="data[]" name="data[]" value="SOMETHING BLAH BLAH">
<input type="hidden" id="data[]" name="data[]" value="BLAH BLAH SOMETHING">

<input type="hidden" id="info[]" name="info[]" value="MY INFO HERE">
<input type="hidden" id="info[]" name="info[]" value="RANDOM INFO HERE">
<input type="hidden" id="info[]" name="info[]" value="MORE INFO">

<input type="hidden" id="img[]" name="img[]" value="http://example.com/img2.gif">
<input type="hidden" id="img[]" name="img[]" value="http://example.com/someimage.jpg">
<input type="hidden" id="img[]" name="img[]" value="http://example.com/myimage.png">

<input type="hidden" id="title[]" name="title[]" value="Item title goes here">
<input type="hidden" id="title[]" name="title[]" value="Item title goes here ">
<input type="hidden" id="title[]" name="title[]" value="Item title goes here">

我尝试过的我的 PHP 循环:

 foreach ($_POST['data'] as $data=>$val){
    echo "$data: $val <br />";
   }
 foreach ($_POST['info'] as $info=>$val){
    echo "$info: $val <br />";
   }
 foreach ($_POST['img'] as $img=>$val){
    echo "$img: $val <br />";
   }
 foreach ($_POST['title'] as $title=>$val){
    echo "$title: $val <br />";
   }

示例 PHP 输出

0: €29.16
1: €34.46
2: €34.46
3: €63.62
4: €53.02
5: €10.60
6: €42.42
0: ../img1.gif
1: ../img2.jpg
2: ../img3.jpg
3: ../img4.png
4: ../img5.gif
5: ../img6.jpg
6: ../img7.jpg
    etc...

需要如何以新形式构建输出的示例:

Item 1      Item 2        item 3         item 4  

Title0       title1        title2        title3
info0        info1          info2         info3
img0         img1            img2         img3   
data0        data1           data2        data3
checkbox    checkbox      checkbox      checkbox
                                                 SUBMIT BTN

【问题讨论】:

  • 本质上,你的循环被 var_dump's 美化了。老实说,我没有看到任何构建输出的尝试,更不用说以符合所需输出的方式构建它,也没有指定 生成该输出的原因 不起作用你(描述具体问题)
  • OO 会很好地解决您的问题。如果你想走程序化的道路,你需要一点“hack”。您必须模拟实体...查看 yones safari 的答案以获得简单的解决方案。不过,我宁愿使用一些更复杂的方法......
  • @EliasVanOotegem - var_dump 不提供复选框和提交按钮。
  • @PédeLeão:不,但 OP 发布的代码也没有:echo "$data: $val &lt;br /&gt;"; 实际上与 echo "$data =&gt; $val, &lt;br /&gt;"; 相同,在循环前后添加 echo 'array (', count($_POST['data']), ') {&lt;br/&gt;';,您必须承认:很相似,不是吗?

标签: php


【解决方案1】:

使用此代码:

$items = array();
foreach($_POST['data'] as $key => $val)
{
   $items[] = array(
      'data' =>$_POST['data'] [$key],
      'info' =>$_POST['info'] [$key],
      'img' =>$_POST['img'] [$key],
      'title' =>$_POST['title'] [$key] );
}

【讨论】:

    【解决方案2】:

    这样命名您的输入字段

    <input type="hidden" id="data[]" name="data1" value="SOMETHING HERE">
    <input type="hidden" id="data[]" name="data2" value="SOMETHING BLAH BLAH">
    <input type="hidden" id="data[]" name="data2" value="BLAH BLAH SOMETHING">
    

    像这样浏览它们:

    <?php
    $num = 1;
    $data = array();
    while (true) {
        if (array_key_exists('data'.$num,$_POST)) {
            $data[] = $_POST['data'.$num];
        }
        else {
            break;
        }
    }
    
    print_r($data); //outputs all data values
    

    我希望你的问题我得到了正确的回答;)

    【讨论】:

      【解决方案3】:

      你应该首先做一些业务逻辑来获得你需要的数据布局,然后使用你新格式化的数据来做你正在做的事情,即

      $items = array();
      
      foreach ($_POST['data'] as $data=>$val){
          $items[$data]['data'] = $val;
      }
      foreach ($_POST['info'] as $info=>$val){
          $items[$info]['info'] = $val;
      }
      foreach ($_POST['img'] as $img=>$val){
          $items[$img]['img'] = $val;
      }
      foreach ($_POST['title'] as $title=>$val){
          $items[$title]['title'] = $val;
      }
      
      var_export($items);
      

      只要您只发布这些特定值,您实际上可以将其归结为:

      $items = array();
      foreach($_POST as $part => $ar) {
        if(is_array($ar) {
          foreach($ar as $idx => $val) {
            $items[$idx][$part] = $val;
          }
        } 
      }
      var_export($items);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-01
        • 2015-03-16
        • 2013-11-12
        • 2018-02-01
        • 1970-01-01
        • 2012-09-14
        相关资源
        最近更新 更多