Безопасное удаление новостей: Как эффективно управлять контентом
В этом посте мы рассмотрим процесс удаления новостей из веб-приложения. Вы узнаете о необходимых действиях, которые нужно предпринять для безопасного удаления контента, а также о том, как поддерживать положительный пользовательский опыт при этом.
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 для обработки запросов обеспечит, что ваши пользователи смогут уверенно управлять новостями, минимизируя риски случайных действий. Важно поддерживать положительный пользовательский опыт при любых операциях с контентом.
Добавить комментарий или задать вопрос ツ
Комментариев нет