2010-10-30 2 views
0

Что было бы лучшим способом перехватить несколько полей через PHP? В настоящее время у меня есть login.php файл, который довольно прост: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 для каждого имени поля, которое я не хочу. Какой был бы лучший способ справиться с этим?

Thanks

+0

В чем проблема? Как указано в предложении, вам не нужно много кнопок отправки, и, действительно, я не могу понять, в чем проблема ... –

ответ

0

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

$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 и назначать каждый ключ массива локальной переменной - это сделает вас широко открытыми для хакеров.

1

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

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

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

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

$emails = $_REQUEST['email']; 

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

+0

То, что действительно не исправляет мою проблему. Мне все равно понадобилось бы другое имя для каждого поля. И затем другое условие if для каждого поля файла auth.php. – phpdude

+0

@phpdude - отредактировано. Однако вам может просто понадобиться преодолеть это и использовать несколько имен полей. –

0

У вас возникли проблемы с HTML. В HTML вам не нужно больше одной кнопки отправки.

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

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

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