Создание движка на MVC. Делаем возможность редактирования и удаления пользователей.
Всем привет! Продолжаем создавать наш движок на MVC, и сегодня мы сделаем редактирование и удаление пользователей из базы данных.
Во-первых, в файле index.php(views/user) мы укажем правильный путь для ссылок в цикле.
// ...
echo '<td><a href="'.URL.'user/edit/'.$value['id'].'">Edit</a>
<a href="'.URL.'user/delete/'.$value['id'].'">Delete</a></td>';
// ...
Теперь в контроллере user.php опишем метод delete.
public function delete($id) {
$this->model->delete($id);
header('Location: '.URL.'user');
}
Как обычно теперь переходим в user_model.php и создаем там этот метод
public function delete($id) {
$sth = $this->db->prepare('DELETE FROM users WHERE id = :id');
$sth->execute(array(
':id' => $id
));
}
Прекрасно! Удаление уже работает. Теперь откроем user.php
public function edit($id) {
$this->view->user = $this->model->userSingleList($id);
$this->view->render('user/edit');
}
public function editSave($id) {
}
Из index.php скопируйте форму, создайте файл edit.php в папке user.
<h1>User: edit</h1>
// Форма
В форме поменяйте action
<form action="<?php echo URL;?>user/editSave/<?php echo $this->user['id'];?>"></form>
Также следует изменить поля ввода. Для поля Login добавим атрибут value со значением из БД.
value="<?php echo $this->user['login'];?>"
Теперь сделаем проверку роли пользователя
<option value="default" <?php if($this->user['role'] == 'default') echo 'selected';?>Default</option>
<option value="admin" <?php if($this->user['role'] == 'admin') echo 'selected';?>Admin</option>
<option value="owner" <?php if($this->user['role'] == 'owner') echo 'selected';?>Owner</option>
Откроем файл user_model.php и создадим там метод userSingleList
public function userSingleList($id) {
$sth = $this->db->prepare('SELECT id, login, role FROM users WHERE id = :id');
$sth->execute(array(':id' => $id));
return $sth->fetch();
}
Теперь давайте откроем файл user.php, скопируйте все из метода create и вставьте в editSave выше заголовка header(проверьте, чтобы у вас не было двух подряд идущих заголовка).
Тут нужно поменять лишь следующее
$this->model->editSave($data);
Теперь в модели также скопируем метод create и назовем его editSave
Изменим SQL-запрос
UPDATE users SET `login` = :login, `password` = :password, `role` = :role WHERE id = :id
Конечно же, нужно добавить md5 шифрование пароля в массиве
md5($data['password'])
и добавить id в массив
':id' => $data['id']
В метод editSave в файле user.php также добавим id
$data['id'] = $id;
Вот и все. Мы сделали редактирование и удаление пользователей из базы данных.
Спасибо за внимание!
P.S. Если вы не очень понимаете ООП, то советую приобрести курс Создание движка на PHP и MySQL 2.0, где данная тема рассмотрена очень подробно.
-
- Михаил Русаков
Комментарии (3):
Михаил, у меня к вам одна просьба, прилепляйте готовые файлы к уроку. Это было бы очень здорово и помогло понять всю суть урока. А то иногда приходиться гадать, недописан урок или была допущена ошибка... Что портит общее впечатление. С уважение, Андрей.
Ответить
Думать, думать и ещё раз - думать! Как говорил великий - Кетцалькоатель. Ну, или купите курс.))
Ответить
о шифровании - мы скопировали из Create в editSave, а там уже присутствует MD5 на пароль из пост запроса. при проверке роли пользователя перед названием роли упущены знаки ">" закрывающие option. и почему данные подготавливаются в контроллере, а не в модели? Почему бы сразу не отдать в метод eitSave модели User весь $_POST и $id, т.е. передать два параметра и два параметра принять, а проще разобрать $_POST в модели
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.