PHP:当多个表单字段共享同名时使用post& ID

时间:2010-11-19 13:57:43

标签: php forms webforms

这个标题可能并不重要,但我拥有的是动态生成的表单。我挂进一张产品表,拉出那里的名字。然后,我创建一个显示产品的表单,旁边有一个复选框和文本框。

<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数据时,它只保留最后一条记录的字段。

有没有办法将所有这些数据传回给行动?

干杯,

Jonesy

5 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:4)

将您的名称属性更改为具有这样的开始和结束方括号:

name="tags"
name="chk"

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

这将变成如下数组:

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

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

答案 2 :(得分:1)

是的,您可以在名称值的末尾设置括号。 E.g:

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

然后在$_POST['chk']中得到一个数组。 除此之外,ID应始终是唯一的。您可以指定相同的名称,但应始终使用不同的ID。

答案 3 :(得分:0)

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

而不是<input type="checkbox" name="chk" id="124123">执行<input type="checkbox" name="chk[124123]" value='1'>

之类的操作

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

答案 4 :(得分:0)

你可以使用我给出的例子如下。我把一个新的变量$ i = 0;然后你可以使用这个$ i进入foreach循环,逐个显示所有产品.. 我认为这可能对你有所帮助。

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