【问题标题】:PHP: using post when mutliple form fields share same name & idPHP:当多个表单字段共享相同的名称和 ID 时使用 post
【发布时间】:2011-05-12 15:46:32
【问题描述】:

这个标题可能意义不大,但我所拥有的是一个动态生成的表单。我钩入一张产品表,从中提取名称。然后我创建了一个表单,显示产品,旁边有一个复选框和文本框。

<form id="twitter-feed" name="twitter-feed" action="<?php echo $this->getUrl('tweet/') ?>index/tweet" method="post">
<table><tr>
<?php

$model = Mage::getModel("optimise_twitterfeed/twitterfeed");

$products = $model->getProducts();

foreach ($products as $product){
    echo '<tr>';
        echo '<td>';
            echo '<label for="'. $product .'">' . $product . '</label>';
            echo '<br /><input type="text" class="hashtag" name="tags" id="tags" value="#enter, #product, #hastag"';
        echo '</td>';
        echo '<td><input type="checkbox" name="chk" id="'. $product .'"></td>';
   echo '</tr>';
}
?>

<tr><td colspan="2"><input type="submit" name="submit" value="tweet"></td></tr>
</table>
</form>

如您所见,每条记录都有复选框和文本字段。当我检查表单中的 $_POST 数据时,它只保留最后一条记录的字段。

有没有办法将所有这些数据传递回操作?

干杯,

琼斯

【问题讨论】:

    标签: php forms webforms


    【解决方案1】:

    使用name="chk[]",然后PHP会为你创建一个数组。

    【讨论】:

      【解决方案2】:

      是的,您可以,在名称值的末尾设置括号。 例如:

      <input type="checkbox" name="chk[]" id="'. $product .'">
      

      然后你会得到一个数组作为$_POST['chk'] 的结果。 除此之外,ID 应该始终是唯一的。您可以使用相同的名称,但应始终使用不同的 ID。

      【讨论】:

        【解决方案3】:

        您的所有字段都具有相同的名称,当这种情况发生在任何表单上时,您最终只会看到最后一个值,因为它已被其他字段覆盖。

        代替&lt;input type="checkbox" name="chk" id="124123"&gt; 做类似&lt;input type="checkbox" name="chk[124123]" value='1'&gt; 的事情

        在您的代码中,您会收到 $_POST['chk'] 作为值数组,只有那些被检查的值。

        【讨论】:

          【解决方案4】:

          更改你的名字 arrtibutes 以使用像这样的左方括号和右方括号:

          name="tags"
          name="chk"
          

          name="tags[]"
          name="chk[]"
          

          这将变成一个数组,如下所示:

          $_POST['tags'][0] = VALUE
          $_POST['tags'][1] = VALUE
          
          $_POST['chk'][0] = VALUE
          $_POST['chk'][1] = VALUE
          

          【讨论】:

            【解决方案5】:

            您可以使用我在下面给出的示例。我在哪里取了一个新变量 $i = 0;然后你可以在 foreach 循环中使用这个 $i 来一一显示所有产品。 我想这可能会对你有所帮助。

            $i = 0;
            foreach ($products as $product){
             echo '<td><input type="checkbox" name="chk" id="'. $product[$i] .'"></td>';
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-05-09
              • 2015-12-28
              • 2017-03-03
              • 2018-09-08
              • 1970-01-01
              • 2016-09-28
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多