Полный цикл в digital

Отправка массивов на сервер

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

Например, определим следующий файл users.php:

<?
$users = [];
if(isset($_GET["users"])){
$users = $_GET["users"];
}
echo "В массиве " . count($users) . " элементa/ов<br>";
foreach($users as $user) echo "$user<br>";

В данном случае мы предполагаем, что параметр users, который передается в запросе типа GET, будет представлять массив. И соответствено мы сможем получить из него данные.

Чтобы передать массив этому скрипту, обратимся к нему со следующим запросом:

https://hmarketing.ru/users.php?users[]=Tom&users[]=Bob&users[]=Sam

Чтобы определить параметр строки запроса как массив, после названия параметра указываются квадраные скобки []. Затем мы можем присвоить некоторое значение: users[]=Tom. И сколько раз подобным образом будет присвоено значений, столько значений и будет в массиве. Все значения, как и обычно, отделяются амперсандом. Так, в данном случае в массив передаются три значения.

Подобным образом мы можем отправлять данные в запросе POST из формы. Например, определим следующий скрипт:

<!DOCTYPE html>
<html>
<head>
<title>hmarketing.ru</title>
<meta charset="utf-8" />
</head>
<body>
<?
if(isset($_POST["users"])){
$users = $_POST["users"];
echo "В массиве " . count($users) . " элементa/ов<br>";
foreach($users as $user) echo "$user<br>";
}
?>
<h3>Форма ввода данных</h3>
<form method="POST">
<p>User 1: <input type="text" name="users[]" /></p>
<p>User 2: <input type="text" name="users[]" /></p>
<p>User 3: <input type="text" name="users[]" /></p>
<input type="submit" value="Отправить">
</form>
</body>
</html>

Как известно, название ключа передаваемых на сервер данных соответствует значению атрибута name у элемента формы. И чтобы указать, что какое-то поле ввода будет поставлять значение для массива, у атрибут name поля ввода в качестве значения принимает название массива с квадратными скобками:

<input type="text" name="users[]" />

Соответственно, сколько полей ввода с одним и тем же именем массива мы укажем, столько значений мы сможем передать на сервер. Так, в данном случае на сервер передается три значения в массиве users:

Причем данный принцип применяется и к другим типам полей ввода формы html.

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

$firstUser = $_POST["users"][0];
echo $firstUser;

Но также мы можем в элементах формы явным образом указать ключи:

<!DOCTYPE html>
<html>
<head>
<title>hmarketing.ru</title>
<meta charset="utf-8" />
</head>
<body>
<?
if(isset($_POST["users"])){
$firstUser = $_POST["users"]["first"];
$secondUser = $_POST["users"]["second"];
$thirdUser = $_POST["users"]["third"];
echo "$firstUser<br>$secondUser<br>$thirdUser";
}
?>
<h3>Форма ввода данных</h3>
<form method="POST">
<p>User 1: <input type="text" name="users[first]" /></p>
<p>User 2: <input type="text" name="users[second]" /></p>
<p>User 3: <input type="text" name="users[third]" /></p>
<input type="submit" value="Отправить">
</form>
</body>
</html>

Например, первое поле добавляет в массив элемент с ключом first:

<input type="text" name="users[first]"/>

Поэтому на сервере мы можем с помощью данного ключа получить соответствующий элемент:

$firstUser = $_POST["users"]["first"];
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг