У меня такие проблемы. используя html и php.
Могу ли я знать, как это сделать. У меня есть 2 drop down, например A и B. Сброс B зависит от выпадающего A. Пример: A имеют эти параметры, которые будут вызываться из dbase (без проблем с этим, tq) (Jack, Carol) и B wil имеют опции, зависящие от A: если выбраны Jack (T1, T2, T3), если выбраны карол (T1, T2, T3, T4, T5).
Вот пример интерфейса.
alt text http://img.ruphp.com/php/2vk1fgk.png
Может кто-то помочь мне с этим?
Спасибо.
U нужно работать с Ajax в этом случае. Без обновления страницы. Выбрав любой из столбцов A, вы получите соответствующее значение столбца B. Например
<form method="post" name="form1"> <table border="0" cellpadding="0" cellspacing="0" width="60%"><tbody> <tr> <td width="150">Country</td> <td width="150"><select style="background-color: #ffffa0" name="country" onchange="getState(this.value)"><option>Select Country</option><option value="1">USA</option><option value="2">Canada</option> </select></td> </tr> <tr> <td>State</td> <td> <p id="statediv"> <select style="background-color: #ffffa0" name="state"><option>Select Country First</option> </select></td> </tr> <tr> <td>City</td> <td> <p id="citydiv"> <select style="background-color: #ffffa0" name="city"><option>Select State First</option> </select></td> </tr> </tbody></table> </form>
Как вы можете видеть выше, в событии onChage страны drop down getState () вызывается функция javascript, которая изменяет значения параметров, которые выпадающее состояние State, давайте посмотрим на код функции getState ().
function getState(countryId) { var strURL="findState.php?country="+countryId; var req = getXMLHTTP(); if (req) { req.onreadystatechange = function() { if (req.readyState == 4) { // only if "OK" if (req.status == 200) { document.getElementById('statediv').innerHTML=req.responseText; } else { alert("There was a problem while using XMLHTTP:\n" + req.statusText); } } } req.open("GET", strURL, true); req.send(null); } }
Код файла PHP findState.php, который заполняет параметры в выпадающем состоянии, который извлекается из Ajax, приведен ниже
<? $country=intval($_GET['country']); $link = mysql_connect('localhost', 'root', ''); //changet the configuration in required if (!$link) { die('Could not connect: ' . mysql_error()); } mysql_select_db('db_ajax'); $query="SELECT id,statename FROM state WHERE countryid='$country'"; $result=mysql_query($query); ?> <select name="state" onchange="getCity(<?=$country?>,this.value)"> <option>Select State</option> <? while($row=mysql_fetch_array($result)) { ?> <option value=<?=$row['id']?>><?=$row['statename']?></option> <? } ?> </select>
В выпадающем выше состоянии функция getCity () вызывается в событии onChage с параметром countryId и stateId, теперь давайте посмотрим на код функции getCity ()
function getCity(countryId,stateId) { var strURL="findCity.php?country="+countryId+"&state="+stateId; var req = getXMLHTTP(); if (req) { req.onreadystatechange = function() { if (req.readyState == 4) // only if "OK" { if (req.status == 200) { document.getElementById('citydiv').innerHTML=req.responseText; } else { alert("There was a problem while using XMLHTTP:\n" + req.statusText); } } } req.open("GET", strURL, true); req.send(null); } }
В вышеуказанной функции ajax вызывается findcity.php, и этот файл PHP заполняет выпадающее меню города в соответствии с предоставленными параметрами страны и состояния из метода get. Теперь давайте посмотрим на код findcity.php,
<?php $countryId=intval($_GET['country']); $stateId=intval($_GET['state']); $link = mysql_connect('localhost', 'root', ''); //changet the configuration in required if (!$link) { die('Could not connect: ' . mysql_error()); } mysql_select_db('db_ajax'); $query="SELECT id,city FROM city WHERE countryid='$countryId' AND stateid='$stateId'"; $result=mysql_query($query); ?> <select name="city"> <option>Select City</option> <?php while($row=mysql_fetch_array($result)) { ?> <option value><?=$row['city']?></option> <?php } ?> </select>
И это все, тройной выпадающий список города, страны и штата с использованием Ajax и PHP будет заселен.
Вам понадобится Ajax, привязанный к onClick Drop Down A, который настроен на заполнение внутреннего HTML Drop Down B
Ajax – это «крутая» вещь прямо сейчас, так что все собираются сказать, что используют ajax. Я собираюсь сказать, что вам не нужен ajax. Альтернативой было бы отключить вторую форму. Когда первый выбор отправляется / изменен, страница перезагружает добавление чего-то к querystring, например: a = jack, а второй выбор заполняется правильными значениями.
Теперь любые страницы, ссылающиеся на? A = jack, автоматически заполнят второй выбор, когда с помощью ajax вам придется писать еще больше кода javascript.
Я не говорю, что не использую ajax, я просто даю другую, скорее всего, более легкую альтернативу.
Используйте только ajax, когда он действительно помогает пользователю.
Один способ сделать это, если вы абсолютно не хотите использовать jQuery или javascript:
<form action="?step=2" method="post"> <select name="name"> <option if($_POST['name'] == 'Jack'){echo ' selected="selected" ';}>Jack</option> <optionif($_POST['name'] == 'Carol'){echo ' selected="selected" ';}>Carol</option> </select> <?php if($_GET['step'] == 2){?> <select name="b"> <option>1</option> <option>2</option> <option>3</option> <?php if($_POST['name'] == 'Carol'){?> <option>4</option> <option>5</option> <?php } ?> </select> </form> <?php } ?> <input type="submit" name="next" value="Next" />
Вам придется взломать форму / страницу в шагах. И вся форма должна быть повторно заполнена, поскольку страницы перезагружаются.
Надеюсь, это может помочь вам
Я думаю, что этот учебник объясняет, чего вы пытаетесь достичь: Надежные выпадающие меню с jQuery и PHP