Как я могу удалить лайк из моей базы данных, если user_id и post_id совпадают? - PullRequest
1 голос
/ 01 мая 2019

Я хочу проверить, понравился ли пользователю этот пост, и удалить его из базы данных.

Я пытался сделать оператор if, но он не попадет в else и добавит лайки, даже если user_id и post_id совпадают.

Like.class.php

private function Addlike(){
                $conn = db::getInstance();
                $query = "insert into likes (post_id, user_id) values 
                (:post_id, :user_id)";
                $statement = $conn->prepare($query);
                $statement->bindValue(':post_id',$this->getPostId());
                $statement->bindValue(':user_id',$this->getUserId());
                $statement->execute();
            }
        private function Deletelike(){
                $conn = db::getInstance();
                $query = "DELETE FROM likes WHERE post_id = :post_id 
                AND user_id =:user_id";
                $statement = $conn->prepare($query);
                $statement->bindValue(':post_id',$this->getPostId());
                $statement->bindValue(':user_id',$this->getUserId());
                $statement->execute();
        }

        public function CheckLike(){
                $conn = db::getInstance();
                $query = "SELECT COUNT(*) FROM likes WHERE 
                post_id=:post_id AND user_id=:user_id";
                $statement = $conn->prepare($query);
                $statement->bindValue(':post_id',$this->getPostId());
                $statement->bindValue(':user_id',$this->getUserId());
                $statement->execute();
                $result = $statement->fetchAll(PDO::FETCH_ASSOC);
                if($result["COUNT(*)"] == 0){
                    $this->Addlike();
                }else{
                    $this->Deletelike();
                }
                return $result;
        }

Если вы нажимаете «Нравится» в первый раз, вам должно понравиться сообщение, и оно должно быть сохранено в базе данных. Если вы нажмете еще раз, вы в отличие от сообщения, и оно будет удалено из базы данных. Но теперь он выполняет только функцию Addlike ...

1 Ответ

0 голосов
/ 01 мая 2019

Я думаю, PDO::FETCH_ASSOC возвращает многомерный массив при использовании с PDOStatement::fetchAll, в соответствии с https://www.php.net/manual/en/pdostatement.fetchall.php#refsect1-pdostatement.fetchall-examples.

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

if($result[0]["COUNT(*)"] == 0){
    $this->Addlike();
}else{
    $this->Deletelike();
}

Если индекс массива не существует, PHP считает его ложным, что объясняет, почему вы всегда добавляетелайки, так как false == 0 в PHP.

Если вы хотите избежать этой эквивалентности false и 0, используйте одинаковый оператор для сравнения типов:

if ($result["COUNT(*)"] === 0) {
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...