Форма PHP, обрабатывающая несколько полей - PullRequest
0 голосов
/ 31 октября 2010

Каков наилучший способ перехвата нескольких полей через PHP? В настоящее время у меня есть файл login.php, который довольно прост:

  <form method="POST" action="auth.php">
   Code:<br />
  <input type="text" name="code" />
<input type="submit" id="submit" value="Submit" />
<br />
   Pass:<br />
  <input type="text" name="pass" />
   <input type="submit" id="submit" value="Submit" />
   </form>

Затем в auth.php я получаю значение через POST:

      $value = $_POST['code'];

Проблема в том, что у меня будет довольно много полей, и каждому полю будет назначена кнопка отправки. Тогда мне понадобится условие if для каждого доступного имени поля, чего я не хочу. Как лучше всего справиться с этим?

Спасибо

Ответы [ 3 ]

1 голос
/ 31 октября 2010

Просто используйте одну кнопку отправки.Нет причин иметь больше одного здесь.

Если у вас есть несколько связанных полей, вы можете использовать именование массива:

Primary email: <input type="text" name="email[]" >
Additional email: <input type="text" name="email[]">

и доступ из php с помощью

$emails = $_REQUEST['email'];

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

0 голосов
/ 31 октября 2010

Есть несколько способов упростить эту проблему. Вот один из подходов:

$fields = array('field1','field2','field3','field4','field5'); // Add all your field names to an array
$data = array();
foreach ($fields as $field) {
    if (isset($_POST[$field])) {
        $data[$field] = $_POST[$field];
        // If you wanted it assigned to a local variable instead, 
        // you could do it like this, although this pattern is 
        // generally frowned upon:
        ${$field} = $_POST[$field];
    }
}

Опасность назначения его в качестве локальной переменной заключается в том, что он может перезаписать переменную, которая уже существует. Это может потенциально перезаписать что-то важное для остальной части приложения. Однако, поскольку имена полей явно определены в массиве, вы по крайней мере сохраняете контроль над этим.

Вы определенно НЕ хотите перебирать массив $ _POST и назначать каждый ключ массива локальной переменной - это сделает вас широко открытыми для хакеров.

0 голосов
/ 31 октября 2010

У вас плохая проблема с HTML.В HTML вам не нужно более одной кнопки отправки.

Для отправки отправляется не поле, а целая форма .Вам даже не нужно , так как большинство пользовательских агентов отправят форму, если вы нажмете Enter в текстовом поле.

В любом случае, ваши поля будут иметь атрибут name , уникальный внутри формы, и должен иметь атрибут id , уникальный в документе.

Когда они отправляются, все данные могут быть доступны в PHP как массив.Суперглобальный $ _ POST в вашем случае или $ _ GET , если этот метод использовался для его отправки.Там ты делаешь свою магию.

...