@vigaset12

Как реализовать корректную систему удаления комментария?

Здравствуйте!

<div class="comments__container">
                <div  class="comments__body">
                    <?php
                        $comments = [];

                        $query = $conn->query("SELECT * FROM `comments`");
                        $comments = $query->fetchAll(PDO::FETCH_ASSOC);

                        foreach($comments as $comment){
                            ?>
                                <div class="comments__item">
                                    <div class="comments__people">
                                        <div class="comments__name"><?= $comment['name']?></div>
                                    </div>
                                    <?php
                                        if($comment['user_id'] == $_COOKIE['user_id']){
                                            ?>
                                                <div class="comments__control">
                                                    <a href="php/change_comment.php" class="comments__change">Изменить</a>
                                                    <a href="php/delete_comment.php" class="comments__delete">Удалить</a>
                                                </div>
                                            <?php                                        
                                        }
                                    ?>
                                    <div class="comments__message"><?= $comment['message']?></div>
                                </div>
                            <?php                               
                        }
                    ?>
                </div>
            </div>


Сейчас при нажатие на кнопку удалить комментарий идет переход в этот php file:

<?php
require 'config.php';
    $user_id = $_COOKIE['user_id'];
    
    $delete = $conn->prepare("DELETE FROM `comments` WHERE `user_id` = :user_id");
    $delete->execute(['user_id' => $user_id]);
    header('Location: ../index.php');
?>


Как удалять только один комментарий а ни все?
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
для того чтобы удалить конкретный комментарий, нужно передавать его id, ну и тогда запрос будет:
DELETE FROM `comments` 
WHERE `user_id` = :user_id 
and `id` = :comment_id

Кроме того, в куках держать айди пользователя нельзя (я спокойно могу напихать в свои куки любой айди и рулить всеми доступами рандомного пользователя). Для этого есть сессии. Так же, для удаления комментариев лучше использовать специальное поле, отвечающее за статус комментария, меняя его на (условно) "удален".

Так же, для таких случаев лучше подходит яваскрипт и аякс запросы, чем перезагрузка страницы формой.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы