Проблема следующая: если action в форме пустой, то данные отлично передаются между селектами, но тогда кнопка submit неудел. Если ставлю action, то при первом же onchange, он submit и выполняет (( Можно ли как то выйти из данной ситуации? Код (Text): <? function is_sel($a, $field) { $b = isset($_POST[$field])?$_POST[$field]:NULL; if($a == $b) return 'selected="selected"'; } ?> <form action="add_street.php" method="post" id="addstreet"> <h2>Добавление улицы</h2> <?php $query = "SELECT * FROM city"; $res = mysql_query($query); ?> <select name="city" onchange="document.getElementById('addstreet').submit()"> <option value="">Выберите город</option> <?php while($row = mysql_fetch_array($res)) echo "<option ".is_sel($row['id_city'],'city')." value='".$row['id_city']."'>".$row['city']."</option>\r\n"; ?> </select> <?php $gorod = isset($_POST['city'])?$_POST['city']:NULL; if($gorod && $gorod !== 0) { $query = "SELECT * FROM area WHERE id_city = '".(int)$_POST['city']."' "; $res = mysql_query($query); ?> <select name="area"> <option value="">Выберите район</option> <?php while($row = mysql_fetch_array($res)) echo "<option ".is_sel($row['id_area'],'area')." value='".$row['id_area']."'>".$row['area']."</option>\r\n"; echo "</select>"; } ?> <input type="text" name="street"> <input type="submit value="запись"> </form>
Естественно, что отправляет, у тебя же там на onchange навешен обработчик Код (Text): document.getElementById('addstreet').submit() А элемент с id="addstreet" - и есть твоя форма. Ты же сам говоришь ему "отправь форму, когда select будет изменён". Повесь туда другой обработчик (какую-нибудь JS-функцию, которая будет делать нужную работу) - и не будет форма отправляться, а будет выполняться та функция.
ок, я попробовал получить значение, получилось. Код (Text): function fuu() { $new_name = document.getElementById("city").value; document.write($new_name); } .... Код (Text): <select name="city" id="city" onchange="fuu()"> <option value="">Выберите город</option> <?php while($row = mysql_fetch_array($res)) echo "<option ".is_sel($row['id_city'],'city')." value='".$row['id_city']."'>".$row['city']."</option>\r\n"; ?> </select> Но никак не могу понять, как значение передать в следующий селект? Код (Text): $query = "SELECT * FROM area WHERE id_city = '".(int)$_POST['city']."' "; $res = mysql_query($query); ?> <select name="area" id="area"> <option value="">Выберите район</option> <?php while($row = mysql_fetch_array($res)) echo "<option ".is_sel($row['id_area'],'area')." value='".$row['id_area']."'>".$row['area']."</option>\r\n"; echo "</select>"; } ай нид хелп )
Ну а что значит "передать в следующий селект"? Как ты это понимаешь? Что должно произойти на страничке?
в первом селекте, функцией (в моем примере fuu() ) берется значение выбранного option'а. при выборке во второй селект, каким-то образом учитывается значение из первого, и запрос аля ...WHERE id_city =(будет вставлять сюда нужную циферку) )) Ну вот так я вижу, мягко говоря схематично. не пойму куда смотреть надо ... пробовал так (тут у меня тоже ошибки вроде): index.php Код (Text): <?php require 'config.php';?> <form action="add_street" method="post" id="addstreet"> <h2>форма добавления</h2> <?php $query = "SELECT * FROM city"; $res = mysql_query($query); var_dump($query); ?> <select id ="city" name="city"> <option value="" selected="selected">выберите город</option> <?php while($row = mysql_fetch_array($res)) { echo "<option value='".$row['id_city']."'>".$row['city']."</option>\r\n"; } ?> </select> <span id="area_select"></span> <input type="text" name="street" /> <input type="submit" value="добавить" /> </form> <script type="text/javascript" src="jquery-1.7.2.min.js"></script> <script type="text/javascript" src="newjavascript.js"></script> newjavascript.js Код (Text): $('#city').change ( function(){ $('#area_select').load('get_area.php?city='+$('#city').val()) }) get_area.php Код (Text): <?php $gorod = isset($_GET['city'])?$_GET['city']:NULL; if($gorod) { $query = "SELECT * FROM area WHERE id_city = '".(int)$gorod."' "; $res = mysql_query($query); var_dump($query); ?> <select id ="area" name="area"> <option value="">Выберите область</option> <?php while($row = mysql_fetch_array($res)) {echo "<option value='".$row['id_area']."'>".$row['area']."</option>\r\n";} } ?> </select> Но мне заранее этот вариант не нравится. Получается, если у меня будет около 10-15 селектов, на каждый создавать php файл, как-то загонно
Код (Text): <script> function getXMLHTTP() { var xmlhttp=false; try{ xmlhttp=new XMLHttpRequest(); } catch(e) { try{ xmlhttp= new ActiveXObject("Microsoft.XMLHTTP"); } catch(e){ try{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e1){ xmlhttp=false; } } } return xmlhttp; } function getArea(strURL) { var req = getXMLHTTP(); if (req) { req.onreadystatechange = function() { if (req.readyState == 4) { if (req.status == 200) { document.getElementById('areadiv').innerHTML=req.responseText; } else { alert("There was a problem while using XMLHTTP:\n" + req.statusText); } } } req.open("GET", strURL, true); req.send(null); } } </script> <form method="post" action="add_script.php" name="form1"> <table width="60%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="150">City</td> <td width="150"><select name="city" onChange="getArea('find_area.php?city='+this.value)"> <option value="">Select City</option> <option value="1">vrn</option> <option value="2">lip</option> </select></td> </tr> <tr style=""> <td>area</td> <td ><div id="areadiv"><select name="area"> <option>Select area</option> </select></div></td> </tr> </table> </form> findarea.php Код (Text): <? $city=$_REQUEST['city']; require 'config.php'; $query="select area from area where id_city=$city"; $result=mysql_query($query); ?> <select name="area"> <option>Select area</option> <? while($row=mysql_fetch_array($result)) { ?> <option value><?=$row['area']?></option> <? } ?> </select> так как стянул код, есть вопрос. function getXMLHTTP() - как правильно объяснить назначение этой функции? Добавлено спустя 39 минут 16 секунд: пытаюсь добавить третий селект, find_street.php: Код (Text): <? $city=$_REQUEST['city']; $area=$_REQUEST['area']; require 'config.php'; $query="select street from street where id_city=$city and id_area=$area"; $result=mysql_query($query); ?> <select name="street"> <option>Select street</option> <? while($row=mysql_fetch_array($result)) { ?> <option value><?=$row['street']?></option> <? } ?> </select> только в index.php, Код (Text): <div id="areadiv"><select name="area" onChange="getStreet('find_street.php?city='+this.value&area='+this.value)"> this.value не прокатит два раза ((, добавил функцию: Код (Text): function getStreet(strURL) { var req = getXMLHTTP(); if (req) { req.onreadystatechange = function() { if (req.readyState == 4) { if (req.status == 200) { document.getElementById('streetdiv').innerHTML=req.responseText; } else { alert("There was a problem while using XMLHTTP:\n" + req.statusText); } } } req.open("GET", strURL, true); req.send(null); } } куда смотреть, поскажите? Ура!! решил задачу, все спасибо )