#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
, если это не так? вам необходимо проверить конфигурацию подключения к хосту базы данных:порт, поэтому процесс базы данных должен быть доступен на этом хосте:порт.