Как редактировать и удалять новости на MVC и PHP


X

Как редактировать и удалять новости на MVC и PHP

В этой статье мы рассмотрим, как редактировать и удалять новости, созданные в прошлых уроках.

Первым делом нужно прописать маршруты к обработчикам:

'update_news/([0-9]+)' => 'news/updateNews/$1',
'delete_news/([0-9]+)' => 'news/deleteNews/$1',

 

В адресную строку будет передаваться id новости, поэтому после адреса страницы мы пишем ([0-9]+). Это значит, что там будут использовать цифры от одного до девяти, а плюс задает, что числа более 9 также будут приниматься. Обработчики принимают id новости, поэтому после названия обработчика, через слеш пишем $1.

Теперь напишем сами обработчики. Первым будет метод, который служит для обработки и отрисовки страницы редактирования:

public function actionUpdateNews($id)
{
    $news = News::getNewsById($id);
    $result = false;
    if (isset($_POST['submit']))
    {
        $id = $_POST['id'];
        $title = $_POST['title'];
        $date = $_POST['date'];
        $url = $_POST['url'];
        $html = $_POST['html'];
        $img_url = $_FILES['img_url']['name'];
        $tmp_name_img = $_FILES['img_url']['tmp_name'];
        $size_img = $_FILES['img_url']['size'];
        $old_img_url = $news['img_url'];
        $errors = false;

 

Тут мы получили данные с формы методом POST и из массива FILES данные о загружаемом изображении:

        if ($size_img !== 0)
        {
            if ($errors == false)
            {
                News::update_news_with_img($id, $title, $img_url, $tmp_name_img, $size_img, $old_img_url, $date, $url, $html);
                // Перенаправляем пользователя на страницу управлениями товарами
                header("Location: /news");
            }
        }
        else
        {
            if ($errors == false) {
                $result = News::update_news($id, $title, $date, $url, $html);
                // Перенаправляем пользователя на страницу управлениями товарами
                header("Location: /news");
            }
        }
    }
    require_once(ROOT . '/views/site/update_news.php');
    return true;
}

 

Если размер картинки не равен нулю, то есть новая картинка выбрана, то запускаем функцию update_news_with_img, которая выполняет загрузку нового изображения и удаление старого, а также изменение данных в таблице базы данных. Но если изображение не выбрано, то мы запускаем метод update_news, который просто изменяет записи в таблице, не трогая поле с картинкой.

Также перед вызовом каждого выполняется проверка на отсутствие ошибок. В данном примере нет проверок, которые могли бы вызвать ошибку, но добавить их не сложно.

После выполнения функций перенаправляем пользователя на страницу, отображающую все новости.

Теперь опишем используемые методом функции, их нужно записывать в файл News.php, он находится в папке models.

Функция update_news_with_img, выполняет загрузку нового изображение и изменяет данные в таблице:

public static function update_news_with_img($id, $title, $img_url, $tmp_name_img, $size_img, $old_img_url, $date, $url, $html)
{
    $img_url1 = Page::downloadImg($old_img_url, $img_url, $tmp_name_img);
    $db = Db::getConnection();
    $sql = "UPDATE news SET title = :title, date = :date, img_url = :img_url, url = :url, html = :html WHERE id = :id";
    $result = $db->prepare($sql);
    $result->bindParam(':id', $id, PDO::PARAM_INT);
    $result->bindParam(':title', $title, PDO::PARAM_STR);
    $result->bindParam(':date', $date, PDO::PARAM_INT);
    $result->bindParam(':img_url', $img_url1, PDO::PARAM_STR);
    $result->bindParam(':url', $url, PDO::PARAM_STR);
    $result->bindParam(':html', $html, PDO::PARAM_STR);
    return $result->execute();
}

 

Также используется функция загрузки изображений, которая была рассмотрена в этой статье.

Функция update_news. Изменяет данные в таблице базы данных:

public static function update_news($id, $title, $date, $url, $html)
{
    $db = Db::getConnection();
    $sql = 'UPDATE news SET title=:title, date = :date, url = :url, html = :html WHERE id = :id';
    $result = $db->prepare($sql);
    $result->bindParam(':id', $id, PDO::PARAM_STR);
    $result->bindParam(':title', $title, PDO::PARAM_STR);
    $result->bindParam(':date', $date, PDO::PARAM_STR);
    $result->bindParam(':url', $url, PDO::PARAM_STR);
    $result->bindParam(':html', $html, PDO::PARAM_STR);
    return $result->execute();
}

 

Функция getNewsById. Эта функция получает id новости и вытягивает из таблицы БД данные по этому id:

public static function getNewsById($id){
    $db = Db::getConnection();
    $sql = 'SELECT * FROM news WHERE id = :id';
    $result = $db->prepare($sql);
    $result->bindParam(':id', $id, PDO::PARAM_INT);
    $result->setFetchMode(PDO::FETCH_ASSOC);
    $result->execute();
    return $result->fetch();
}

 

Страница с формой редактирования будет выглядеть следующим образом:

И иметь следующий листинг:

 <html>
<head>
    <title>Редактирование новости</title>
</head>
<body>
    <h1>РЕДАКТИРОВАТЬ НОВОСТЬ</h1>
    <form action="#" enctype="multipart/form-data" method="post">
        <input type="hidden" name="id" size="80" value="<? echo $news['id'];?>">
        <lable>Заголовок страницы*<br> <input type="text" name="title" size="80" value="<? echo $news['title'];?>"></lable><br><br>
        <lable>Дата*<br> <input type="date" name="date" size="80" value="<? echo $news['date'];?>"></lable><br><br>
        <label>
            Изменить изображение: <br>
        </label>
        <label style="border: 1px solid #ccc; padding: 10px; width:auto;">
            <img src="/img/<?php echo $news['img_url']; ?>" width="200" class="img-c-tree"><br><br>
            <input type="file" name="img_url""><label>*JPG, *PNG.</label><br><br>
        </label><br>
        <lable>Автоматический Url* <br><input type="text" name="url" size="80" value="<? echo $news['url'];?>" style="background: #ececec; color:#777;"></lable> * (Урл можно изменить)<br><br>
        <textarea name="html" ><? echo $news['html'];?></textarea>
        <input class="button" name="submit" type="submit" value="Сохранить">
    </form>
</body>
</html>

 

Самая обычная форма с полями, на место значений полей подставляем текущие данные из таблицы базы данных.

Теперь опишем удаление значений из базы данных. В контроллере NewsController добавляем следующий метод обработки страницы:

public function actionDeleteNews($id)
{
    $news = News::getNewsById($id);
    if (isset($_POST['submit']))
    {
        $path = 'img/'; // Путь к папке
        $old_img_url = $news['img_url'];
        $file_name_del = $path.$old_img_url;
        if ((file_exists($file_name_del)) and ($old_img_url !== 'no_photo.png') ) {
            unlink($file_name_del);        }
        News::delete_news($id);
        header("Location: /news");
    }
    require_once(ROOT . '/views/site/delete_news.php');
    return true;
}

 

Этот обработчик использует функцию getNewsById, она описана выше. Далее проверяет, существует ли изображение к этой новости, если изображение есть и оно не nophoto.php, то он удаляет это изображение. Затем запускается функция, которая служит для удаления записи из базы – delete_news.

Функция delete_news. Удаляет из базы запись с полученным id:

public static function delete_news($id)
{
    $db = Db::getConnection();
    $sql = 'DELETE FROM news WHERE id = :id';
    $result = $db->prepare($sql);
    $result->bindParam(':id', $id, PDO::PARAM_INT);
    return $result->execute();
}

 

Страница удаления будет иметь следующий листинг:

<html>
<head>
    <title>Удаление новости</title>
</head>
<body>
    <h1>Удалить новость "<? echo $news['title']; ?>"<?php $id = $news['id']; ?></h1>
    <a href="/news">Вернуться</a>
    <br>
    <b style="color: red; font-size: 14px;">Вы действительно хотите удалить эту новость?</b>
    <br><br>
    <form method="post">
        <input type="submit" name="submit" value="Удалить" />
    </form>
</body>
</html>

 

Выглядеть она будет так:

Grai Просмотров сегодня +1 28 июня 2017 команда сайта
Ещё пока нет комментариев, будь первым!
Оставить комментарий
   🔔 Отдохните не много, может Вам будет интересно прочитать статьи пользователей нашего сайта.

Тег datalist - это список возможных вариантов

Работа с БД на MVC создание модели и выполнение SQL запросов. Часть Вторая

Тег br - это перенос строки

Как на AJAX передать переменные в PHP с выводом результата в блок с проверкой условий без перезагрузки страницы

Как на MVC с помощью PHP правильно загружать файлы с сервера. Часть Вторая

Тег base - это базовый адрес

Ограничение символов вводимых в текстовое поле на JavaScript

Как сделать добавление новостей на сайте при помощи MVC и PHP

Недостатки раскрутки групп Вконтакте специальными сервисами

Как редактировать и удалять новости на MVC и PHP

Как создать свою CMS или фреймворк на MVC. Часть Первая

Основные запросы SQL работа с базой данных PHP

Создание сайтов и мобильных приложений | Любой сложности | Android, iOS, AR, VR
Реклама Собственный фреймворк. Большие и сложные проекты. ТОП 100 разработчиков РФ.
Создание сайтов от 5 000 руб.
Мобильные приложения от 50 000 руб.
irogex.ru
Наши проекты Контакты
Реклама помогает поддерживать
и развивать наш сервис.


Подробнее
(ссылка откроется в новой вкладке)
  Реклама