我不是(我确定你会注意到下面)程序员或编码员。我编写网络文档手册。动态填充两个下拉菜单
也就是说,我对HTML,php,css等有些熟悉。但接下来,我完全和完全难倒了:
我正在尝试为我的朋友建立一个网站,该网站处于绑定状态,尽管一切都很顺利,但我必须将最终用户重定向到一个专为他们的社区而建的网页。
我需要的是一种让最终用户点击下拉菜单的方式,该菜单列出(通过MySQL查询)所有可用记录的状态,当它们在第一个菜单中选择一个选项时,第二个菜单通过(再次通过MySQL)填充该州内的社区。
虽然我在互联网搜寻了可能有用的东西,但我发现我的编码逻辑不够完善。但是,我确实发现了一个显示我正在尝试执行的基本版本的网站(see here),但似乎无法使其与MySQL一起工作。这是我到目前为止:
脚本 -
<script>
function swapOptions(ArrayName) {
var ExSelect = document.theForm.sites;
var theArray = eval(ArrayName);
setOptionText(ExSelect, theArray);
}
function setOptionText(theSelect, theArray) {
for (loop = 0; loop < theSelect.options.length; loop++) {
theSelect.options[loop].text = theArray[loop];
}
}
</script>
和HTML -
<form name="theForm">
<select name="chooseCat" onchange="swapOptions(this.options[selectedIndex].text);">
<option value="">Please select your state ...</option>'
<?php
$query = mysql_query("SELECT DISTINCT state FROM sites ORDER BY state")
or die(mysql_error());
while ($result = mysql_fetch_assoc($query)) {
$stateChoice = $result['state'];
echo '<option value="';
echo "$stateChoice";
echo '">';
echo "$stateChoice";
echo '</option>';
echo '<br />';
}
?>
</select>
<select name="sites" style="min-width: 100px;" onchange="location.href='reports.php?page=' + this.options[this.selectedIndex].value;">
<?php
$query = mysql_query("SELECT * FROM sites")
or die(mysql_error());
while ($result = mysql_fetch_assoc($query)) {
echo '<option value="';
echo '">';
echo $result['longname'];
echo '</option>';
echo '<br />';
}
?>
</select>
</form>
这将返回两个下拉菜单。第一个与我的可用状态查询结果,在下拉列表中按字母顺序列出。第二种是列出所有网站的长名称,但是对于表格中的所有网站而言,不仅仅是某个州(刚刚选择的州)内的网站。
最后,下拉列表1应填入所有可用状态。一旦用户选择他们的状态,这应该触发下拉2的人口,并且所有社区都处于他们选择的状态。一旦社会的选择,点击下拉菜单中的2,它应该重定向用户的浏览器,例如,http://www.webpage.com/reports.php?page=communityNameGoesHere ...
非常感谢您的任何意见,你可能有在这里:)
为什么在2次足够的时候使用11次'echo'?你可以使用[concatenation](http://php.net/manual/en/language.operators.string.php)。 – Jocelyn
看起来您必须在选择下拉列表1中的选项时进行ajax调用,或者单独为所有状态预先加载所有可能的社区列表,并在选择第一个下拉列表中的选项时显示/隐藏它们。或者,每次选择一个选项时重新加载整个页面,但你可能不想那么做:) – Mahn
嗨Jocelyn,非常感谢评论。至于重复使用回声,你是绝对正确的。我只在这里拥有它,因为这是一项正在进行的工作,一旦完成,我一定会清理并收紧它。再次感谢:) – spyrule