2016-05-11 4 views
1

Я читал подобные вопросы и ответы на обновление Codeigniter, но не смог решить мою проблему.Вставить/обновить с помощью Codeigniter

У меня есть таблица пользователя и таблица user_role. В таблице пользователя есть информация, такая как userid, имя, адрес и т. Д., А таблица user_role имеет идентификаторы userid и role_id, где role_id - идентификаторы для ролей, такие как Entry, Edit, View и т. Д.

Теперь администратор может изменить роль пользователя и обновить информацию о пользователе. Роли показаны как флажки. Чтобы обновить роли пользователя, я удалил все строки для этого пользователя в таблице user_role и вставил новые роли. Я пробовал:

if(!empty($_POST['role'])) { 

      $this->db->where('user_id', $id); 
      $this->db->delete('user_role'); 

    foreach ($_POST['role'] as $val) { 

      $arr['user_id'] = $id; 
      $arr['role_id'] = $val;     
      $this->db->insert('user_role', $arr); 
      } 
    } 
    else { 
      $this->db->where('user_id', $id); 
      $this->db->delete('user_role'); 
    } 

Если все флажки сняты, все строки будут удалены. Он работает нормально. Но это не кажется правильным. Пожалуйста, направляйте.

+0

вам необходимо обновить USER_ROLE передать идентификатор пользователя –

+0

Если вы хотите получить больше информации о разрешениях по ролям на CodeIgniter вы можете увидеть мой ответ здесь : http://stackoverflow.com/questions/37126013/secure-php-functions-with-array/37126471?noredirect=1#comment61833227_37126471 –

+0

его ясно - ваш код удаляет все роли пользователя, если ни один из отметок не установлен - что делать вы ожидаете? так что единственное, что вас беспокоит, - это блок else, который просто обрабатывает его по-другому. – sintakonte

ответ

0
if($_POST['role']){ 
    foreach ($_POST['role'] as $val) { 

     $arr['user_id'] = $id; 
     $arr['role_id'] = $val;     

     // You need to run Update query. do not need to delete the records every time. 
     $where = array('user_id'=>$arr['user_id']); 
     $this->modelname->updateRecord($tablename,$arr,$where); 

     //It will update the records on post 

    } 
} 
+0

это неправильно, если есть значения в db, которые не отмечены в форме? Эти значения должны быть удалены - его подход в порядке – sintakonte

+0

В Db По умолчанию он может принимать значение NULL. Даже когда он удаляет его, он переходит к Null. –

+0

вы даже не поняли, что я написал, ваш пример обрабатывает все проверенные атрибуты, но как насчет тех, кто находится в базе данных и не проверен? – sintakonte

0

Первый. Где определена идентификатор $ id?

Второй. Codeigniter имеет библиотеку, которая не требует использования $ _POST или $ _GET.

В-третьих. Нужно ли, чтобы у одного пользователя было более одной роли? Я рекомендую вам использовать отборное как:

<select name="role"> 
    <option value="user">User</option> 
    <option value="employee">Employee</option> 
    <option value="admin">Admin</option> 
</select> 

Может быть, вам нужно использовать идентификатор роли в значениях параметров ... что-то вроде

<option value="1">User</option> 
<option value="2">Employee</option> 
<option value="3">Admin</option> 

Четвертой. Если вы хотите обновить ... почему бы вам не использовать метод обновления ORID кода. Таким образом, я сделал файл с именем general_model.php, помещенный в папку моделей (вы используете эту папку и шаблон MVC?), Где у меня есть что-то вроде фасада между ORM и контроллерами. Одной из функций является обновление:

public function update($tablename, $data, $where) 
{     
    foreach($where as $key=>$value) 
     $this->db->where($key, $value); 
    $this->db->update($tablename, $data); 

    if ($this->db->affected_rows() >= 0) return TRUE; 
    else         return FALSE; 
} 

Пример использования от контроллера, для вашего случая (используя только один роль пользователем) может быть:

$this->general_model->update("users_role", array("role_id"=>$this->input->post("")) , array("user_id"=>$id)); 

Я надеюсь, что это помогает.

PS: Если вы хотите, я могу передать вам general_model.php

Смежные вопросы