【发布时间】:2014-02-13 11:47:50
【问题描述】:
我需要一些认真的帮助或建议,我已经花费了无数时间来研究和发现空虚的东西。
我有一个项目,我需要使用 PHP 从 MDB 数据库中提取数据。 我已经成功连接到数据库,我可以查询数据库并将结果显示在表格中,甚至可以使用文本输入搜索数据库。
我的客户想要具有多个下拉菜单的高级搜索功能。这些下拉列表正在从数据库中获取值。这一切都还好。我可以从数据库中填充下拉列表。
该数据库是一个车辆数据库(ID、库存编号、品牌、型号、年份、价格、功能等)。不幸的是,所有车辆数据都在一个表中。例如,数据库中有四辆阿斯顿马丁汽车,每辆都有自己的 ID 和型号。
我知道最好至少有两个单独的表:品牌和型号。但是数据库是由第三方应用程序生成的,它将数据库的副本保存到服务器上,这就是我连接的那个。
问题是:使用 PHP 和 AJAX,从同一个表中绘制数据时是否可以有级联下拉菜单?例如,如果我从 Make 选项中选择了 ASTON MARTIN,第二个下拉菜单将只显示与 ASTON MARTIN 相关的模型?
请参阅下面的尝试尝试...此脚本成功地将数据库中的 Make 列加载到第一个下拉列表中,并将数据库中的 Modal 列成功加载到第二个下拉列表中,但它们没有链接。就目前而言,第一个选项是ASTON MARTIN,它对应的型号是CORSA(完全不正确)。
<script type="text/javascript">
function loadXMLDoc() {
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.frm.modelSelection.innerHTML=xmlhttp.responseText;
}
}
var makevalue=document.frm.makeSelection.value;
xmlhttp.open("GET","?ajaxmake="+makevalue,true);
xmlhttp.send();
}
</script>
<?php
$dbName = "C:/xampp/htdocs/new/db/savvyautoweb.mdb";
// Throws an error if the database cannot be found
if (!file_exists($dbName)) {
die("Could not find database file.");
}
// Connects to the database
// Assumes there is no username or password
$conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", '', '');
?>
<form action="" method="post" name="frm">
<select name="makeSelection" onchange="loadXMLDoc()">
<?php
$resultMake = odbc_exec($conn, "SELECT Make FROM Vehicle ORDER BY Make") or die (odbc_errormsg());
while ($rowMake = odbc_fetch_array($resultMake)) {
echo "<option value='$rowMake[Make]'>$rowMake[Make]</option>";
}
?>
</select>
<select name="modelSelection">
<?php
if (isset($_REQUEST['ajaxmake'])) {
$resultModel = odbc_exec($conn, "SELECT Model FROM Vehicle") or die (odbc_errormsg());
while ($rowModel = odbc_fetch_array($resultModel)) {
echo "<option value='$rowModel[Model]'>$rowModel[Model]</option>";
}
die();
}
?>
</select>
<input type="submit" name="submit" value="Go">
</form>
EDIT 根据您的解决方案引入上述代码。谢谢你。
该函数似乎可以工作,但它使用 make 列而不是 model 列填充第二个下拉列表。知道为什么吗?
谢谢你,德昂·琼克
【问题讨论】:
标签: php ajax ms-access odbc cascadingdropdown