|
|
|
| есть форма c двумя combox, первый заполняется названиями стран (из базы MySQL), а второй - названиями курортов (тоже из базы MySQL), соответствующих выбранной стране. Не могу реализовать связку: combobox(страны)->выбор страны->заполнение combobox(курорты).
cheops, подсказал, что можно это реализовать на JavaScript "Обычно поступают так, вытаскивают из базы данных первый список и вторые списки для каждого варианта из первого списка - всё средствами JavaScript скрывают и отображают только один вариант, при выборе друго значения опять всё скрывают и отображают нужный". Как добиться этого эффекта? Друзья, подскажите!!! | |
|
|
|
|
|
|
|
для: Михаил
(02.05.2005 в 10:52)
| | создаете такие таблицы для стран и курортов. это минимальные требования. если вам нужны другие данные, конечно, можете добавлять
#
# Table structure for table 'kurort'
#
CREATE TABLE 'kurort' (
'kurort_id' int(11) NOT NULL default '0',
'kurort_name' char(100) NOT NULL default '',
'country_id' int(11) NOT NULL default '0',
PRIMARY KEY ('kurort_id')
) TYPE=MyISAM;
#
# Dumping data for table 'kurort'
#
INSERT INTO kurort VALUES("1","Co4u","1");
INSERT INTO kurort VALUES("2","Loutraki","2");
#
# Table structure for table 'strana'
#
CREATE TABLE 'strana' (
'country_id' int(11) NOT NULL default '0',
'country_name' char(50) NOT NULL default '',
PRIMARY KEY ('country_id')
) TYPE=MyISAM;
#
# Dumping data for table 'strana'
#
INSERT INTO strana VALUES("1","Russia");
INSERT INTO strana VALUES("2","Greece");
|
а вот сам скрипт:
<?php
require ("dbconnect.inc.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Combo-box</title>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1253">
</head>
<body>
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
nomoactive="-1";
function nomochange()
{a=document.getElementById("country").options[document.getElementById("country").selectedIndex].value;
if (nomoactive!="-1") document.getElementById("kur_"+nomoactive).style.display="none";
if (a!="-1") document.getElementById("kur_"+a).style.display="inline";
nomoactive=a;
}
//-->
</SCRIPT>
<TR>
<TD valign=top class=ff_name ><NOBR>CTPAHA/KypopT </NOBR></TD>
<TD class=ff_name ><SELECT name=country id=country onchange="nomochange()">
<OPTION value="-1">BbI6epuTe cTpaHy
<? $SQL="SELECT * FROM strana ORDER BY country_name;";
$rs_nomo=mysql_query($SQL);
while ($rs_nomo && $row_nomo=mysql_fetch_assoc($rs_nomo))
{
print "<OPTION value=".$row_nomo["country_id"].">".$row_nomo["country_name"];
}
?>
</SELECT>
<? $SQL="SELECT * FROM kurort ORDER BY kurort_id, kurort_name;";
$rs_dimo=mysql_query($SQL);
$prev_kur="";
while ($rs_dimo && $row_dimo=mysql_fetch_assoc($rs_dimo))
{
$now_kur=$row_dimo["kurort_id"];
if ($now_kur!=$prev_kur)
{
if ($prev_kur!="") print "</SELECT>";
print "<SELECT name=kur_".$now_kur." id=kur_".$now_kur." style=\"display: none;\">";
print "<OPTION value=\"-1\">BbI6epuTe KypopT";
$prev_kur=$now_kur;
}
print "<OPTION value=".$row_dimo["kurort_id"].">".$row_dimo["kurort_name"];
}
print "</SELECT>";
?></TD>
</TR>
</body>
</html>
|
надеюсь, там все понятно. я его подсократила немного. проверила - работает.
если что - спрашивайте. пример - по ссылке | |
|
|
|
|
|
|
|
для: elenaki
(02.05.2005 в 12:04)
| | Большущая благодарность, спасибо. Весь инет перелазил но ничего не нашел. Твой совет и пример помог. Ух, все получилось. Но теперь возник вопрос при отсылке серверу (php обработчику) данных. Передается строчка типа kur_1=-1$kur_2=-1$kur_9=9 и т.п(в зависимости от количества курортов страны). Как это обработать на стороне сервера и вытащить нужный kur ? | |
|
|
|
|
|
|
|
для: Михаил
(02.05.2005 в 18:43)
| | может, разделить их сплином по символу &, они попадут в массив парами параметр=значение, потом разбить эти пары, присваивая параметру конкретный номер (вместо kur_что-то получится 0,1,2,...), а потом выбрать те, у которых значение не равно -1.
я это не проверяла. надо еще подумать. | |
|
|
|