Обработка input с одинаковыми именами в php
Иногда есть необходимость обработать значения input с одинаковым атрибутом name. Такое может случиться, когда, к примеру, однотипные элементы формы добавляются динамически.
Допустим, у нас есть два input (они располагаются в форме - внутри тега form):
<form method="post" action="index.php">
<input type="text" name="name[]" value="Книга" />
<input type="text" name="price[]" value="1" />
<input type="text" name="name[]" value="Печенье" />
<input type="text" name="price[]" value="2" />
<input type="submit" name="submit" value="Отправить" />
</form>
В данном примере конечно проще всего было бы дать input разные названия, но сейчас код максимально упрощен. Допустим у нас элементы input создались на форме динамически с помощью скриптов.
Нам на стороне PHP после отправки формы нужно считать значения value.
PHP код:
if(isset($_POST['submit'])){
$nameArray = $_POST['name'];
$priceArray = $_POST['price'];
if(!empty($nameArray)){
for($i = 0; $i < count($nameArray); $i++){
if(!empty($nameArray[$i])){
$name = $nameArray[$i];
$price = $priceArray[$i];
// тут обрабатываем значения ...
}
}
}
}
Пояснения:
В данном цикле годится считывать и name и price только в том случае, если кол-во input и того и того совпадает. Если оно не совпадает - то необходимо 2 разных цикла.
Также возможный подводный камень: если name будет пустым, а price - нет, то цикл не сработает (так что подходит только если заполнение полей и там и там обязательно, иначе - лучше отдельные циклы). Так что более правильный вариант будет такой:
if(isset($_POST['submit'])){
$nameArray = $_POST['name'];
$priceArray = $_POST['price'];
//получаем все name
if(!empty($nameArray) && count($nameArray) > 0){
foreach ($nameArray as $name){
var_dump($name);
}
}
//получаем все price
if(!empty($priceArray) && count($priceArray) > 0){
foreach ($priceArray as $price){
var_dump($price);
}
}
}
Комментарии