Добавить сайт в каталог БЕСПЛАТНО в каталоге уже более 1065 сайтов!!!


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

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

'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. Настройка рекламы в личном кабинете.
SEO продвижение ваших сайтов от 25 000 руб. в мес. Создание сайтов и мобильных приложений от 5 500 руб. Любой сложности!
Реклама Собственный фреймворк. Большие и сложные проекты. ТОП 100 разработчиков РФ.
irogex.ru
→ BULLET-SHOP - сварка аргоном, полуавтомат, тюнинг авто!
Реклама Ремонтируем радиаторы, интеркулеры, пайпинг и ВСЁ из алюминия, чугуна, стали с ГАРАНТИЕЙ КАЧЕСТВА. Диагностика и ремонт подвески, трансмиссии, всех узлов и агрегатов
www.bullet-shop.pro
→ Доставка товаров из Китая в кротчайшие сроки без переплат!
Реклама Вам нужен товар из Китая мы с радостью доставим его, а также поможем с выкупом товара с ТаоБао, АлиБаба, 1688.com. Помощь в переводе при заключении сделок!
www.unikorob.ru
Реклама помогает поддерживать
и развивать наш сервис.


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