Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


Передача массивов POST-методом в PHP


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеВс, 27-Июл-2008 18:24    Заголовок сообщения: Передача массивов POST-методом в PHP
Цитата

Есть следующая задача:
Из страницы А в страницу B (обрабатывающий скрипт) передать POST-методом, помимо разного рода данных формы, массив (в моем случае многомерный и ассоциированный) в качестве ОДНОГО из параметров POST-запроса формы. Т.е. другими словами нужно следующее - чтобы в скрипте, который обрабатывает POST-данные наряду с параметрами элементов формы, был получен в $_REQUEST, массив вроде такого - $_REQUEST["parameters"], который представляет из себя массив элементов вроде $_REQUEST["parameters"]["parameter1"][0] и т.д.

Полагаю ответ лежит в "ручном" (а не через элементы формы) добавлении пересылаемых скрипту данных в, кажется, заголовке запроса, которые скрипт потом получает через глобальный массив $_POST либо $_REQUEST. А как это сделать в PHP? И возможно ли такое - передать в качестве одного из параметров - массив?
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеПн, 28-Июл-2008 1:16 
Цитата

И в чем проблема?
_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеПн, 28-Июл-2008 12:48 
Цитата

dogma.
Так как это в ПХП сделать-то? Нельзя же в странице которая делает запрос к скрипту просто написать $_POST["parameters"][0]="...", рассчитывая что этот массив сохраниться и передастся скрипту, где мы может обратиться к чему через то же $_POST["parameters"][3]...! Информация все равно до самого скрипта дойдет лишь та, что была в элементах формы (включая "hidden"), поэтому нужно как то либо вручную добавлять и редактировать заголово запроса, либо как-то всунуть созданный массив в элемент <input type="hidden"> формы страницы, делающей запрос к скрипту. Как ни то ни другое сделать я не представляю... Как быть?

Добавлено спустя 3 минуты 20 секунд:

Есть конечно идея, в hidden-элемент формы запихнуть строку, содержащую элементы, разделенные каким-нить уникальным символом, а потом в скрипте ее парсить, но это непрофессионально.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж TuXAPuK
Великий гонщик

Предупреждений : 1
Возраст: 26
Знак зодиака: Рыбы
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
СообщениеПн, 28-Июл-2008 17:03 
Цитата

Передать массив через $_SESSION // Самое реальное предложение...

Загрузить массив в темпфайл XML передать имя через hidden поле или через куки...

_________________
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеВт, 29-Июл-2008 0:58 
Цитата

Не понимаю в чем проблема! Вот тебе рабочий пример код GET команды:

php:
  1.  
  2. <?php
  3.  
  4. $mas = $_GET["mas"];
  5. var_dump($mas);
  6. var_dump($_GET["mas"]);
  7.   foreach($mas as $key => $value)
  8.     print_r($value);
  9.  
  10. ?>
  11.  

Здесь разными вариантами выводится содержимое двумерного массива переданного строкой:
http://lord66/index.php?mas[g][0]=First&mas[g][1]=Second
Результат:
array(1) { ["g"]=> array(2) { [0]=> string(5) "First" [1]=> string(6) "Second" } }
array(1) { ["g"]=> array(2) { [0]=> string(5) "First" [1]=> string(6) "Second" } } Array ( [0] => First [1] => Second )

Для метода POST все идентично.

_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеСб, 16-Авг-2008 12:12 
Цитата

TuXAPuK писал(а):
Передать массив через $_SESSION // Самое реальное предложение...

Загрузить массив в темпфайл XML передать имя через hidden поле или через куки...


Передавать через $_SESSION, куки или файлы - это конечно можно, но как правильно было замечено выше, не принято, хотя ничего плохого в этом не вижу.

Добавлено спустя 11 минут 31 секунду:

Dogma,
ты меня наверное не совсем понял. Вопрос был не в том, как вытащить со стороны принимающего данные скрипта (как ты привел в примере), а как послать ему массив со стороны отсылающего скрипта/страницы.

Как посылать данные методом GET, также как и POST я знаю, еще не совсем дура (наверное;) ).
Вопрос был в том, как лучше послать, с меньшими затратами кода. К примеру, возможно, я думала какие-то функции есть посыла данных в PHP помимо данных формы (составление заголовка и ручная посылка его напрямую не имею в виду), чтобы можно было сразу поставить каким-то переменным значение массива и послать эту переменную (ные) скрипту, а не писать к примеру строку запроса и прикреплять ее к URL, или не составлять эту строку же, и прикреплять к заголовку при методе POST.

Короче, как я поняла, ответ один на поставленный вопрос - из имеющихся средств в PHP, самый эффективный метод посыла массива (особенно многомерного) - его сериализация ($string=serialize($mas)) и посылка этой строки, к примеру, в элементе управления формы, к примеру методом POST. Принимающий же скрипт - рассериализует ($mas=array(); $mas=unserialize($_REQUEST["mas"]);)

Вот это я и имела в виду. Видно плохо я ставлю вопросы.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж dogma
aka Достоевский


Возраст: 27
Знак зодиака: Телец
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
СообщениеПн, 18-Авг-2008 1:06 
Цитата

Кстати, в PHP есть какая-то проблема безопасности связанная с функцией serialize.
_________________
Bonum initium est dimidium facti
SQL-задачи (on-line)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж anti_JIaMep
Новичок




Зарегистрирован: 25.12.2008
Сообщения: 2

СообщениеЧт, 25-Дек-2008 4:54 
Цитата

прикольно все это... а может подскажет кто, как быть с передачей массива методом POST из Delphi 7 ? используется IdHTTP ... я тож не мастер на вопросы, так что если непонятно о чем я - спрашивайте..
заранее спс =)

_________________
Любая революция умирает на голой идее без реальных средств террора.
В начало
Посмотреть профиль Отправить личное сообщение
rassol
Гость







СообщениеПн, 09-Фев-2009 21:43    Заголовок сообщения: Поздновато, конечно, но лучше поздно, чем никогда
Цитата

Собственно получить в $_REQUEST или $_POST массив из формы - вещь тривиальная:
Цитата:

<form method="POST" action="">
<input type="hidden" name="yourarray[record1]" value="1"/>
<input type="hidden" name="yourarray[record2]" value="2"/>
<input type="hidden" name="yourarray[record3]" value="3"/>
</form>


в php получим
$_REQUEST['yourarray']['record1'] = 1, $_REQUEST['yourarray']['record2'] = 2 и $_REQUEST['yourarray']['record3'] = 2
Либо сериализация.
Либо, как указано в первом сообщении, делиметр.
Либо сессия.
Либо кукис.
Либо вообще ajax.
Способов масса - вопрос в том, под какую задачу реализовывать.
[/quote]
Цитата:
В начало
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеВс, 22-Фев-2009 8:52 
Цитата

Можно еще передать через hidden формы в формате xml или как сейчас становится можно, через альтернативу xml - json. В общем это и есть инструменты ajax.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж TuXAPuK
Великий гонщик

Предупреждений : 1
Возраст: 26
Знак зодиака: Рыбы
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
СообщениеСб, 20-Фев-2010 23:51 
Цитата

Оживляем старые темы - в сторону лучшего конечно....

Оказывается не надо сильно извращаться... В PHP есть 2 врожденные функции serialize и unserialize..

Делает из массивов текст :
$string = serialize($array);

И из этого текста делает массив :
$array = unserialize($string);

_________________
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Xexys
Гость







СообщениеПн, 12-Апр-2010 20:37 
Цитата

Можно еще использовать функции json_encode и json_decode для представления массива в виде строки
В начало
Пол:Муж Walz
Новичок


Возраст: 26
Знак зодиака: Рак
Зарегистрирован: 16.08.2010
Сообщения: 1
Откуда: Москва
СообщениеПн, 16-Авг-2010 11:18 
Цитата

Лучше использовать $_SESSION

Цитата:
Кстати, в PHP есть какая-то проблема безопасности связанная с функцией serialize.


Что за проблема, можно поподробней?
В начало
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100