Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选中数据库值中的复选框_Php_Mysql_Checkbox - Fatal编程技术网

Php 选中数据库值中的复选框

Php 选中数据库值中的复选框,php,mysql,checkbox,Php,Mysql,Checkbox,我在一个数据库中有两个表。在报表中,我存储报表的信息,在报表角色中,我分配哪个用户可以访问报表 reports +--+-----------+---------------+ |id|report_name|report_filename| +--+-----------+---------------+ |13|Report 1 |reportname1 | |14|Report 2 |reportname2 | |15|Report 3 |reportname3

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

reports +--+-----------+---------------+ |id|report_name|report_filename| +--+-----------+---------------+ |13|Report 1 |reportname1 | |14|Report 2 |reportname2 | |15|Report 3 |reportname3 | +--+-----------+---------------+ report_roles +---------+-------+ |report_id|user_id| +---------+-------+ |14 |1 | |13 |1 | |14 |2 | |13 |2 | +---------+-------+ 报告 +--+-----------+---------------+ |id |报告|名称|报告|文件名| +--+-----------+---------------+ |13 |报告1 |报告名称1| |14 |报告2 |报告名称2| |15 |报告3 |报告名称3| +--+-----------+---------------+ 报告工作组角色 +---------+-------+ |报告|用户| id| +---------+-------+ |14 |1 | |13 |1 | |14 |2 | |13 |2 | +---------+-------+ 我希望显示带有复选框的表报表中的所有报表,并仅选中添加到与用户id关联的报表角色中的报表。这是我正在运行的代码:

        $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=$\u POST['user\u id'];
$query=“SELECT*从报告左侧加入报告角色上的报告角色。报告角色id=reports.id”;
$sql=mysqli\u查询($mysqli,$query);
如果(!$sql){
printf(“错误:%s\n”,mysqli_错误($mysqli));
退出();
}
而($row=mysqli_fetch_数组($sql,mysqli_ASSOC)){
如果($row['user_id']=$id){
回声“;
echo$row['report_name'];
}否则{
回声“;
echo$row['report_name'];
}
}
如果$id=1,我将收到以下信息:

|checked| Report2 |checked| Report 1 |unchecked| Report2 |unchecked| Report 1 |unchecked| Report3 |选中|报告2 |选中|报告1 |未选中|报告2 |未选中|报告1 |未选中|报告3 根据我写的代码,这是完全正确的。我不知道如何显示报表表中没有重复项的所有报表,而只检查报表角色中可用的报表,类似这样:

|checked| Report2 |checked| Report 1 |unchecked| Report3
$query = "SELECT * FROM reports LEFT JOIN report_roles ON report_roles.report_id = reports.id AND user_id = $id";
|选中|报告2 |选中|报告1 |未选中|报告3
我确信我必须用join更改我的查询。尝试使用两个没有连接的单独查询来完成此任务,但运气不佳。希望有人能帮忙

实际上,我的查询中缺少了一条语句,多亏了Bernd Buffed,我意识到我必须添加一条语句,在查询的末尾,它应该是这样的:

|checked| Report2 |checked| Report 1 |unchecked| Report3
$query = "SELECT * FROM reports LEFT JOIN report_roles ON report_roles.report_id = reports.id AND user_id = $id";

到目前为止,我一直在添加user_id=$id,并且只接收那些存在于report_角色中的报告。使用和,我将从reports表接收所有报告,我的脚本只能基于简单的php检查检查处于report_角色的报告。

您可以指定要获取的字段。因此,您可以编写SELECT report_roles.*-然后从该表中仅获取字段。还可以指定要在查询中获取的id。所以您不必在php中测试它。“选择report_roles.*从报告左侧加入report_roles.report_id=reports.id和id=$id上的report_roles”