| Автор
| Сообщение |
 Kate
Постоянный участник

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
Есть следующая задача:
Из страницы А в страницу B (обрабатывающий скрипт) передать POST-методом, помимо разного рода данных формы, массив (в моем случае многомерный и ассоциированный) в качестве ОДНОГО из параметров POST-запроса формы. Т.е. другими словами нужно следующее - чтобы в скрипте, который обрабатывает POST-данные наряду с параметрами элементов формы, был получен в $_REQUEST, массив вроде такого - $_REQUEST["parameters"], который представляет из себя массив элементов вроде $_REQUEST["parameters"]["parameter1"][0] и т.д.
Полагаю ответ лежит в "ручном" (а не через элементы формы) добавлении пересылаемых скрипту данных в, кажется, заголовке запроса, которые скрипт потом получает через глобальный массив $_POST либо $_REQUEST. А как это сделать в PHP? И возможно ли такое - передать в качестве одного из параметров - массив? |
|
| В начало |
|
 |
|
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
| В начало |
|
 |
 Kate
Постоянный участник

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


Возраст: 26
Знак зодиака: 
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
|
|
|
Цитата |
|
Передать массив через $_SESSION // Самое реальное предложение...
Загрузить массив в темпфайл XML передать имя через hidden поле или через куки... _________________
 |
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
|
Цитата |
|
Не понимаю в чем проблема! Вот тебе рабочий пример код GET команды:
| php: | <?php $mas = $_GET["mas"]; foreach($mas as $key => $value) ?>
|
Здесь разными вариантами выводится содержимое двумерного массива переданного строкой:
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
|
|
|
Цитата |
|
| 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
Откуда: Холмск
|
|
|
Цитата |
|
Кстати, в PHP есть какая-то проблема безопасности связанная с функцией serialize. _________________ Bonum initium est dimidium facti
SQL-задачи (on-line) |
|
| В начало |
|
 |
 anti_JIaMep
Новичок

Зарегистрирован: 25.12.2008
Сообщения: 2
|
|
|
Цитата |
|
прикольно все это... а может подскажет кто, как быть с передачей массива методом POST из Delphi 7 ? используется IdHTTP ... я тож не мастер на вопросы, так что если непонятно о чем я - спрашивайте..
заранее спс =) _________________ Любая революция умирает на голой идее без реальных средств террора. |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Собственно получить в $_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
|
|
|
Цитата |
|
| Можно еще передать через hidden формы в формате xml или как сейчас становится можно, через альтернативу xml - json. В общем это и есть инструменты ajax. |
|
| В начало |
|
 |
 TuXAPuK
Великий гонщик


Возраст: 26
Знак зодиака: 
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
|
|
|
Цитата |
|
Оживляем старые темы - в сторону лучшего конечно....
Оказывается не надо сильно извращаться... В PHP есть 2 врожденные функции serialize и unserialize..
Делает из массивов текст :
$string = serialize($array);
И из этого текста делает массив :
$array = unserialize($string); _________________
 |
|
| В начало |
|
 |
|
|
|
Цитата |
|
| Можно еще использовать функции json_encode и json_decode для представления массива в виде строки |
|
| В начало |
|
 |
 Walz
Новичок

Возраст: 26
Знак зодиака: 
Зарегистрирован: 16.08.2010
Сообщения: 1
Откуда: Москва
|
|
|
Цитата |
|
Лучше использовать $_SESSION
| Цитата: | | Кстати, в PHP есть какая-то проблема безопасности связанная с функцией serialize. |
Что за проблема, можно поподробней? |
|
| В начало |
|
 |
|