Как структурировать элементы формы HTML, чтобы их можно было легко перевести в объект PHP? - PullRequest
2 голосов
/ 27 мая 2009

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

Например, у меня есть следующая таблица элементов: (предположим, что она внутри формы)

<table>
  <tr id='payment0'>
    <td><input type='text' name='paymentType0'></td>
    <td><input type='text' name='paymentAmount0'></td>
    <td><input type='text' name='paymentAccount0'></td>
  </tr>
  <tr id='payment1'>
    <td><input type='text' name='paymentType1'></td>
    <td><input type='text' name='paymentAmount1'></td>
    <td><input type='text' name='paymentAccount1'></td>
  </tr>
</table>

Очевидно, я могу написать кучу кода для поиска по массиву $ _POST, чтобы найти все значения paymentType / Amount / Account и т. Д. И поместить их в объекты. Однако это немного вонючий, и мне интересно, есть ли лучший способ назвать эти элементы формы?

Кстати, я попытался назвать поля как управляющие массивы (по крайней мере, так я их называю), поэтому вместо paymentType0 это будет paymentType [0], а PHP увидит их как массив, который я мог бы перебрать хоть. Проблема этого подхода заключается в том, что ссылка на эти поля с помощью jQuery становится очень сложной из-за квадратных скобок.

Какое «лучшее из двух» миров решение для этого?

Ответы [ 5 ]

3 голосов
/ 27 мая 2009

Вы можете без проблем использовать массив, но не вызывайте поля paymentType[0], paymentAmount[0], ...

Вместо этого назовите их payment[0][type], payment[0][amount] и т. Д.

Тогда записи будут удобно сгруппированы в ассоциативные массивы, которыми гораздо проще манипулировать:

foreach ($_POST["payment"] as $payment) {
   echo "The type was $payment[type] and the amount was $payment[amount]";
}

Что касается jQuery: следуйте совету Дэвида. Объекты в JavaScript - это просто ассоциативные массивы с синтаксическим сахаром, и вы можете получить доступ к их элементам следующим образом:

myForm["payment[0][amount]"].value = 300
0 голосов
/ 27 мая 2009

Вы всегда можете попробовать следующий код:

foreach($_POST as $key => $val)
{
    if(isset($$key)) $$key = $val;
}

Однако этот подход плох, потому что вы можете POST-переменные, такие как PHP_SELF и т. Д., Поэтому вы хотели бы проверить их.

0 голосов
/ 27 мая 2009

Я согласен с n3rd. Если у вас возникли проблемы с переменными, предварительно отформатируйте данные на своем конце.

Небольшая экстраполяция этой идеи означает просто сохранить ваши данные в объекте JSON, который вы создаете, когда пользователь вводит значения, а затем при отправке отправлять объект JSON на следующую страницу, вместо того, чтобы беспокоиться о том, как называется каждая переменная. 1003 *

Если это не так, есть другое возможное решение, хотя я не уверен, что оно решает вашу конкретную проблему:

http://www.configure -all.com / arrayoffields.php

(взято из поиска в Google по "массиву jquery имен php форм")

0 голосов
/ 27 мая 2009

Используйте имена в квадратных скобках, чтобы библиотека обработки форм PHP преобразовывала их в массивы.

Тогда, если вам нужно сослаться на них с помощью JavaScript - используйте квадратную скобку .

0 голосов
/ 27 мая 2009

Вы можете рассмотреть предварительную обработку отправленных значений с помощью jQuery. Вместо отправки необработанных данных формы вы можете структурировать их на стороне клиента и передавать их на сервер с помощью JSON, который можно легко преобразовать в объект PHP.

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