Передача Smarty вводных из формы методом POST с помощью JSON
Доброго времени суток всем!
http_referer: index.php?p=users, html отображение с помощью Smarty 5.x, передаются на сервер методом POST.
<form name="update" action="update.php?opt=gender" method="post" target="_parent">
<table border="1" cellspacing="0">
{foreach from=$users key=k item=i} <-- Массив из пяти пользователей
<tr>
<td>{$i.id}</td> <-- Id пользователя из массива
<td>
<select name="gender">
<option>Select gender</option>
<option value="man">Man</option>
<option value="woman">Woman</option>
<option value="donkey">Donkey</option>
<option value="monkey">Monkey</option>
</select>
<input type="hidden" name="family" value="{$i.family}">
<input type="hidden" name="age" value="{$i.age}">
</td>
<td>{$i.name}</td>
</tr>
{/foreach}
</table>
<input type="submit" name="update" title="Обновить" value="Обновить">
</form>
Каким образом передать вводные как массив JSON для обработки на сервере?(с обработкой проблем нет, лишь бы дошло как массив) в доках по smarty xxx|@json_encode настолько скудно описано, что я честно не понял, поиск по стакам или гуглу (( ни одного примера не нашел. Помогите чайнику )).
Ответы (1 шт):
Мне кажется у вас проблема несколько не в том, что вы ищите.
вы выводите поля в инпуты с одним именем, в итоге и при отправке запроса, скорее всего получаете только последний элемент, наверное. Вам бы данные формы складывать в виде массива надо, и json_encode
тут вроде как не при делах вообще.
Код генерации формы условно должен быть примерно такой (обращаем внимание на name
у инпутов)
{foreach $users as $u}
<tr>
<input type="hidden" name="users[{$u@index}][id]" value="{u.id}"/>
<input type="text" name="users[{$u@index}][name]" value="{$u.name|escape}"/>
</tr>
{/foreach}
То есть формируете массив с именем users
и его получите в $_POST['users']
данных при отправке.
зы: есть вариант записи без {$u@index}
но я что-то не помню как. Надо на каждой итерации писать какую-то доп.строку для разделения элементов массива.