Это название, вероятно, мало что значит, но у меня есть форма, которая генерируется динамически. Я подключаюсь к таблице продуктов, вытаскивает там имя. Затем я создаю форму, которая отображает продукт с флажком и текстовым полем рядом с ним.
<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>'; }