PHP: использование post, когда поля формы Mutliple имеют одинаковые имена и идентификаторы - PullRequest
2 голосов
/ 19 ноября 2010

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

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

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

Приветствия,

Джонси

Ответы [ 5 ]

14 голосов
/ 19 ноября 2010

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

4 голосов
/ 19 ноября 2010

Измените свое имя 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
1 голос
/ 19 ноября 2010

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

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

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

0 голосов
/ 19 ноября 2010

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

$i = 0;
foreach ($products as $product){
 echo '<td><input type="checkbox" name="chk" id="'. $product[$i] .'"></td>';
}
0 голосов
/ 19 ноября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...