我在课程注册时遇到问题。
我有3 tables
名为dept(dept_id,dept_name)
,其中dept_id
是主键第二个表是semester (semester_id, semester_name,dept_id)
semester_id
是主键,dept_id是外国的key .3rd table是courses(c_id,dept_id,sem_id,c_name)
,其中c_id
是主键,dept_id
和sem_id
是外键。
我有3个组合框: 关于部门的第1次
(select* from dept)
<option value="<?php echo $sql_res1["dept_id"]; ?>" <?php if($sql_res1["dept_id"]==$_REQUEST["dept_id"]) { echo "Selected"; } ?>><?php echo $sql_res1["dept_name"]; ?></option>
<?php
}
?>
第二个组合框是学期:
select * from semester where dept_id='$_REQUEST[dept_id]'";
第3个组合框是课程。 我不知道如何查询它。我希望如果部门等于计算机科学,学期等于1,则第3个组合框将显示相同的课程,如果部门是法律,学期等于2,那么第3个组合框显示他们的相关课程。
答案 0 :(得分:0)
基本上有两种方法可以解决这个问题。
方法1:异步(AJAX)
每次用户更改选项并替换所有选项实体时,都会向服务器查询相关数据。例如(jQuery):
$("#select-entity-1, #select-entity-2").change(function () {
var deptId = $("#select-entity-1").val();
var semId = $("#select-entity-2").val();
$.post("path/to/your/script.php", {
deptId: deptId,
semId: semId
}, function (response) {
$("#select-entity-3").html(response);
}
);
});
在PHP中它看起来像这样:
<?php
if (isset($_POST['deptId']) && isset($_POST['semId'])) {
$deptId = (int) $_POST['deptId'];
$semId = (int) $_POST['semId'];
$res = $db->query("SELECT * FROM `courses` WHERE `dept_id` = $deptId AND `sem_id` = $semId");
if ($res->num_rows) {
while ($row = $res->fetch_assoc()) {
echo '<option value="'.$row['c_id'].'">';
echo $row['c_name'];
echo '</option>';
}
}
}
方法2:通过JavaScript数组存储和访问数据
将第三个表的数据存储在JavaScript数组中。它与异步方法类似,但不是查询服务器,而是从存储的数组中选择相关数据。
哪种方法更有效,高度取决于第三个表的大小。使用大量数据时,异步方法很可能是更好的选择。否则,我倾向于第二个,因为它没有延迟,你通常想避免不必要的流量。
由于您没有提供任何代码,因此我可以为您提供所有代码。我希望它会引导你走向正确的方向。