вопрос по зависимым спискам и ajax

romik

Новичок
вопрос по зависимым спискам и ajax

у меня есть 2 списка в форме и кнопка submit. при изменении значения 1-го списка меняется содержимое 2-го. При нажатии на кнопку отправляется информация, но выбранного значения из 2-го списка не видно в $_Post. Подскажите пожалуйста, как решить эту проблему.

код:
1)просто страница со списками и кнопкой
PHP:
echo "<html><head></head> \n";
echo "<script language=JavaScript> \n";	
echo "var xmlhttp = false; \n" ;
echo "try { xmlhttp = new ActiveXObject('Msxml2.XMLHTTP') \n";	
echo " } \n";
echo "catch (e) { \n"; 
echo "	try { xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); \n";
echo "	} \n";
echo "	catch (e2) { \n";
echo "	xmlhttp = false; \n";
echo "	} \n";
echo "} \n";
echo "if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { xmlhttp = new XMLHttpRequest(); } \n";
	
echo "function makeselect(v) { \n";	
	var val = document.getElementById('sel_type').value; break; \n";	
	echo "var serverPage = 'makeselect1.php?v=' + val+'&vib='+v; \n";     	
	var obj = document.getElementById('d2'); break; \n";	
	echo "xmlhttp.open('GET', serverPage); \n";
	echo "xmlhttp.onreadystatechange = function() { \n";
	echo "  if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {  \n";		
	echo "    obj.innerHTML = xmlhttp.responseText;  \n";
	echo "  } \n";
	echo " } \n";
	echo "xmlhttp.send(null); \n";
echo "} \n";
echo "</script> \n";	
	
echo "<BODY>\n";
echo "<form name='zagruz' enctype='multipart/form-data' action='parse.php' method='post'>\n";	
    $db_conn = ocilogon("system", "manager", "vc");	

   //пошла выборка данных 1-го selecta
    $cmdstr = "select i_gid_type, c_name_type from type order by c_name_type";
    $parsed = ociparse($db_conn, $cmdstr);
    ociexecute($parsed);
    $nrows = ocifetchstatement($parsed, $results);		
    echo "<select id='sel_type' name='sel_type1' onchange='makeselect(1)'> \n";
    for ($i = 0; $i < $nrows; $i++ )
    {
      echo "<option value='" . $results["I_GID_TYPE"][$i] . "'>". $results["C_NAME_TYPE"][$i] . " \n";      
    }
    echo"</select><br>\n";

   //подчиненная выборка 2-го selecta
    $cmdstr = "select i_gid_specification, c_name_specification from specification order by c_name_specification";
    $parsed = ociparse($db_conn, $cmdstr);
    ociexecute($parsed);
    $nrows = ocifetchstatement($parsed, $results);	
    echo "<div id='d2'><select id='sel_specification' name='sel_spec'>\n";
    for ($i = 0; $i < $nrows; $i++ )
    {
      echo "<option>". $results["C_NAME_SPECIFICATION"][$i] . " \n";      
    }
    echo "</select></div>\n";
    echo "</form>\n";
    echo "</body>\n";
    echo "</html>\n";
2)php-код выбора подчиненного selecta (файл makeselect1.php)
PHP:
header("Content-type: text/html; charset=windows-1251"); 
$v = $_REQUEST["v"];
$db_conn1 = ocilogon("system", "manager", "vc");
$cmdstr = "select i_gid_specification, c_name_specification from specification where i_code_type=" . 	$v . "order by c_name_specification"; 
$parsed = ociparse($db_conn1, $cmdstr);
ociexecute($parsed);		
$nrows = ocifetchstatement($parsed, $results);
echo "<select id='selv'>";
for ($i = 0; $i < $nrows; $i++ )
{	
   echo "<option value='" . $results["I_GID_SPECIFICATION"][$i] . "'>" . $results["C_NAME_SPECIFICATION"][$i] . "</option> \n";					
}
echo "</select>"
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Трудно читать html и javascript смешанные с php, большинство от этого уже отвыкло и разбираться с вопросом не хочется.
Лучше разделить вопрос на два - по ajax и по php и привести разные цитаты кода.
А может, лучше сначала изучить php, html, шаблонизаторы, средства отладки, а потом браться за ajax?
 

romik

Новичок
grigori
разделить вопрос на 2 - не получится. без ajax форма стандартно передает значения и я их беру из $_post.
 

Crazy

Developer
romik, не приходила в голову мысль вместо этих безумных echo просто вывести содержимое текстового файла?
 

romik

Новичок
Crazy
Дело в том, что я с БД работаю на фоксе, php не так давно стал изучать - поставили задачу, я ее реализую. Так что если где коряво - сори )

-~{}~ 01.06.07 00:38:

Возился я возился и сформировалось 2 основных вопроса:
1)пусть есть форма и в ней 2 selecta. по onchange 1-го во 2-й добавляется запись
var obj=document.getelementById("yyy");
var len = obj.options.length;
obj.options[len] = new Option('rrrr', '55');
Потом я жму кнопку submit и в $_POST не вижу $_POST('yyy')
Почему?

2)как ajax передает xml?
я делаю так:
<script>
var xmlhttp = false;
try { xmlhttp = new ActiveXObject('Msxml2.XMLHTTP')
}
catch (e) {
try {
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
catch (e2) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}
function makeselect(v) {
var serverPage = 'makeselect1.php?v=' + val+'&vib='+v; //php-скрипт обработчика
xmlhttp.open('GET', serverPage, true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var responseTxt1 = xmlhttp.responseText; //пробую оба варианта
var responseXml1 = xmlhttp.responseXML;
var root_node = responseXml1.getElementsByTagName('root');
alert(responseTxt1); //выдает <?xml version='1.0' standalone='yes'?><root>100</root>
alert(responseXml1); //выдает [Object]

var xmlDoc=new ActiveXObject('Microsoft.XMLDOM');
xmlDoc.async = false;
xmlDoc.loadXML(responseTxt1);
var Rez1 = xmlDoc.getElementsByTagName('root');
alert(Rez1.length); //выдает 1
alert(Rez1.text); //выдает Undefined
}
}
xmlhttp.send(null);
}
</script>

файл makeselect1.php:
<?php
header("Content-type: text/html; charset=windows-1251");
header('Content-type: text/xml'); //Для формата xml
$v = $_REQUEST["v"];
$vib=$_REQUEST["vib"];
//здесь выбирается информация для подчиненных списков, но пока для пробы я его закоментил и пытался слать xml
$resp1="<?xml version='1.0' standalone='yes'?> \n" . "<root> \n". "100 \n" . "</root>";
echo $resp1;
?>

-~{}~ 01.06.07 01:31:

Прикол! по 1-му вопросу такая хитрость: если делать селект так: <select name='hhh[]'>...</select>, то в $_POST садится автомассив с value выбранного option
 

BRat

o_0
2)
header('Content-type: application/xml;charset=utf-8');
и все данные в utf-8 (перекодируй через iconv например)

иначе IE плеваться будет
 
Сверху