【问题标题】:Getting a checkbox to be checked in php在php中获取要检查的复选框
【发布时间】:2019-09-22 12:10:38
【问题描述】:

我正在尝试列出所有框架,并且只检查那些连接到横幅表的框架。 但我得到的只是连接到横幅的框架,而不是所有框架。 我与数据透视表有多对多的关系。 所以我的表是这样的

横幅表

id  |   title
1   |   Home banner

框架表

id  |   title   |   description |   image
1   |   Frame 1 |   Frame 1     |   frame.jpg
2   |   Frame 2 |   Frame 2     |   frame2.jpg
3   |   Frame 3 |   Frame 3     |   frame3.jpg
4   |   Frame 4 |   Frame 4     |   frame4.jpg
5   |   Frame 5 |   Frame 5     |   frame5.jpg

banner_frame 表

id  |   banner_id   |   frame_id
1   |       1       |       1
2   |       2       |       1
2   |       2       |       5

这是我的代码

<?php
    if(isset($_GET['b_id']))
    {
        $banner_id = $_GET['b_id'];
    }

    $query = "SELECT frames.id as frameId, frames.title as frameTitle ";
    $query .= "FROM frames ";
    $query .= "INNER JOIN banner_frame ON banner_frame.frame_id = frames.id ";
    $query .= "INNER JOIN banners ON banners.id = banner_frame.banner_id ";
    $query .= "WHERE banner_frame.banner_id = $banner_id ";


    $banner_frame = mysqli_query($conn, $query);

    confirmQuery($banner_frame);

    while($row = mysqli_fetch_array($banner_frame))
    {
        $frame_id = $row['frameId'];
        $frame_title = $row['frameTitle'];

        if($frame_id)
        {
            $checked = 'checked';
        }else{
            $checked = '';
        }

        echo "<div class='form-check'>";
        echo    "<input type='checkbox' name='frames[]' id='frame_checkbox' value='$frame_id' $checked> ";
        echo    "<label for='frame_checkbox'>";
        echo        $frame_title;
        echo    "</label>";
        echo "</div>";
    }
?>

【问题讨论】:

    标签: php


    【解决方案1】:

    发生这种情况是因为您添加了where 子句,因此选择了应用于特定横幅的数据。

    我想你应该这样做(我用.... 省略了不相关的代码):

    $query = "SELECT frames.id as frameId, frames.title as frameTitle, banners.id as banner_id ";
    $query .= "FROM frames ";
    $query .= "INNER JOIN banner_frame ON banner_frame.frame_id = frames.id ";
    $query .= "INNER JOIN banners ON banners.id = banner_frame.banner_id";
    
    // ....
    // Next in while loop you compare current `banner_id` with `$banner_id` variable
    
    while($row = mysqli_fetch_array($banner_frame))
    {
        // ....
        $checked = '';
        if ($row['banner_id'] == $banner_id) {
             $checked = 'checked';
        }
        // output row data ....
    }
    

    【讨论】:

    • 那种工作,但我得到重复。例如我收到Frame 1, Frame 1, Frame 2, Frame 2。而不是Frame 1, Frame 2, Frame 3
    • 这是因为使用的横幅是多个帧,如果新帧的帧 id 不等于与前一帧的 id,您可以按 frame_id 对数据进行排序并输出新帧.
    猜你喜欢
    • 1970-01-01
    • 2017-10-23
    • 2017-06-10
    • 2011-10-28
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多