Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как извлечь значения из $_POST? / 25 сообщений из 36, страница 1 из 2
06.07.2016, 20:13
    #39269280
maxapet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
C формы на сервер передаётся несколько полей с одинаковым именем? например, multiField. Можно ли на серверной стороне извлечь их все? Если да, то как? Поля в заголовке присутствуют, на сервер передаются - проверял.

P.S. Вариант:
Код: php
1.
2.
3.
foreach($_POST["mltiField"] as $multiField){
	/* TODO something*/
}


не работает, т.к. $_POST["multiField"] не является массивом. Проверял через is_array.
...
Рейтинг: 0 / 0
06.07.2016, 20:56
    #39269291
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
Для начала var_dump($_POST);
А там видно будет, что присутствует.
...
Рейтинг: 0 / 0
06.07.2016, 21:00
    #39269292
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
maxapet,

ответ в документации - http://php.net/manual/ru/reserved.variables.post.php

( использование name с индексами)
...
Рейтинг: 0 / 0
07.07.2016, 01:22
    #39269352
maxapet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
Изопропил, да, я делал так: добавлял к значению name квадратные скобки, т.е. name="phone[]". При этом $_POST["phone"] возвращает массив значений "phone", который можно прогнать через foreach , но тогда у меня перестаёт работать валидация формы - плагин jquery.validate не работает в этом случае. Т.ч. индексирование мне не подходит.
...
Рейтинг: 0 / 0
07.07.2016, 01:31
    #39269358
maxapet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
vkle, если имена полей не индексированы, то после var_dump? впрочем, как и после print_r остаётся только последнее значение multifield. Если же имена индексированы - добавлены квадратные скобки к имени, то обе функции возвращают multifield как массив.
...
Рейтинг: 0 / 0
07.07.2016, 07:36
    #39269389
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
maxapet,

Каким образом плагин не работает? На stackoverflow масса вопросов и ответов по этой теме
...
Рейтинг: 0 / 0
07.07.2016, 07:45
    #39269392
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
maxapetИзопропил, да, я делал так: добавлял к значению name квадратные скобки, т.е. name="phone[]". При этом $_POST["phone"] возвращает массив значений "phone", который можно прогнать через foreach , но тогда у меня перестаёт работать валидация формы - плагин jquery.validate не работает в этом случае. Т.ч. индексирование мне не подходит.Ну копаться в исходниках РНР с целью изменить его поведение вряд ли разумно. Так что или отказываться от РНР в пользу какой-то другой технологии, или править jquery.validate...
...
Рейтинг: 0 / 0
07.07.2016, 08:10
    #39269405
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
Barlone,

Зачем править то?


Изопропил,

Покажи свой валидатор
...
Рейтинг: 0 / 0
07.07.2016, 08:11
    #39269406
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
maxapet,

Покажи свой валидатор
...
Рейтинг: 0 / 0
07.07.2016, 09:31
    #39269440
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
maxapetvkle, если имена полей не индексированы, то после var_dump? впрочем, как и после print_r остаётся только последнее значение multifield. Если же имена индексированы - добавлены квадратные скобки к имени, то обе функции возвращают multifield как массив.Ну да, без квадратных скобок не массив. Соответственно, единственная переменная с указанным именем будет перезаписана несколько раз.

Если ни имена полей формы, ни обработчик менять нельзя, то остаётся выкинуть эту "безиндексную" байду. Впрочем, сперва можно попробовать прочитать "чистый" ввод из php://input, конечно, если форма отправляет не multipart/form-data. Не уверен в успехе, сам не пробовал такое.
...
Рейтинг: 0 / 0
07.07.2016, 18:16
    #39270089
maxapet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
Изопропил, я использую вот этот
Если у имени поля ставлю [], то поле игнорируется валидатором.
...
Рейтинг: 0 / 0
07.07.2016, 18:34
    #39270101
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
maxapet,

я собственно про ваш код обращения к валидатору
...
Рейтинг: 0 / 0
08.07.2016, 05:20
    #39270234
maxapet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
Изопропил, как такового обращения-то и нет. Вот настройка валидатора, если Вы это имели ввиду:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
$(document).ready(function() {
	$("#optionsFrm").validate({
		alert("validating");
		rules:{
			siteUrl: {
				required: true,
				url: true
			},
			exceptedUrl: {
				required: true,
				url: true
			},
			email: {
				required: true,
				email: true
			}
		},
		messages: {
			siteUrl: {
				required: "Необходимо указать название сайта",
				url: "Некорректный адрес"
			},
			exceptedUrl: {
				required: "Необходимо указать название сайта",
				url: "Некорректный адрес"
			},
			email: {
				required: "Укажите свой адрес для связи",
				email: "Введите корректный адрес электронной почты"
			}
		}
	});
});
...
Рейтинг: 0 / 0
08.07.2016, 06:56
    #39270248
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
vkleсам не пробовалИз интересу вот попробовал. Вполне рабочий вариант
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<form method="POST">
    <input type="text" name="phone" />
    <input type="text" name="phone" />
    <input type="text" name="phone" />
    <input type="text" name="email" />
    <input type="text" name="email" />
    <input type="text" name="email" />
    <input type="submit" />
</form>
<pre>
<?php
$post = file_get_contents("php://input");
$data = [];
foreach(explode('&', $post) as $field) {
    list($k, $v) = explode('=', $field);
    $data[$k][] = $v;
}
var_dump($data);
...
Рейтинг: 0 / 0
08.07.2016, 09:29
    #39270290
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
maxapetВот настройка валидатора, если Вы это имели ввиду
да, именно это

в лоб можно так сделать

тогда
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
		'siteUrl[0]': {
				required: true,
				url: true
			},
		'siteUrl[1]': {
				required: false,
				url: true
			},


Код: html
1.
2.
<input name="siteUrl[0]" type="text">
<input name="siteUrl[1]" type="text">



если без индексов красиво хочется - подменить $.validator.prototype.checkForm
...
Рейтинг: 0 / 0
10.07.2016, 00:06
    #39271233
maxapet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
Изопропил, проблема в том, что я не знаю заранее, сколько полей будет добавлено клиентом.
...
Рейтинг: 0 / 0
10.07.2016, 01:00
    #39271237
maxapet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
vkle, попробовал, вот что получилось:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
	$post = file_get_contents("php://input");
	$data = array();
	foreach(explode('&', $post) as $field){
		list($k, $v) = explode('=', $field);
		$data[$k][] = $v;
	}
	var_dump($data);
	echo var_dump($data);


во-первых, строку $data = [] пришлось заменить на $data = array(), бо иначе выпадала ошибка.
во-вторых, в результате получил вот что:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
array(1){
 [""]=>
 array(1){
 [0]=>NULL
 }
}
array(1){
 [""]=>
 array(1){
 [0]=>NULL
 }
}


Хотя, передаётся пять полей, из них два с одинаковыми именами.
...
Рейтинг: 0 / 0
10.07.2016, 01:25
    #39271241
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
vkleИз интересу вот попробовал. Вполне рабочий вариант
нерабочий - только на первое поле из набора с одинаковым именем валидатор сработает.


maxapetпроблема в том, что я не знаю заранее, сколько полей будет добавлено клиентом.
значит при добавлении полей нужно динамически правила добавлять,
а имена давать с индексом

PS плагин кривоватый
...
Рейтинг: 0 / 0
10.07.2016, 01:29
    #39271242
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
maxapet,

php код оставьте в покое

добавление правила -
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
$( "input[name='siteUrl["+i+"]']" ).rules( "add", {
  required: true,
  url: true,
  messages: {
	required: "Необходимо указать название сайта",
	url: "Некорректный адрес"
  }
});
...
Рейтинг: 0 / 0
10.07.2016, 09:41
    #39271275
maxapet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
Изопропил, спасибо за идею. Попробую.
Правда, клиент может и добавлять, и удалять добавленные элементы. Придётся это отслеживать? Или правило удалится автоматом?
...
Рейтинг: 0 / 0
10.07.2016, 10:01
    #39271277
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
ИзопропилИз интересу вот попробовал. Вполне рабочий вариант
нерабочий - только на первое поле из набора с одинаковым именем валидатор сработает.Это, опять же, проблемы валидатора. В примере показал лишь выковыривание данных из одинаково именованных полей.


maxapetво-первых, строку $data = [] пришлось заменить на $data = array(), бо иначе выпадала ошибка.В старых версиях PHP такое было, пример тестил на 5.5.

maxapetво-вторых, в результате получил вот что:Вероятно, в Вашем конкретном случае поток php://input пуст.
...
Рейтинг: 0 / 0
10.07.2016, 10:47
    #39271290
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
maxapetПравда, клиент может и добавлять, и удалять добавленные элементы. Придётся это отслеживать? Или правило удалится автоматом?
удалится естественным путём, ничего отслеживать не нужно.

за индексом следить при добавлении только, чтоб имя уникальным получалось,
можно и не сплошную нумерацию иметь - просто глобальный счётчик подойдёт
...
Рейтинг: 0 / 0
10.07.2016, 10:48
    #39271291
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
vkleЭто, опять же, проблемы валидатора
я в этом не сомневаюсь
плагин - кривой
...
Рейтинг: 0 / 0
10.07.2016, 12:58
    #39271313
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
Вообще, изначально я так понял, что если имена полей без скобок, то валидатор нормально работает. Если же со скобками - то рубится. Вот, отсюда:
maxapetдобавлял к значению name квадратные скобки, т.е. name="phone[]". При этом $_POST["phone"] возвращает массив значений "phone", который можно прогнать через foreach , но тогда у меня перестаёт работать валидация формы - плагин jquery.validate не работает в этом случае.
А теперь получается, что и без квадратных скобок валидатор не работает.
Что на самом то деле происходит?
...
Рейтинг: 0 / 0
10.07.2016, 15:35
    #39271370
maxapet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как извлечь значения из $_POST?
vkle, без квадратных скобок работает валидатор. Со скобками - нет.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как извлечь значения из $_POST? / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]