Как перебрать элементы управления в форме? - PullRequest
0 голосов
/ 17 января 2010

Я довольно новичок в PHP и сейчас работаю над своим первым PHP-сайтом. У меня есть необходимость отображать (и добавлять / редактировать) строки в таблице в одной форме.

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

Когда они нажимают кнопку сохранения, я хочу обновить все существующие строки и вставить новую строку (если есть данные).

Есть ли простой способ перебрать все элементы управления в форме или что-то в этом роде?

Ответы [ 4 ]

1 голос
/ 17 января 2010

Вы можете выполнить итерацию через массив $ _POST, используя конструкцию foreach, но не забудьте проверить имена ключей по именам столбцов (или по именам строк, я не могу понять ваш дизайн базы данных, возможно, потому, что я только что проснулся).

foreach($_POST as $key => $value)
{
    // do stuff
}

И если это ваш первый PHP-сайт, также не забудьте о SQl-инъекции .

0 голосов
/ 17 января 2010

Вы можете получить все поля в вашей таблице с помощью запроса. В MySQL это будет

ПОКАЗАТЬ ПОЛЯ ИЗ ИМЕНИ table_

Затем вы могли бы зациклить эти поля для вывода полей формы (хотя вам, возможно, придется жестко закодировать некоторую логику для обработки того, что такое текстовое поле, что такое флажок и т. Д.). После отправки вы можете получить поля с

foreach ($ _POST как $ field_name => $ posts_data)

РЕДАКТИРОВАТЬ: также, учитывая, насколько легко это позволяет привязать поле формы к таблицам базы данных, очень внимательно относитесь к SQL-инъекции, как упоминалось в другом ответе.

0 голосов
/ 17 января 2010

Я обычно добавляю номер строки к каждому элементу управления:

<input type='text' name='email_1'> ...
<input type='text' name='email_2'> ...
<input type='text' name='email_3'> ...

, а затем просто пролистать:

<? for ($i = 1; $i <= {max number of rows}; $i++)
  { 
   if (isset($_POST["email_$i"]))......

это приводит к нескольким избыточным циклам, но снижение производительности незначительно для IMO, и код для обработки полей выглядит лучше, особенно когда вы имеете дело со многими полями подряд.

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

0 голосов
/ 17 января 2010

PHP не имеет дело с формами, только форма data .

// Cycle through each item POSTED (excludes GET, and FILES)
foreach ($_POST as $data) {
  echo $data . "<br/>";
}

При этом я бы не советовал вслепую ездить на велосипеде через $_POST. Вместо этого, знайте, что вы ищете, и следите за этим:

foreach ($_POST["emails"] as $email) {
  if (!valid($email)) $errors["emails"] = "Provide valid email addresses.";
}

Вы можете связать много адресов электронной почты во многих строках, используя синтаксис в виде массива для их имени:

<input type="text" name="emails[]" value="jane.doe@somedomain.com" />
<input type="text" name="emails[]" value="john.doe@somedomain.com" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...