使用php循环不起作用检查mysql复选框值

时间:2018-03-30 14:58:19

标签: php mysql mysqli while-loop

我试图从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       │
└─────────┴─────────────────┘

2 个答案:

答案 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/>";
}

希望这有助于搜索动态表格中选中复选框值的人。