检查数据库值

时间:2015-09-13 09:51:51

标签: php mysql checkbox

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

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关联的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我收到了这个:

|checked| Report2   |checked| Report 1   |unchecked| Report2   |unchecked| Report 1   |unchecked| Report3 

根据我编写的代码完全正确。我无法弄清楚如何显示报告表中没有重复项的所有报告,只检查report_roles中可用的报告,如下所示:

|checked| Report2   |checked| Report 1  |unchecked| Report3 

我确信我必须使用联接更改查询。尝试使用两个单独的查询来完成此任务,但没有连接但没有运气。希望有人能提供帮助。

1 个答案:

答案 0 :(得分:0)

实际上我只是在我的查询中遗漏了一条语句,感谢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我从报告表接收所有报告,我的脚本只能检查基于简单的php检查的report_roles中的那些报告。