Как редактировать и удалять новости на 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 Просмотров сегодня +3 28 июня 2017 команда сайта
Ещё пока нет комментариев, будь первым!
Оставить комментарий
   🔔 Отдохните не много, может Вам будет интересно прочитать статьи пользователей нашего сайта.

Тег big - это увеличение шрифта

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

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

Тег address - это обозначения контактной информации автора

Как на MVC при помощи PHP создать регистрацию с хешированием пароля

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

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

Как создать модуль онлайн консультации с использованием чата на ajax и php

Как сделать модуль бесплатной консультации на ajax

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

Тег dd - это определение термина

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

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


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