dimanche 13 septembre 2015

Check checkbox from database values

I have to tables in a database. In reports I am storing info for reports and in report_roles I am assigning which user can access the report.

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      |
+---------+-------+

I want to display all the reports from table reports with checkboxes and check only those which are added in the report_roles associated with the user id. This is the code I am running:

        $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']; 
            }

        }

If $id = 1 I am receiving this:

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

Which is completely right based on the code I wrote. I cannot figure out how to display all the reports without duplicates from reports table and check only those which are available in report_roles, something like this:

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

I am sure I have to change my query with the join. Tried to do accomplish this task with two separate queries without joins but with no luck. Hope someone can help.




Aucun commentaire:

Enregistrer un commentaire