Skip to content

Отправка и получение массива из html-формы

Взял отсюда - http://vvy.me/24-otpravka-i-poluchenie-massiva-iz-html-formy.html

Для начала рассмотрим самую простую форму:
<form method="post">
<input type="text" name="input1" value=" value_input1">
<input type="text" name="input2" value=" value_input2">
<input type="text" name="input3" value=" value_input3">
</form>

На сервере ее будет ловить маленький и очень понятный скрипт:
<?
print_r($_POST);
?>

В нашем случае функция print_r выведет в удобочитаемом виде весь массив $_POST, посмотрим, что получилось:
Array ( [input1] => value_input1 [input2] => value_input2 [input3] => value_input3 )

Т.е. по сути дела, интерпретатор php, до запуска скрипта уже выполнил эти строки:
$_POST['input1']='value_input1';
$_POST['input2']='value_input2';
$_POST['input3']='value_input3';

Вроде все хорошо, но мне то нужно из формы получить именно массив, у которого одно имя и много индексов. Многие новички допускают ошибку, они задают для всех input-ов одинаковое имя, посмотрим, что из этого получится.
Форма:
<form method="post">
<input type="text" name="input" value=" value_input1">
<input type="text" name="input" value=" value_input2">
<input type="text" name="input" value=" value_input3">
</form>

Результат:
Array ( [input] => value _input3 )

Как видно, на сервер дошло только последнее значение, и не удивительно, ведь интерпретатор при заполнении массива $_POST выполнил строки:
$_POST['input']='value_input1';
$_POST['input']='value_input2';
$_POST['input']='value_input3';

Что бы массив взаправду дошел из формы до моего скрипта я должен явно на это указать. Для этого добавляю в конце атрибута name каждого тега пустые квадратные скобки, так же как это делается для задания массива в самом php, теперь форма имеет вид:
<form method="post">
<input type="text" name="input[]" value=" value _input1">
<input type="text" name="input[]" value=" value _input2">
<input type="text" name="input[]" value=" value _input3">
</form>

А при разборе данных сервер поймет, что я хочу получить именно массив и выполнит:
$_POST['input'][]='value_input1';
$_POST['input'][]='value_input2';
$_POST['input'][]='value_input3';

В результате на странице появится гордое
Array ( [input] => Array ( [0] => value_input1 [1] => value_input2 [2] => value_input3 ) )

От сюда видно, что в массиве данных пришедших из формы присутствует еще один массив с именем «input» и с ним легко работать, например, перебрать:
for ($i=0;$i<count($_POST['input']); $i++)
echo $i.'-ой элемент массива из формы равен "'.$_POST['input'][$i].'"<br>';

В результате получим:
0-ой элемент массива из формы равен "value _input1"
1-ой элемент массива из формы равен "value _input2"
2-ой элемент массива из формы равен "value _input3"

Похожим способом можно передавать из формы на сервер и многомерные массивы, умный и добрый php снисходительно выполнит любой мой бред.

Leave a Reply

Your email address will not be published. Required fields are marked *

π