我有一个网页,其中我有一个表单,其中有几个区域用于输入文本,两个下拉选择选项国家是第一个,并且根据巫国选择,第二个应显示该国家/地区的选择。 我的页面连接到我的数据库,从那里获取国家和地产....我有一个国家名称的表格和每个国家庄园的一个表格。 所以我所要做的就是让它改变状态以便自动选择,因为巫婆国家被选中而没有登顶表单,因为它进入了我的数据库中另一个表的新条目。 我看到使用javascript是要走的路,但是不能让它在我的情况下工作,因为我不想被发送到另一个页面或峰值表单。 这是我的代码的一部分任何帮助将不胜感激。感谢
$paissql = "SELECT * FROM Paises_table";
$paisresult = mysql_query($paissql);
?>
<script language="text/javascript">
function showMe(str)
{
<? $estadosql = "SELECT * FROM ".str."_table";
$estadoresult = mysql_query($estadosql); ?>
}
</script>
<TABLE BORDER="2" CELLPADDING="2" CELLSPACING="2" ALIGN="CENTER">
<form action="<?php echo $_SERVER['PHP_SELF']?>" method=POST>
<TR><th> id </th> <td><?php echo $row_to_edit['id']?></td>
</TR>
<TR><th>Nombre:</th><td><input type="TEXT" name=Nombre value="<?php echo $row_to_edit['Id_Nombre']?>"
SIZE="100"></td></TR>
</td></TR>
<TR><th>Pais:</th><td>
<select name=Pais onchange="showMe(this.value);" >
<?
while($rowp = mysql_fetch_array($paisresult)) {
$pais = $rowp['Name'];
?>
<option value=<?php echo $pais; ?>
<?php if($row_to_edit['Pais']==$pais)
{ echo ' selected="true"';} ?>
><?php echo $pais; ?>
</option>
<?
}
?>
</select></td></TR>
<TR><th>Estado:</th><td>
<select name=Estado >
<?
while($rowe = mysql_fetch_array($estadoresult)) {
$estado = $rowe['Estado'];
?>
<option value=<?php echo $estado; ?> <?php if($row_to_edit['Estado']==$estado)
{ echo ' selected="true"';} ?>
><?php echo $estado; ?></option>
<?
}
?>
<TR><th>Ciudad:</th><td><input type="TEXT" name=Ciudad value="<?php echo $row_to_edit['Ciudad']?>"
SIZE="100"></td></TR>
<TR><th>Website:</th><td><input type="TEXT" name=website value="<?php echo $row_to_edit['website']?>"
SIZE="100"></td></TR>
<TR><td> </td>
<td>
<input type="HIDDEN" name="id" value="<?php echo $edit_id?>">
Para agregar preciona aqui:
<input type="SUBMIT" name="ACTION" value="AGREGAR">
</td>
</TR>
</form>
</TABLE>
<BR>
<BR>
答案 0 :(得分:1)
我希望你知道使用普通PHP进行开发是90年代的事情。我希望您知道使用mysql_*
就像为黑客打开门一样。
您需要的东西称为AJAX和事件绑定。基本上,您观察第一个下拉列表,当其状态发生变化(即用户选择国家/地区)时,您向服务器发送异步请求,检索区域列表该特定国家并重建第二次下拉列表。如果您不需要支持大量的国家/地区,那么在每次请求时下载整个数据库可能是一个很好的权衡:这样您的用户就不必等待ajax调用(将会有一个小而可察觉的延迟),但你会浪费带宽。你可以选择。
关于Javascript部分,您可能希望使用像jQuery这样的库来观察事件和管理AJAX,可能还需要Knockout.js。 Here is a tutorial用于级联下拉列表,即使服务器端的技术是ASP,而不是PHP - 但您对JS部分感兴趣。
我提出了一个涉及PHP,jQuery for AJAX和Knockout的快速解决方案。您不需要完全采用它,有数千种可能的变化。至少,你有一个理解学习内容的起点。
<?php
$countries = array(
"US" => array("Minnesota", "California", "Washington DC"),
"China" => array("安徽", "福建", "江苏"),
"France" => array("Brittany", "Normandy", "Ilé de France"),
"UK" => array("Galles", "Scotland", "England")
);
if (isset($_REQUEST['json'])) {
header("Content-Type: application/json; charset=utf-8");
echo json_encode($countries[$_REQUEST['country']]);
die();
}
?>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<script src="http://github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.js"></script>
<script>
var countries = <?php echo json_encode(array_keys($countries)); ?>;
$(function(){
var Model = function(countries) {
var self = this;
self.countries = ko.observableArray(countries);
self.regions = ko.observableArray([]);
self.getRegions = function() {
$.get("?json", {"country": $("#country").val()}, function(regions){
self.regions(regions);
});
}
}
var Countries = new Model(countries);
ko.applyBindings(Countries);
// Initialize the second dropdown after binding
Countries.getRegions();
});
</script>
<title>Cascade dropdown</title>
</head>
<body>
<form>
<table>
<tr>
<td>Country:</td>
<td>
<select id="country" name="country" data-bind="options: countries,
event: {change: getRegions}">
</select>
</td>
<tr>
<td>Region:</td>
<td>
<select name="region" data-bind="options: regions">
</select>
</td>
</tr>
</table>
</form>
</body>
</html>