从数据库值中选择复选框


Check checkbox from database values

我在一个数据库中有两个表。在报告中,我存储了报告的信息,在report_roles中,我分配了哪个用户可以访问报告。

<>之前报告+--+-----------+---------------+| | id report_name | report_filename |+--+-----------+---------------+|13|Report 1 |reportname1 ||14|Report 2 |reportname2 ||15|报告3 |报告name3 |+--+-----------+---------------+report_roles+---------+-------+| report_id | user_id |+---------+-------+|14 |1 ||13 |1 ||14 |2 ||13 |2 |+---------+-------+之前

我想显示带有复选框的表报告中的所有报告,并且只选中与用户id关联的report_roles中添加的报告。这是我正在运行的代码:

        $id = $_POST['user_id'];
        $query = "SELECT * FROM reports LEFT JOIN report_roles ON report_roles.report_id = reports.id";
        $sql = mysqli_query($mysqli, $query);
        if (!$sql) {
            printf("Error: %s'n", mysqli_error($mysqli));
            exit();
        }
        while($row = mysqli_fetch_array($sql, MYSQLI_ASSOC) ) { 
            if ($row['user_id'] == $id) { 
            echo "<input type='checkbox' name='" . ($row['id'])  . "'" . "id='" . ($row['id'])  . "'" . "value='yes'" . ($row['user_id'] == $id ? 'checked' : '') .">";
            echo $row['report_name'];
            } else {
            echo "<input type='checkbox' name='" . ($row['id'])  . "'" . "id='" . ($row['id'])  . "'" . "value='yes'" . ">";
            echo $row['report_name']; 
            }
        }

如果$id = 1,我正在接收这个:

|已检查| Report2 |已检查|报告1 |未检查| Report2 |未检查|报告1 |未检查| Report3 

根据我写的代码,这是完全正确的。我不知道如何显示报告表中没有重复的所有报告,并仅检查report_roles中可用的报告,如下所示:

|已检查| Report2 |已检查|报告1 |未检查| Report3 

我确信我必须改变我的查询与连接。我尝试用两个独立的查询来完成这个任务,但没有连接,但运气不好。希望有人能帮忙。

实际上我只是在我的查询中缺少一个语句,感谢Bernd Buffed,我意识到我必须在查询结束时添加一个and,它应该看起来像这样:

$query = "SELECT * FROM reports LEFT JOIN report_roles ON report_roles.report_id = reports.id AND user_id = $id";

到目前为止,我正在添加WHERE user_id = $id,并且只接收那些存在于report_roles中的报告。与AND我正在从报表表和我的脚本中接收所有的报告,只能检查那些在report_roles基于一个简单的php检查。