Не удалось вставить проверенное значение в базу данных

#php #mysql #codeigniter

Вопрос:

В настоящее время у меня есть таблица разрешений, в которой пользователь может использовать флажок для предоставления доступа или возврата доступа к URL-ссылке пользователю с определенной ролью. Поэтому для этого я сделал так, чтобы при нажатии флажка идентификатор этого флажка и роль пользователя вставлялись в мою базу данных, но по какой-то причине я не могу вставить его в базу данных. Я попробовал следующий код:

Класс Контроллера:

 public function permission()  {  if ($this-gt;form_validation-gt;run() == FALSE)  {  $main['permissions']=$this-gt;users_model-gt;get_permission_array();  $main['roles']=$this-gt;users_model-gt;get_roles_array();  foreach($main['roles'] as $key =gt; $val):  $main['access'][$val['roles_id']]=$this-gt;users_model-gt;get_access_array(array('roles_id'=gt;$val['roles_id']));  endforeach;  $main['page'] = 'crm/users/permission';  $this-gt;load-gt;view('crm/index', $main);  }  if($this-gt;input-gt;post())  {  $loginid=false;  foreach($main['roles'] as $key =gt; $val):  if(isset($_POST['roleid'.$val['roles_id']])){   $this-gt;users_model-gt;clear_access(array('roles_id'=gt;$val['roles_id']));   foreach($_POST['roleid'.$val['roles_id']] as $id =gt; $access):   $data=array('roles_id'=gt;$val['roles_id'],'permissions_id'=gt;$access);   $loginid=$this-gt;users_model-gt;permission_access($data);   endforeach;   }  endforeach;  if($loginid){  $this-gt;session-gt;set_flashdata('message', 'lt;pgt;Permission updated Successfully.lt;/pgt;');  redirect('users/permission');  } else {  $this-gt;session-gt;set_flashdata('message', 'lt;pgt;Error!! - Permission not updated.lt;/pgt;');  redirect('users/permission');  }  }  }  

Класс Модели:

 function get_permission_array() {  $query = $this-gt;db-gt;get("crm_client_permissions");  return $query-gt;result_array(); }  function get_access_array($cond) {  $this-gt;db-gt;select("permissions_id");  $this-gt;db-gt;where($cond);  $query = $this-gt;db-gt;get("crm_client_role_access");  return $query-gt;result_array(); }  function clear_access($cond) {  return $this-gt;db-gt;delete("crm_clients_access",$cond); }  function permission_access($data) {  return $this-gt;db-gt;insert("crm_clients_access",$data); }  function get_roles_array($cond='') {  if($cond !='') $this-gt;db-gt;where($cond);  $query = $this-gt;db-gt;get("crm_client_roles");   return $query-gt;result_array();  }  

View Class:

 lt;div lt;?php echo form_open_multipart('users/permission'); ?gt;gt; lt;tablegt; lt;?php if($permissions) $i=0;foreach($permissions as $key =gt; $permission): ?gt;  lt;trgt;  lt;td class="align-center"gt;lt;?php echo   $i; ?gt;lt;/tdgt;  lt;tdgt;lt;?php echo $permission['page']; ?gt;lt;/tdgt;  lt;tdgt;lt;?php echo $permission['url']; ?gt;lt;/tdgt;  lt;?php foreach($roles as $rolekey =gt; $role):   if($role['roles_id'] == 1)$checked = 'checked';  if(in_array($permission['permissions_id'],array_map('current',$access[$role['roles_id']])))  $checked = 'checked';  else  $checked = ''; ?gt;  lt;td align="center"gt;lt;div class="checkbox checkbox-success m-t-0"gt;lt;input type="checkbox" class="accessbox"  id="rolelt;?php echo $rolekey ?gt;-lt;?php echo $key ?gt;" name="roleidlt;?php echo $role['roles_id']; ?gt;[]"   lt;?php echo $checked?gt; lt;?php echo ($role['roles_id'] == 1) ? 'disabled="disabled"' : '' ?gt; value="lt;?php echo $permission['permissions_id']; ?gt;" /gt;  lt;label for="rolelt;?php echo $rolekey ?gt;-lt;?php echo $key ?gt;"gt;lt;/labelgt;lt;/divgt;lt;/tdgt;  lt;?php endforeach; ?gt;  lt;/trgt;  lt;?php endforeach; ?gt;  lt;/tablegt;  lt;div class="text-center"gt;  lt;button type="submit" class="btn btn-info"gt;Save Permissionlt;/buttongt; lt;a href="lt;?php echo site_url('users/roles') ?gt;" class="btn btn-warning"gt;Cancellt;/agt;  lt;/divgt;  lt;?php echo form_close(); ?gt; lt;/divgt;  

Но здесь я всегда получаю Ошибку!! — Разрешение не обновлено. в моем классе view это означает, что он переходит к другой части моего контроллера. Я не уверен, где я здесь ошибаюсь

Ответ №1:

Похоже, проблема здесь $loginid=$this-gt;users_model-gt;permission_access($data); и здесь return $this-gt;db-gt;insert("crm_clients_access",$data); . Мой совет состоит в том, чтобы:

  • используйте XDebug для отладки кода и посмотрите, что возвращает функция insert и почему.
  • Также вы можете посмотреть журнал php, чтобы узнать, есть ли какие-либо ошибки в базе данных. Чтобы использовать журналы ошибок, вам нужно найти файл конфигурации php.ini и включить строку «error_log = /путь/к/fige.log».
  • Также вы можете просмотреть данные базы данных , чтобы определить, создает ли функция insert новую строку в таблице crm_clients_access , если это не так? вам необходимо проверить конфигурацию подключения к хосту базы данных:порт, поэтому процесс базы данных должен быть доступен на этом хосте:порт.