Безопасное удаление новостей: Как эффективно управлять контентом

Andre Kowalsy
92 раза
6 мин чтения
Опубликовано: 30-11-2025
Обновлено: Не обновлялось
Категории: Разработка

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

1. HTML Разметка

Начнем с HTML-разметки для управления действиями с новостями. Мы создадим интерфейс, который предоставляет пользователю возможность удалить или отредактировать новость.

<div class="col">
    <div class="row">
        <div class="col-sm-6">
            <strong>Действия</strong>
        </div>
        <div class="col-sm-3">
            <div class="btn-group btn-group-sm">
                <a href="./del?n=<?=$id_news;?>" class="btn btn-outline-danger" onclick="return confirmDelete();"><i class="bi bi-trash"></i></a>
            </div>
        </div>
        <div class="col-sm-3">
            <div class="btn-group btn-group-sm">
                <a href="./edit?n=<?=$id_news;?>" class="btn btn-outline-primary"><i class="bi bi-pencil-square"></i></a>
            </div>
        </div>
    </div>
</div>

2. JavaScript Функция

Теперь добавим простую JavaScript-функцию, которая будет вызывать подтверждение при попытке удалить новость. Это улучшит защиту от случайного удаления и повысит пользовательский опыт.

/* Функция для отображения окна подтверждения удаления новости
 Возвращает true, если пользователь подтвердил удаление,
 и false, если пользователь отменил операцию. */
function confirmDelete() {
    return confirm("Вы действительно хотите удалить эту новость?");
}

3. Обработка в PHP

Перейдем к серверной части, которая обрабатывает запрос на удаление новости и связанных записей. Этот код гарантирует, что при удалении новости также будут удалены все связанные изображения.

public function delAction()
{
    $del = $this->getRequestID(TRUE, 'n'); // Получение ID новости

    if ($del) {
        // Получаем путь к изображению
        $src = R::getCell('SELECT news.image FROM news WHERE news.id = ?', [$del]);

        if (!$src) {
            $_SESSION['response']['error'] = '<li>Новость не найдена или изображение отсутствует.</li>';
            redirect();
        }

        // Удаляем новость и связанные данные
        $newsDeleted = R::exec("DELETE FROM news WHERE news.id = ?", [$del]);
        $relatedDeleted = R::exec("DELETE FROM news_related WHERE news_related.news_id = ?", [$del]);

        // Проверяем, был ли удален новость
        if ($newsDeleted > 0 && $relatedDeleted > 0) {
            $this->deleteImageFiles($src); // Удаляем файлы изображений
            $_SESSION['response']['success'] = 'Новость успешно удалена';
        } else {
            $_SESSION['response']['error'] = '<li>Ошибка при удалении новости или связанных данных.</li>';
        }
    } else {
        $_SESSION['response']['error'] = '<li>Некорректный идентификатор.</li>';
    }

    redirect();
}

// Вспомогательная функция для удаления файлов изображений
private function deleteImageFiles($src)
{
    if ($src === 'news_default.png') return; // Если это файл по умолчанию, выходим из функции

    $paths = [
        WWW . '/assets/img/blog/' . $src,
        WWW . '/assets/img/gallery/' . $src,
        WWW . '/assets/img/small/' . $src,
    ];

    foreach ($paths as $path) {
        if (file_exists($path)) {
            unlink($path); // Удаляем файл
        }
    }
}

Заключение

Процесс безопасного удаления новостей в веб-приложении — важный аспект управления контентом. Использование JavaScript для подтверждения удаления и последовательного подхода в PHP для обработки запросов обеспечит, что ваши пользователи смогут уверенно управлять новостями, минимизируя риски случайных действий. Важно поддерживать положительный пользовательский опыт при любых операциях с контентом.