Php 选中数据库值中的复选框
我在一个数据库中有两个表。在报表中,我存储报表的信息,在报表角色中,我分配哪个用户可以访问报表 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关联的报表角色中的报表。这是我正在运行的代码: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
$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”