Динамические select'ы не передают значения на сервер

Igor2001

Новичок
Динамические select'ы не передают значения на сервер

Есть форма с динамическими селектами, при заполнении и отправке на сервер, значения из динамических селектов не передаются, со статического всё нормально. Проблема наблюдается в MSIE 6, Opera 9.64, FF 3.0, в других не проверялось. Подскажите где чего не хватает для нормальной работоспособности?

Вот форма с динамическими селектами.

код php-скрипта, куда передаются данные:
PHP:
<?php

$FIELDS = ($REQUEST_METHOD == 'POST') ? $HTTP_POST_VARS : $HTTP_GET_VARS;

foreach ($FIELDS as $key=>$value){
	$$key = $value;
	}

header("Content-Type: text/html; charset=WINDOWS-1251");
header("Cache-Control: no-cache");

print "Вывод выбранных марок авто и года выпуска: \n<BR>";

if(isset($category_parent) && isset($year_id_from)){
	foreach ($category_parent as $key => $value){
		print $category_parent[$key] . ' => ' . $year_id_from[$key] . "\n<BR>";
		}
	}

?>
 

Igor2001

Новичок
Автор оригинала: iceman
name="category_parent[]"
сейчас попробовал писать name="category_parent[]" и в явовском скрипте изменить на selectParent.name = "category_parent[]", но ничего не изменилось, кроме того, если создать руками несколько полей, и каждое пронумеровать name="category_parent[0]", name="category_parent[1]", name="category_parent[2]" и т.д., тогда значения нормально передаются.
 

Igor2001

Новичок
Автор оригинала: cDLEON
PHP3 используем? :)
5.2.6

даже при включенном register_global, или если писать $_SERVER["REQUEST_METHOD"] результат один и тот же. Я же выше написал, что если сделать статическую форму, то значения передаются нормально, а с динамической такой вот глюк. Тут с явовским скриптом какая-то загвоздка.
 

cDLEON

Онанист РНРСlub
$HTTP_POST_VARS : $HTTP_GET_VARS;
Так какого хрена вы используете переменные, которые уже давно депрекейтед?
По поводу всего остольного - пока не выполните совет iceman
не поверю. (var_dump...)
 

Igor2001

Новичок
Автор оригинала: iceman
var_dump($_POST);
не в этом дело, я же раньше писал, что если сделать статическую форму на несколько полей, тогда всё нормально передаётся, а с динамическими селектами такая ерунда получается. Тут вероятнее всего подвох где-то в явовском скрипте.

Автор оригинала: cDLEON
Так какого хрена вы используете переменные, которые уже давно депрекейтед?
По поводу всего остольного - пока не выполните совет iceman
не поверю. (var_dump...)
не буду же я постить сюда весь проект, это лишь маленький фрагмент доработки старого проекта, и настройки php-сделаны нужным образом, чтоб это работало.
Верить не надо, можете себе на локальный компьютер положить форму и скрипт, в форме подправить атрибут "action" и посмотреть что будет.

Для убедительности подправил php-скрипт:
PHP:
<?php

$FIELDS = ($_SERVER["REQUEST_METHOD"] == 'POST') ? $_POST : $_GET;

foreach ($FIELDS as $key=>$value){
	$$key = $value;
	}

header("Content-Type: text/html; charset=WINDOWS-1251");
header("Cache-Control: no-cache");

print "Вывод выбранных марок авто и года выпуска:\n<BR>";

if(isset($category_parent) && isset($year_id_from)){
	foreach ($category_parent as $key => $value){
		print $category_parent[$key] . ' => ' . $year_id_from[$key] . "\n<BR>";
		}
	}

print "<BR>\n\n var_dump(\$_POST):<BR>\n";
var_dump($_POST); 

print "<BR>\n\n var_dump(\$HTTP_POST_VARS):<BR>\n";
var_dump($HTTP_POST_VARS); 

?>
 

Adelf

Administrator
Команда форума
Поменяй местами теги table и form. И на будущее - form - это полноценный контейнер и он не должен быть начат внутри другого тега, а закрыт вне его.

<FORM action="form_preadd.php" method=post name="add_form">
<TABLE border=0 width="80%">
 

Igor2001

Новичок
Автор оригинала: Adelf
Поменяй местами теги table и form. И на будущее - form - это полноценный контейнер и он не должен быть начат внутри другого тега, а закрыт вне его.

<FORM action="form_preadd.php" method=post name="add_form">
<TABLE border=0 width="80%">
Спасибо, частично помогло, теперь в FF 3.5 и Opera 9.64 заработало, а вот в MSIE 6.0 не хочет.

P.S. в первом посте немного в заблуждение ввёл, там был FF 2.0, а не 3.0, виноват:(
 

Adelf

Administrator
Команда форума
Надо jQuery например юзать. Оно дает не только удобство, но и кроссбраузерность очень во многих случаях.
 

dimagolov

Новичок
Adelf, не неси ерунду. ни при каких раскладах для получения значений формы JS не нужен. все что нужно, так это изучить HTML
PHP:
foreach ($FIELDS as $key=>$value){
    $$key = $value;
    }
никогда такого бреда не пишите. Это ведь позволяет запросом поменять любые переменные, включая суперглобалы
Igor2001, сделай var_dump($_POST) и посмотри что и как пепредается. Учти, что пустые значения могут не передаваться и рвать индексы массива.
 

Adelf

Administrator
Команда форума
dimagolov, тебе не кажется странным, что в каких-то браузерах работает, а в каких-то нет. И ты считаешь, что проблема по прежнему в PHP?
 

dimagolov

Новичок
Adelf, ну автор приводит только код PHP, который полное гавно. очевидно, что отвечать можно только по нему.

то, что в одних браузерах работает, а в других нет, это говорит только о кривости его html и JS-а, которым он что-то добавляет в форму. но даже для отладки этого надо смотреть var_dump($_POST) на сервере.
п.с. из неспособности написать косбраузерный JS добавления элементов в форму никоим образом не следует необходимость юзать jQuery. Неспособность никуда не денется, появится возможность писать на JS не зная даже синтаксиса JS.
 

Adelf

Administrator
Команда форума
Ну сделал же он var_dump($_POST);
Результаты совпадают с var_dump($HTTP_POST_VARS);

Неспособность никуда не денется, появится возможность писать на JS не зная даже синтаксиса JS.
Синтаксис то тут причем? :) Просто кроссбраузерность - это та еще морока. Тут специфичности всякие знать надо. Я, например, многие специфичности забыл уже давно и мне это не мешает.
 

Фанат

oncle terrible
Команда форума
мне кажется, надо убрать вообще яваскрипт, сделать селекты не динамические и научиться принимать информацию с них.
и только после этого переходить к динамике.

и зуб даю на отсечение, что аффтар не увидит замечание про дебильное foreach $FIELDS
 

dimagolov

Новичок
и зуб даю на отсечение, что аффтар не увидит замечание про дебильное foreach $FIELDS
100%, у него же есть такие офигительные советчики как Adelf, типа поставь jQuery и не думай о том, в чем проблема.
 

Adelf

Administrator
Команда форума
Ну разумеется гораздо важнее объяснить человеку про проблемы безопасности в его скрипте, чем помочь решить совсем другую проблему.
 

tf

крылья рулят
Есть форма с динамическими селектами, при заполнении и отправке на сервер
значения из динамических селектов не передаются, со статического всё нормально.
забудем о кривости всего остального кода, А в чем разница?
имхо автору тут поможет только он сам
http://74.125.77.132/search?q=cache:vZX_TVmsBhUJ:www.phpfaq.ru/debug+phpfaq.ru/debug#debug
читаем всю статью внимательно и ищем свои синтаксические, логические ошибки

-~{}~ 24.08.09 01:10:

чем помочь решить совсем другую проблему.
и оставить зарез для совершения других ошибок, в чем смысл?

-~{}~ 24.08.09 01:20:

типа поставь jQuery и не думай о том, в чем проблема.
когда я увольнялся с одной работы, сказал им, поставте битрикс (я думал что послал человека куда подальше, ибо жесть на основе какой библотеки мы работали) и шеф прислушался к мнению специалиста... теперь работают на тех трех системах, что я перечислил
 

Adelf

Administrator
Команда форума
и оставить зарез для совершения других ошибок, в чем смысл?
т.е. гораздо правильней при мелкой ошибке человека начать искать изъяны у него везде, научить безопасному написанию скриптов, правильному ООП с шаблонами проектирования, указать как можно в разы увеличить производительность его мелкого, в общем скрипта. Все это гораздо важнее чем решение этой мелкой проблемы? Вполне можно указать на это, но так.. в сторону, вне контекста данной проблемы.
Что же мы видим тут: Фонат не читая особо автора пишет, что надо попробовать статические(причем во второй строке первого поста автор говорит что статическими он уже пробовал и все отправляется), а также дежурный стеб над ТСом про его замену register_globals.
dimagolov, "но даже для отладки этого надо смотреть var_dump($_POST) на сервере.", притом, что автор уже давно сделал этот самый var_dump($_POST); Не читая автора советуют чтото, считают самым необходимым отучить человека от всяких "foreach $FIELDS" ни на дюйм не приближая человека к решению проблемы.
И разумеется, самый плохой советчик конечно я.

З.Ы. и tf туда же :) НЕ В PHP ПРОБЛЕМА. НЕ надо дебажить php.

Adelf, ну автор приводит только код PHP, который полное гавно. очевидно, что отвечать можно только по нему.
ссылку на форму конечно же никто не видел http://www.art-storm.com/test/form_preadd.html .
Нормально работает в Опере, Firefox, Chrome. IE7 почемуто отправляет только первые параметры. Искать надо тут.
 
Сверху