Передача 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 шт):

Автор решения: teran

Мне кажется у вас проблема несколько не в том, что вы ищите.
вы выводите поля в инпуты с одним именем, в итоге и при отправке запроса, скорее всего получаете только последний элемент, наверное. Вам бы данные формы складывать в виде массива надо, и 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} но я что-то не помню как. Надо на каждой итерации писать какую-то доп.строку для разделения элементов массива.

→ Ссылка