При передаче формы напрямую скрипту - всё работает замечательно.
Если передавать через аякс все массивы регистрируются в $_POST не как массив а как переменная с именем массива. Как поправить ? Более подробное описание ниже.
Типа
<input name="attachment[0][0][type]" value="music">
При непосредственной стандартной передаче они регистрируются как
$_POST[attachment][0][0][type] = 'music';
При подкличении AJAX передатчика форм все значения формируются в одну переменную вида:
description__:__Описание текущего опроса|element_id__:__|element_type__:__news|can_vote_all__:__1|answers_max__:__|answers_alternative_ max__:__|undefined__:__|answer_0__:__|answer_1__:__|undefined__:__photo|undefined__:__1|attachment[0][0]['link']__:__http://php.net/manual/ru/function.strstr.php|attachment[0][0]['type']__:__photo|attachment[1][1]['link']__:__http://php.net/manual/ru/function.strstr.p hp|attachment[1][1]['type']__:__photo|poll_add__:__go|
Затем PHP обработчик разбивает данную переменную и опять загоняет в массив $_POST
<?php
// обработчик ajax формы
class formajax
{
function __construct()
{
if(isset($_POST['formdata']))
{
$formdata = explode('|',$_POST['formdata']);
unset($_POST['formdata']);
foreach($formdata as $data)
{
// echo $data.'<br />';
if(!empty($data))
{
$value = explode('__:__',$data);
// определяем является ли переменная массивом
$_POST[$value[0]] = $value[1];
// $_POST[] = array($value[0] => $value[1]);
}
}
}
}
}
?>
Проблема в том что массивы затем регистрируются как
$_POST[attachment[0][0][type]] = 'link';
print_r выдаёт их как:
[attachment[0][0]['link']] => http://www.youtube.com/watch?v=5pZynYe0r-g
[attachment[0][0]['type']] => photo
т.е. не как массив а просто как переменную с именем attachment[0][0]['link'].
Как лечить ? Спасибо
Спустя 1 минута, 41 секунда (21.05.2012 - 09:31) alexbel2404 написал(а):
а зачем обратно в post пихать то? что за бред?
Спустя 57 минут, 18 секунд (21.05.2012 - 10:28) SlavaFr написал(а):
я бы начинал с javascript лечение, да так, чтоб через аякс нормальный JSON обект передовался.
Спустя 13 часов, 39 минут, 48 секунд (22.05.2012 - 00:08) BlackCat написал(а):
а, т.е. передавать json, а потом декодировать ?
А POST - чтобы не менять логику приложения изначальную....
А POST - чтобы не менять логику приложения изначальную....
Спустя 11 часов, 12 минут, 7 секунд (22.05.2012 - 11:20) SlavaFr написал(а):
Спустя 21 минута, 53 секунды (22.05.2012 - 11:42) BlackCat написал(а):
Я был бы благодарен за совет как починить текущий скрипт и научить его преоборазовывать переменные содержащие [] в массивы ?
Спустя 1 час, 13 минут, 58 секунд (22.05.2012 - 12:56) BlackCat написал(а):
Есть ли красивое решение которое позволит создать многоуровневый массив из
строки "attachment[1][1][type]" ?
строки "attachment[1][1][type]" ?