В прошлых темах была рассмотрена отправка на сервер отдельных значений. Однако отправка набора значений, то есть массивов в PHP может вызвать некоторые сложности. Рассмотрим, как можно отправить на сервер и соответственно получить на сервере массивы данных.
Например, определим следующий файл users.php:
<?php $users = []; if(isset($_GET["users"])){ $users = $_GET["users"]; } echo "В массиве " . count($users) . " элементa/ов<br>"; foreach($users as $user) echo "$user<br>"; ?>
В данном случае мы предполагаем, что параметр "users", который передается в запросе типа GET, будет представлять массив. И соответствено мы сможем получить из него данные.
Чтобы передать массив этому скрипту, обратимся к нему со следующим запросом:
http://localhost/users.php?users[]=Tom&users[]=Bob&users[]=Sam
Чтобы определить параметр строки запроса как массив, после названия параметра указываются квадраные скобки []. Затем мы можем присвоить некоторое значение: users[]=Tom
.
И сколько раз подобным образом будет присвоено значений, столько значений и будет в массиве. Все значения, как и обычно, отделяются амперсандом. Так, в данном случае в массив передаются три значения.
Подобным образом мы можем отправлять данные в запросе POST из формы. Например, определим следующий скрипт:
<!DOCTYPE html> <html> <head> <title>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <?php 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>METANIT.COM</title> <meta charset="utf-8" /> </head> <body> <?php 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"];