Многомерный почтовый массив PHP 5.4.6

1

Пожалуйста, рассмотрите следующий простой набор тестов:

<?php
$data = file_get_contents('php://input');
echo '<pre>';
echo 'raw: <br/>';
print_r($data);
echo '<br/>$_POST: <br/>';
print_r($_POST);
echo '
<form name="form1" method="post" type="application/x-www-form-urlencoded"   action="postTest.php"/>
<input type="text" name="my1[]" value="1" />
<input type="text" name="my1[]" value="2" />
<input type="text" name="my3" value="3 "/>

<input type="submit" />
</form>

Это возвращается на большинстве серверов, работающих под управлением PHP5+

raw: 
my1%5B%5D=1&my1%5B%5D=2&my3=3+
$_POST: 
Array
(
    [my1] => Array
        (
            [0] => 1
            [1] => 2
        )

    [my3] => 3 
) 

как и ожидалось. Однако в моей локальной системе с Ubuntu 12.10, Apache 2.2.22, PHP 5.4.6, locale tr_TR.UTF-8, он вернется

raw: 
my1%5B%5D=1&my1%5B%5D=2&my3=3+
$_POST: 
Array
(
    [my3] => 3 
)

где my1-массив исчез. Обратите внимание, что $ _POST ['my3'] все еще существует, и я не испытываю никакой другой проблемы с данными без массива $ _POST, и я все еще вижу, что m1 существует из необработанных данных. Это действительно странное поведение. Что может вообще вызвать эту проблему?

  • 0
    Просто предположение (может потратить лишнюю минуту), почему + идет в конце raw: данных. Можете ли вы удалить пробел из value my3 поля my3 .
Теги:
multidimensional-array
postdata

2 ответа

0

Дикая догадка...

[и] недействительны в javascript-идентификаторах, и они не действительны в атрибутах имени xhtml.

Итак, две идеи:

Один сервер обслуживает xhtml и другой html.

Вы используете разные браузеры, а один более придирчив к атрибутам имени, чем другой.

Я думаю, вы могли бы превратить свои имена полей в my1_0 и my1_1 или аналогичные.

  • 0
    Я также пытался использовать идентичные параметры сервера и клиента (например, с одинаковой версией apache и php против [chrome, firefox]). Мне нужно запустить его как часть работы Prestashop, поэтому я бы не хотел много играть с основным кодом. В противном случае, ряд обходных путей, как в вашем примере, вполне может быть возможным.
0

Можете ли вы попробовать следующее?

$post = file_get_contents("php://input");
parse_str($post , $output);
print_r($output);

Чтобы узнать, передается ли значение PHP

  • 0
    К сожалению, это не так.
  • 0
    Это все еще возвращает Массив ([my3] => 3)
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню