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

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

Решил и я написать статью о том, как покупал сайт на бирже ТЕЛДЕРИ

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

В какие каталоги добавить свой сайт бесплатно

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

Раскрутка группы Вконтакте с помощью лайков

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

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

Тег acronym - это акроним

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

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

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

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


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