PHP: использование сообщения, когда поля mutliple form имеют одинаковое имя и идентификатор

Это название, вероятно, мало что значит, но у меня есть форма, которая генерируется динамически. Я подключаюсь к таблице продуктов, вытаскивает там имя. Затем я создаю форму, которая отображает продукт с флажком и текстовым полем рядом с ним.

<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 из формы, он сохраняет только поля для последней записи.

Есть ли способ передать все эти данные обратно в действие?

Ура,

Джоунси

Используйте name="chk[]" , тогда PHP создаст для вас массив.

Измените свое имя 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 

Да, вы можете установить скобки в конце значения имени. Например:

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

Затем вы получите массив в результате $_POST['chk'] . Кроме того, идентификаторы всегда должны быть уникальными. Вы можете давать одинаковые имена, но вы всегда должны использовать разные идентификаторы.

Все ваши поля имеют одно и то же имя, когда это происходит в любой форме, вы видите только последнее значение, потому что оно перезаписано другими полями.

Вместо <input type="checkbox" name="chk" id="124123"> сделать что-то вроде <input type="checkbox" name="chk[124123]" value='1'>

В коде вы получите $ _POST ['chk'] как массив значений, только те значения, которые были проверены.

вы можете использовать, как я привел пример ниже. где я взял одну новую переменную $ i = 0; и тогда вы можете использовать этот $ i в цикле foreach для отображения всего продукта один за другим. Я думаю, это может вам помочь.

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