我试图从mysql的复选框中检查值。我可以输出检查的值。但我不能让他们检查复选框。我尝试了很多来自互联网的方法,但似乎都没有。也许我在这里遗漏了一些东西。帮帮我。
$sql = "SELECT courses.*, enrollments.*
FROM enrollments LEFT JOIN courses
ON enrollments.courses=courses.course_id
WHERE enrollments.enrollment_id = '$id'";
$sql_c = "SELECT * FROM courses";
// query the result
$result = mysqli_query($con, $sql);
$result_c = mysqli_query($con, $sql_c);
// first loop calling using id
while($row = mysqli_fetch_assoc($result)){
$courses = $row['courses']; // only the selected values
// Second loop calling all the courses
while ($rowc = mysqli_fetch_array($result_c)) {
$courseName = $rowc['course_name']; // all the course names
$courseId = $rowc['course_id']; // all the course id
echo "<input type='checkbox' name='courses[]' value='$courseId' id='$courseId' autocomplete='off'>";
echo "<label for='$courseName'>$courseName</label><br/>";
} // loop 2
} // loop 1
这是输出
echo $courses;
// 26, 24, 21, 20
echo $courseId." ";
// 18 19 20 21 22 23 24 26
如何检查这些值。
这就是我要找的东西
┌─────────┬─────────────────┐
│ [check] │ English │
│ [ ] │ French │
│ [ ] │ Sanskrit │
│ [check] │ Arts and Crafts │
│ [check] │ History │
│ [ ] │ Chemistry │
└─────────┴─────────────────┘
答案 0 :(得分:1)
你的内循环只会在第一次工作。第二次通过外部循环,您将从第二个查询中获取所有结果,因此内部循环将立即停止。
不需要两个查询和两个循环。第一个查询返回所有课程。您只需检查enrollment
表中的列是否已选中。但为了使其正常工作,您需要将enrollments.enrollment_id
移到ON
子句中(请参阅Return default result for IN value regardless)。
您还需要更改LEFT JOIN
的顺序。由于您需要所有课程,因此应该是courses LEFT JOIN enrollments
。
<?php
$sql = "SELECT courses.*, enrollments.*
FROM courses
LEFT JOIN enrollments
ON enrollments.courses=courses.course_id AND enrollments.enrollment_id = '$id'";
$result = mysqli_query($con, $sql);
while ($row = mysqli_fetch_assoc($result)) {
$courseName = $row['course_name'];
$courseId = $row['course_id'];
$checked = $row['enrollment_id'] == NULL ? "" : "checked";
echo "<input type='checkbox' name='courses[]' value='$courseId' id='$courseId' $checked>";
echo "<label for='$courseName'>$courseName</label><br/>";
}
答案 1 :(得分:0)
@Patrick Q - 我确实尝试过很多来自互联网的方法。因为代码很乱,我继续评论和删除它,我无法在这里发布它。
@Magnus Eriksson和@IncredibleHat - 对于这种混乱感到抱歉,下次我会照顾。
@Barmar - 非常感谢。 :)
这是最终的工作代码。我有两个主要问题Normalization和不使用FK。因为我快速测试我创建了表而没有设置FK。我可以使用@barmar方法为一个项目选择一个复选框值。所以我知道我很亲密。我删除了所有表格并从头开始创建。
互联网上有很多答案可以选择静态下拉列表的值,但是与另一个表中的动态生成复选框相关并选择了值,我找不到。
<强> 1。复选框是从另一个表
生成的while($row = mysqli_fetch_assoc($result)){
$courseName = $row['course_name'];
$courseId = $row['course_id'];
echo "<input type='checkbox' name='courses[]' value='$courseId' id='$courseName' autocomplete='off'>";
echo "<label for='$courseName'>$courseName</label><br/>";
}
2.使用选中的值隐藏复选框
while ($row = mysqli_fetch_assoc($result)) {
$studentid = $row['studentid'];
$courseId = $row['courseId'];
$courseName = $row['courseName'];
$checked = $studentid == NULL ? "" : "checked='checked'";
echo "<input type='checkbox' name='courses[]' value='$courseId' id='$courseId' $checked autocomplete='off'>";
echo "<label for='$courseId'>$courseName</label><br/>";
}
希望这有助于搜索动态表格中选中复选框值的人。