- How to get a form input array into a PHP array
- 9 Answers 9
- Php массив переданных данных
- Форма ввода данных
- Форма ввода данных
- Формы, массивы и передача данных в php
- Базовый синтаксис
- Создание формы в HTML
- Register for an Account:
- Получение данных из формы на PHP-странице
- Массивы
- Цикл for
- Цикл foreach
- Повторяющиеся значения в формах
- Проверка ошибки при повторном вводе пароля
How to get a form input array into a PHP array
I have a form like the one below which is posted to contacts.php, and the user can dynamically add more with jQuery.
$name = $_POST['name']; $email = $_POST['account']; foreach($name as $v) < print $v; >foreach($email as $v)
function show_Names($n, $m) < return("The name is $n and email is $m, thank you"); >$a = array("name1", "name2", "name3"); $b = array("email1", "email2", "email3"); $c = array_map("show_Names", $a, $b); print_r($c);
The name is name1 and email is email1, thank you The name is name2 and email is email2, thank you The name is name3 and email is email3, thank you
9 Answers 9
They are already in arrays: $name is an array, as is $email
So all you need to do is add a bit of processing to attack both arrays:
$name = $_POST['name']; $email = $_POST['account']; foreach( $name as $key => $n )
To handle more inputs, just extend the pattern:
$name = $_POST['name']; $email = $_POST['account']; $location = $_POST['location']; foreach( $name as $key => $n )
Basically, you just extend the pattern. See my edit above. any additional inputs will also be arrays when you assign them from $_POST (assuming there are multiple inputs with that name in the html, as you did with these fields).
Jeffrey, I wonder if I can trust the ordering of the arrays. That is, are we sure that $emails[1] corresponds to the user named $name[1] ? I think I ran into problems with this in the past but I might be wrong. Thanks
@bruciasse — The way that the server handles input arrays like this will vary from one web server to another (different OSes implement things differently when it comes to fine grained details like this), however every platform I have employed these techniques on is consistent within itself (i.e. the ordering is the same every time). It is possible that a browser could mix-up the order of the request variables before passing the request to the server, but I would expect this to be fairly unusual. The final issue you could face is that of the html being mixed in a strange order and CSS adjusting
. the positioning. If your page was like that, it would certainly see some strange issues w/r/t ordering of the arrays.
Php массив переданных данных
В прошлых темах была рассмотрена отправка на сервер отдельных значений. Однако отправка набора значений, то есть массивов в PHP может вызвать некоторые сложности. Рассмотрим, как можно отправить на сервер и соответственно получить на сервере массивы данных.
Например, определим следующий файл users.php :
echo "В массиве " . count($users) . " элементa/ов
"; foreach($users as $user) echo "$user
"; ?>
В данном случае мы предполагаем, что параметр «users», который передается в запросе типа GET, будет представлять массив. И соответствено мы сможем получить из него данные.
Чтобы передать массив этому скрипту, обратимся к нему со следующим запросом:
http://localhost/users.php?users[]=Tom&users[]=Bob&users[]=Sam
Чтобы определить параметр строки запроса как массив, после названия параметра указываются квадраные скобки []. Затем мы можем присвоить некоторое значение: users[]=Tom . И сколько раз подобным образом будет присвоено значений, столько значений и будет в массиве. Все значения, как и обычно, отделяются амперсандом. Так, в данном случае в массив передаются три значения.
Подобным образом мы можем отправлять данные в запросе POST из формы. Например, определим следующий скрипт:
"; foreach($users as $user) echo "$user
"; > ?>Форма ввода данных
User 1:
User 2:
User 3:
Как известно, название ключа передаваемых на сервер данных соответствует значению атрибута name у элемента формы. И чтобы указать, что какое-то поле ввода будет поставлять значение для массива, у атрибут name поля ввода в качестве значения принимает название массива с квадратными скобками:
Соответственно, сколько полей ввода с одним и тем же именем массива мы укажем, столько значений мы сможем передать на сервер. Так, в данном случае на сервер передается три значения в массиве users:
Причем данный принцип применяется и к другим типам полей ввода формы html.
При этом в примерах выше передавался обычный массив, каждый элемент которого в качестве ключа имеет числовой индекс. Соотвенно, используя индекс, мы можем получить определенный элемент массива:
$firstUser = $_POST["users"][0]; echo $firstUser;
Но также мы можем в элементах формы явным образом указать ключи:
$secondUser
$thirdUser"; > ?>Форма ввода данных
User 1:
User 2:
User 3:
Например, первое поле добавляет в массив элемент с ключом «first»
Поэтому на сервере мы можем с помощью данного ключа получить соответствующий элемент:
$firstUser = $_POST["users"]["first"];
Формы, массивы и передача данных в php
В учебнике на сайте ibm.com «Изучаем PHP: Часть 1. Страница регистрации, формы и взаимодействие с базой данных» все рассматривается на примере создания реального приложения.
В этом конспекте: базовый синтаксис PHP, формы в HTML, массивы, ассоциативный массив $_GET (или $_POST) и циклы.
Базовый синтаксис
Признак переменной — знак доллара $
You entered:
Password = " . $password . ""; ?>
Определение и использование константы:
В отличие от переменных константы записываются без знака доллара. Имя константы может быть любым, но, согласно принятым правилам, имена констант состоят из прописных букв.
Упрощенный вывод: когда вывести нужно один элемент, есть более постой способ — оператор вывода :
Создание формы в HTML
Начнем с создания страницы регистрации для приложения. Для начала просто создадим форму для ввода в файле registration.php:
Register for an Account:
Поместите этот файл в корневую папку и откройте браузер с адресом //localhost/registration.php.
Обратите внимание на URL в поле адреса браузера.
Поскольку в качестве метода используется GET, данные из формы передаются в строке URL. Каждому элементу формы в URL соответствует пара имя-значение, и эти пары разделены амперсандами.
Получение данных из формы на PHP-странице
Массивы
$formnames = array("name", "email", "pword"); echo "0
"; .
Функция array() возвращает переменную, которая является массивом. Первое значение в массиве имеет индекс 0.
Переменная $_GET является именем ассоциативного массива, к элементам которого обращаются не по индексам, а по ключам. Когда вы отсылаете форму, вы создаете ассоциативный массив (имена переменных играют роль ключей — $_GET[«name»]):
$_GET = array("name" => "roadnick", "email" => "ibmquestions@nicholaschase.com", "pword" => "supersecretpassword");
Структура ассоциативного массива не всегда известна, например, если ассоциативный массив был получен в результате выполнения запроса к базе данных.
Функции array_keys() и array_values() возвращают простые массивы, к элементам которых можно обращаться при помощи числовых индексов:
$form_names = array_keys($_GET); $form_values = array_values($_GET);
Цикл for
Здесь используется функция sizeof() , которая возвращает число элементов массива:
for ($i = 0; $i < sizeof($_GET); $i++) < echo "".$form_names[$i]." = " . $form_values[$i] . "
"; >
Цикл foreach
Значения из массива $_GET в цикле приписываются переменной $value. Цикл работает до тех пор, пока в массиве $_GET еще остаются необработанные элементы.
Доступ к данным массива напрямую без ключей:
foreach ($_GET as $value) < echo "" . $value . "
"; >
Извлечение значений и ключей:
foreach ($_GET as $key=>$value) < echo "".$key." = " . $value . "
"; >
Повторяющиеся значения в формах
Иногда в форме должно быть введено несколько значений для переменной с одним и тем же именем. Например, поле пароля и поле повтора пароля.
Username:
Email:
Password:
Password (again):
Поскольку поле pword должно содержать несколько значений, оно стало массивом. Таким образом, массив передаваемых данных для этой формы будет содержать в качестве одного из своих элементов другой массив. Когда вы нажмете кнопку отправки формы, в поле адреса вы увидите примерно следующее:
//localhost/registration_action.php?
name=roadnick&email=ibmquestions%40nicholaschase.com&
pword[]=supersecretpassword&pword[]=supersecretpassword
Это значит, что были созданы массивы
$passwords = array("supersecretpassword", "supersecretpassword"); $_GET = array("name"=>"roadnick", "email"=>"ibmquestions@nicholaschase.com", "pword"=>$passwords);
И получать их значения нужно так:
foreach ($_GET as $key=>$value) < echo "".$key." = " . $value . "
"; > $passwords = $_GET["pword"]; echo "First password = ".$passwords[0]; echo "
"; echo "Second password _GET_POST">Методы GET и POSTПри использовании метода GET данные передаются открыто в URL-адресе, т.е. данные доступны для просмотра. Это небезопасно, т.к. эти данные могут быть перехвачены. Кроме того, в URL-адресе можно передавать ограниченное по объему количество данных.
Поэтому в большинстве случаев имеет смысл использовать метод POST, который передает данные в теле запроса, а не в заголовке, как метод GET. Для этого в HTML-форме вместо $_GET нужно писать $_POST.
Проверка ошибки при повторном вводе пароля
Используем условный оператор if-then ( проверка равенства - это двойной знак равенства, т.е. ==):
$passwords = $_POST["pword"]; echo "First password = ".$passwords[0]; echo "
"; echo "Second password = ".$passwords[1]; if ($passwords[0] == $passwords[1]) < echo "Пароли совпали.
"; > else < echo "Пароли не совпали. Введите пароль еще раз.
"; >Для формирования более сложных логических выражений можно применять логические операторы, например, оператор И (&&) и оператор ИЛИ (||). Например:
if (($today == "Monday") && ($status == "Not a holiday"))