Как редактировать и удалять новости на 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>

 

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

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

Создание профиля или личного кабинета пользователя на MVC, PHP и SQL

Как сделать алгоритм поиска по нескольким словам на PHP из БД

Тег audio - это управление аудиофайлом

Как на MVC с помощью PHP загружать изображения на сервер

Тег area - это область ссылки

Тег caption - это заголовок таблицы

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

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

Тег abbr - это аббревиатура

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

Как добавить свой сайт в поисковые системы GOOGLE и YANDEX

Как проверить радио кнопку checkbox без перезагрузки страницы ajax php
Здесь может быть ваша реклама! Блок 3. Настройка рекламы в личном кабинете.

Здесь может быть ваша реклама! Блок 4. Настройка рекламы в личном кабинете.
Создание сайтов и мобильных приложений от 5 500 руб. Любой сложности!
Реклама Собственный фреймворк. Большие и сложные проекты. ТОП 100 разработчиков РФ.
irogex.ru
Конструкторы Ugears купить в Иркутске от 690 руб. с Доставкой!
Реклама UGEARS это путешествие в удивительную атмосферу гармонии природы и совершенства конструкторской мысли
ugears-irk.ru
Стоматология в Улан-Удэ | ДентаВита | Шок цены от 100 руб!
Реклама От всей нашей семьи хотим выразить огромную благодарность стоматологической клинике
dentavita03.ru
Реклама помогает поддерживать
и развивать наш сервис.


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