Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php&;javascript使多个下拉列表相互依赖_Javascript_Php_Mysql - Fatal编程技术网

使用php&;javascript使多个下拉列表相互依赖

使用php&;javascript使多个下拉列表相互依赖,javascript,php,mysql,Javascript,Php,Mysql,我创建了一个需要填充MySQL数据库下拉列表的网页。到目前为止很容易。我希望有多个下拉列表,它们相互依赖。换句话说,我希望第一个下拉列表更改第二个下拉列表中的值,依此类推。我用示例代码尝试了一下,效果很好。当我在实际的表中尝试时,第二个下拉列表不是基于第一个下拉列表进行过滤。它在第一个下拉列表(课程)中获取一个值,并执行准备好的语句。但它将带回表中的所有模块,而不仅仅是所选课程的模块。 我必须有一个在它的打字错误,因为我已经做了样本表,它的作品很好。此外,我还直接尝试了SQL,它也可以工作。我准

我创建了一个需要填充MySQL数据库下拉列表的网页。到目前为止很容易。我希望有多个下拉列表,它们相互依赖。换句话说,我希望第一个下拉列表更改第二个下拉列表中的值,依此类推。我用示例代码尝试了一下,效果很好。当我在实际的表中尝试时,第二个下拉列表不是基于第一个下拉列表进行过滤。它在第一个下拉列表(课程)中获取一个值,并执行准备好的语句。但它将带回表中的所有模块,而不仅仅是所选课程的模块。 我必须有一个在它的打字错误,因为我已经做了样本表,它的作品很好。此外,我还直接尝试了SQL,它也可以工作。我准备好的声明行吗?“connect_db.php”页面在我的示例表中也运行良好。 我的代码是

<?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来重新加载下拉列表?谢谢大家@难以置信的是,我已经确认我在课程变量中得到了正确的值。此外,我还尝试了您的建议,并添加了显示错误设置。我没有错