Задать вопрос

Как заполнить чекбоксы из запроса?

Здравствуйте. Много читал про разграничение прав. Многие решения неэффективны, многие не понятны.
Реализовал свое, под проект. Суть такая: есть таблица role, где перечислены роли:
1. админ
2.Клиент
3.Менеджер
4. Мастер и т.д.

Есть таблица right, где права:
1. доступ в админпанель
2.добавление заявок
3. редактирование заявок
4.добавление пользователей

Ну и третья access для связки этих двух таблиц.
В нужном месте пишу:
<?$right='4'; include('access.php');if(isset($access['id'])){
echo "доступно только если у пользователя с ролью админ есть право 4"; }?>


Проверка прав доступа в файле access.php:
<?php
//проверка прав доступа
$dostup = mysqli_query($db, "SELECT id FROM access WHERE id_right = $right AND id_role = $user[role] ");
$access = mysqli_fetch_assoc($dostup);

Не знаю на сколько это элегантное решение, но прекрасно работает. Я создаю роль, наделяю ее правами и вуаля.
Но столкнулся с проблемкой, к которой не могу найти простого решения.
Задача такая:
На страничке, где раздаются права есть checkbox's 0de7eaaaaf1c41f286647180e00de6c3.JPG
когда я выбираю права админа или менеджера checkbox's должны заполнится. Следовательно, при изменении галочек, они должны записываться в БД.
Теперь, то что я делаю. Когда я выбираю редактировать роль, открывается модальное окошко с запросом и чекбоксами:
$access1 =  mysqli_query($db,"SELECT id_right FROM access WHERE id_role = '$_GET[id]'");
      if($ass = mysqli_fetch_array($access1)){
          do{
              print_r($ass['id_right']);

//Скрипт выдает 1,2,3 или 4 и т.д. В зависимости от выбора $_GET[id]
          }while($ass = mysqli_fetch_array($access1));
      }

и чекбоксы ниже:
<div class="checkbox"><label><input type="checkbox" name="dostup-3" value="on"  /> Доступ в административную панель</label></div>
<div class="checkbox"><label><input type="checkbox" name="dostup-1" value="on"  /> Добавление и редактирование заявок</label></div>
<div class="checkbox"><label><input type="checkbox" name="dostup-2" value="on"  /> Удаление заявок</label></div>
<div class="checkbox"><label><input type="checkbox" name="dostup-4" value="on"  /> Быстрое обслуживание</label></div>
<div class="checkbox"><label><input type="checkbox" name="dostup-5" value="on"  /> Управление ролямя</label></div>

Вопрос: Как мне заполнить чекбоксы из запроса выше? Спасибо.
  • Вопрос задан
  • 2950 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
@Snewer
Для начала несколько слов по безопасности и производительности:
$access1 =  mysqli_query($db,"SELECT id_right FROM access WHERE id_role = '$_GET[id]'");

SQL-инъекция. На эту тему много написано, проверяйте все данные из вне.

$_GET[id]
работает медленнее чем:
$_GET['id']

насчет чекбоксов не совсем понял. Если вам нужно, что бы при срабатывании какого-либо условия чекбокс ставал активным, то:

$ac = array();
$access1 =  mysqli_query($db,"SELECT id_right FROM access WHERE id_role = '$_GET[id]'");
      if($ass = mysqli_fetch_array($access1)){
          do{
            $ac[] =   $ass['id_right'];
          }while($ass = mysqli_fetch_array($access1));
      }


<div class="checkbox"><label><input type="checkbox" name="dostup-3" value="on" <?php
echo ( in_array(1, $ac) ) ? 'checked' : '' ;
?> /> Доступ в административную панель</label></div>
<div class="checkbox"><label><input type="checkbox" name="dostup-1" value="on"  <?php
echo ( in_array(2, $ac) ) ? 'checked' : '' ;
?> /> Добавление и редактирование заявок</label></div>
<div class="checkbox"><label><input type="checkbox" name="dostup-2" value="on"  <?php
echo ( in_array(3, $ac) ) ? 'checked' : '' ;
?> /> Удаление заявок</label></div>
<div class="checkbox"><label><input type="checkbox" name="dostup-4" value="on"  <?php
echo ( in_array(4, $ac) ) ? 'checked' : '' ;
?> /> Быстрое обслуживание</label></div>
<div class="checkbox"><label><input type="checkbox" name="dostup-5" value="on"  /> Управление ролямя</label></div>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы