使用php&;javascript使多个下拉列表相互依赖
我创建了一个需要填充MySQL数据库下拉列表的网页。到目前为止很容易。我希望有多个下拉列表,它们相互依赖。换句话说,我希望第一个下拉列表更改第二个下拉列表中的值,依此类推。我用示例代码尝试了一下,效果很好。当我在实际的表中尝试时,第二个下拉列表不是基于第一个下拉列表进行过滤。它在第一个下拉列表(课程)中获取一个值,并执行准备好的语句。但它将带回表中的所有模块,而不仅仅是所选课程的模块。 我必须有一个在它的打字错误,因为我已经做了样本表,它的作品很好。此外,我还直接尝试了SQL,它也可以工作。我准备好的声明行吗?“connect_db.php”页面在我的示例表中也运行良好。 我的代码是使用php&;javascript使多个下拉列表相互依赖,javascript,php,mysql,Javascript,Php,Mysql,我创建了一个需要填充MySQL数据库下拉列表的网页。到目前为止很容易。我希望有多个下拉列表,它们相互依赖。换句话说,我希望第一个下拉列表更改第二个下拉列表中的值,依此类推。我用示例代码尝试了一下,效果很好。当我在实际的表中尝试时,第二个下拉列表不是基于第一个下拉列表进行过滤。它在第一个下拉列表(课程)中获取一个值,并执行准备好的语句。但它将带回表中的所有模块,而不仅仅是所选课程的模块。 我必须有一个在它的打字错误,因为我已经做了样本表,它的作品很好。此外,我还直接尝试了SQL,它也可以工作。我准
<?php
$page_title='My Dropdown Test';
include('header.html');
?>
<script>
function reload(form){
var val=form.course.options[form.course.options.selectedIndex].value;
self.location='CourseModuleDropDown.php?course=' + val ;
}
</script>
<?php
require('../../connect_db.php');
if($dbc->connect_error) {
die("Database connection failed");
}
$course=$_GET['course']; // Check that course is not empty
if(strlen($course) <= 0){
echo "Data Error";
exit;
}
// ### Getting the data from Mysql table for course drop down ### //
$query2="SELECT DISTINCT name,CourseCode FROM courses order by name";
echo "<form method=post name=f1 action='next_page.php'>";
echo "<select name='course' onchange=\"reload(this.form)\">
<option value=''>Select one</option>";
if($stmt = $dbc->query("$query2")){
while ($row2 = $stmt->fetch_assoc()) {
if($row2['CourseCode']==$course){
echo "<option selected value='$row2[CourseCode]'>$row2[name]</option>";
}else{
echo "<option value='$row2[CourseCode]'>$row2[name]</option>";
}
}
}else{
echo $dbc->error;
}
echo "</select>";
// ### End Course drop down list ### //
// ### Getting the data from Mysql table for module drop down (based on selected course)### //
echo "### $course ~ Length => ".strlen($course)." ###</br></br>"; // this was just for testing
echo "<select name='module'><option value=''>Select one</option>";
if(isset($course) and strlen($course) > 0){
if($stmt = $dbc->prepare("SELECT DISTINCT ModuleCode FROM modules where CourseCode=? order by ModuleCode")){
$stmt->bind_param('i',$course);
$stmt->execute();
$result = $stmt->get_result();
while ($row1 = $result->fetch_assoc()) {
echo "<option value='$row1[ModuleCode]'>$row1[ModuleCode]</option>";
}
}else{
echo $dbc->error;
}
}else{
$query="SELECT DISTINCT ModuleCode FROM modules order by ModuleCode";
if($stmt = $dbc->query("$query")){
while ($row1 = $stmt->fetch_assoc()) {
echo "<option value='$row1[ModuleCode]'>$row1[ModuleCode]</option>";
}
}else{
echo $dbc->error;
}
}
echo "</select>";
// ### End Module drop down list ### //
echo "<input type=submit value='Submit'></form>";
?>
<?php include('footer.html');?>
函数重载(表单){
var val=form.course.options[form.course.options.selectedIndex].value;
self.location='CourseModuleDropDown.php?course='+val;
}
您是否确认您的$\u GET['course']
符合您的期望?您标记为//的行仅用于测试
。。。它输出什么?请添加ini\u集('display\u errors',1);ini设置(“显示启动错误”,1);错误报告(E_全部)代码>到脚本的顶部。您应该会看到许多需要解决的警告。为什么不使用ajax来重新加载下拉列表?谢谢大家@难以置信的是,我已经确认我在课程变量中得到了正确的值。此外,我还尝试了您的建议,并添加了显示错误设置。我没有错