0

我在我的项目中使用 HTML 和 PHP,但我有一个问题:

我有一个包含国家/地区的下拉列表,当用户选择一个国家/地区时,我希望另一个下拉列表与(该国家/地区的城市)一起出现

我有国家数据库和城市数据库(sql)

我尝试使用 java 脚本方法来做到这一点,但它没有用

这是我的代码

首先:这是国家下拉列表,它很好用:

<select name="SelectCountry"  id="SelectCountry" onchange="showCity()" >
            <?php 
            $Con= mysql_connect("localhost","root",""); 
if(!$Con) { die('Could not connect'.mysql_error());}
if(!mysql_selectdb("MyDB",$Con)){die(mysql_error());}
$sql = "SELECT *  FROM countries";
$result = mysql_query($sql) or die(mysql_error());
while($row=mysql_fetch_array($result)){
       echo ("<option value=\"".$row['CountryID']."\">".$row['Name']."</option>");

}
mysql_close($Con);

其次,这是 java 脚本函数 showCity() //没有任何工作!

<script>
             function showCity()
{

alert("in the function !!");  

Document.write(" <?php echo "<select 'SelectCity' ,'SelectCity'";
            echo "</select>";
            $theCountry=$_GET['SelectCountry'];  // get the country ID
            $Con= mysql_connect("localhost","root",""); 
if(!$Con) { die('Could not connect'.mysql_error());}
if(!mysql_selectdb("MyDB",$Con)){die(mysql_error());}
$sql = "SELECT * FROM cities WHERE  cities.Fips=(SELECT Fips FROM countries WHERE CountryID='$theCountry')"; // retrive the cities for the spicific country (work when I enter the ID manully in the sql query e.g CountryID='43')

$result = mysql_query($sql) or die(mysql_error());
while($row=mysql_fetch_array($result)){
       echo ("<option value=\"".$row['Fips']."\">".$row['Fullname']."</option>"); // print all the cities in a menu (work when I enter the ID manully in the sql query e.g CountryID='43') 
}
mysql_close($Con);
             ");"; ?> ");
}
</script>

此方法是在用户使用Onchange事件更改国家/地区时为特定国家/地区城市创建一个新的下拉列表

我希望你能帮助我

如果有任何问题或误解,我准备回答或解释

一切都好:)

4

3 回答 3

1

这不起作用,因为 $_GET['SelectCountry'] 总是为空。您对客户端和服务器端脚本之间的区别感到困惑。首次加载页面后,还没有 GET 变量,因此您的 Javascript 位于没有城市的浏览器上。更改国家不会使 getCity() 返回服务器。它只是看它已经拥有的东西,这没什么。您需要一个 AJAX 函数,它负责向服务器发送 GET 请求并返回结果。一旦它获得城市列表,它就会想知道你希望它对那个列表做什么。你给它一个从它们中下拉的函数。这称为回调。那里有很多教程告诉您如何制作 AJAX 函数以及将回调放在哪里。

于 2012-04-05T23:04:22.013 回答
1

对于您的经验水平,如果您通过 onchange 所做的只是提交表单,那可能是最好的:

<select name="SelectCountry"  id="SelectCountry" onchange="this.form.submit();" >

这相当于选择国家后按下提交按钮。(顺便说一句,您的摘录中缺少</select>,尽管我希望您只是没有在此处复制。)

然后在 PHP 中有类似...(请注意,此代码位需要在下拉框之前,以便当您想要回显它时变量就在那里)

if ( isset($_GET['SelectCountry']) )
{
    $country = $_GET['SelectCountry'];
    $citySelect = "<select name='SelectCity'>";
    //query DB for cities of that country
    ...
    //now add the options from the query just like you did for the countries, except now use the cities
    ...
    $citySelect .= "</select>";
}
else
{
    $citySelect = ""; //to make sure the variable isn't undefined
}

现在您可以在 CountrySelect 下方添加:

<? echo $citySelect; ?>

如果之前选择了一个国家,则会显示城市菜单。

请注意,这甚至不包括最低级别的安全性、防呆功能,而且让大型表单像这样工作可能非常复杂。

于 2012-04-05T22:52:07.753 回答
1

$_GET['SelectCountry'] 仅当您在表单标签中有选择并单击提交按钮重新加载页面时才有效(这会创建 $_GET 变量。一个简单的方法是将国家添加到您的地址 URL,这也会给你一个 $_GET 。

所以在 showCity() 函数中,这样写:

 var i = document.getElementById("SelectCountry").selectedIndex;
 var countryValue = document.getElementById("SelectCountry").options[i].text;
 window.location.href = '/?SelectCountry='+countryValue;

这会将您的网页重定向到 mysite.com/?SelectCountry=USA 或类似的东西。然后你的代码就可以工作了。这不是最好的方法,但它应该会给你一些结果。

于 2012-04-05T23:00:05.180 回答