javascript - jQuery PHP MySQL 喜欢按钮

标签 javascript php jquery ajax

我想使用 PHP、MySQL 和 jQuery 创建一个点赞按钮,但似乎有错误,我不知道它在哪里,你能帮忙吗?

我有两个页面[index.php 和callback.php]

索引

$k = 1; //POST ID

$nip = 24; //USER ID

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
        $(document).on('click', '.like', function(){
            if($(this).attr('title')=='Like'){
                $.post('callback.php',{k:$(this).attr('id'),action:'like'},function(){
                    $(this).text('Unlike');
                    $(this).attr('title','Unlike');
                });
            }else{
                if($(this).attr('title')=='Unlike'){
                    $.post('callback.php',{k:$(this).attr('id'),action:'unlike'},function(){
                        $(this).text('Like');
                        $(this).attr('title','Like');
                    });
                 }
             }
        });
    });
    </script>
</head>
<body>

<?php
$query=$db->prepare("SELECT * FROM activity WHERE nip = :nip AND value = :value");
$query->execute(array(
    ':nip'      => $meNip,
    ':value'    => $k
    )
);
$all = $query->rowCount();
if($query->rowCount()==1){
    echo '<a href="#" class="like" id="'.$k.'" title="Unlike">Unlike</a> <b>'.$all.'</b>';
}else{
    echo '<a href="#" class="like" id="'.$k.'" title="Like">Like</a> <b>'.$all.'</b>';
}
?>
</body>
</html>

回调

$nip= //COOKIE

$k= $_POST['k'];

$action=$_POST['action'];

if (!empty($k)) {
    $checkAd=$db->prepare("SELECT * FROM ad WHERE id = :id");
    $checkAd->execute(array(
        ':id'   => $k
        )
    );
    $checkingAd=$checkAd->fetchAll(PDO::FETCH_ASSOC);
    foreach ($checkingAd as $row) {

    //LIKE
    if ($action=='like'){
        $callback=$db->prepare("SELECT * FROM activity WHERE nip = :nip AND value = :value");
        $callback->execute(array(
            ':nip' => $meNip,
            ':value' => $k
            )
        );
        $matches=$callback->rowCount();
        if($matches==0){
        $callback=$db->prepare("UPDATE ad SET likes = :likes WHERE id = :id");
        $callback->execute(array(
            ':likes'    => $row['likes']+1,
            ':id'   => $k
            )
        );
        $callback=$db->prepare("INSERT INTO activity (nip, value) VALUES(:nip, :value)");
        $callback->execute(array(
            ':nip'  => $meNip,
            ':value' => $k
            )
        );
    }
    }elseif ($action=='unlike'){ //UNLIKE
        $callback=$db->prepare("SELECT * FROM activity WHERE nip = :nip AND value = :value");
        $callback->execute(array(
            ':nip'  => $meNip,
            ':value' => $k
            )
        );

        $matches=$callback->rowCount();
        if($matches==1){
            $callback=$db->prepare("UPDATE ad SET likes = :likes WHERE id = :id");
            $callback->execute(array(
                ':likes' => $row['likes']-1,
                ':id'   => $k
                )
            );
            $callback=$db->prepare("DELETE FROM activity  WHERE nip = :nip AND value = :value");
            $callback->execute(array(
                ':nip'  => $meNip,
                ':value' => $k
                )
            );
            }
        }
    }
 }
 ?>

我测试了callback.php文件,(使用GET的地址栏)它工作正常,你能检查一下INDEX吗,我想,我错过了一些东西,一个点?

感谢您的帮助

最佳答案

您在 $.post 中对 $(this) 的引用不正确。您可能认为 $(this) 将是 .like 元素,但事实并非如此。 $.post 中的 this 会返回类似的内容:

Object { readyState=1, getResponseHeader=function(), getAllResponseHeaders=function(), more...}
Object { url="callback.php", type="POST", isLocal=false, more...}

下面的代码应相应地更改文本。

<script type="text/javascript">
$(document).ready(function(){
    $(document).on('click', '.like', function(){
        var $this = $(this);
        var likes_count = $('.likes_count');
        if($(this).attr('title')=='Like'){
            $.post('callback.php',{k:$(this).attr('id'),action:'like'},function(){
                $this.text('Unlike');
                $this.attr('title','Unlike');
                var likes = parseInt(likes_count.text())+1;
                likes_count.text(likes);
            });
        }else{
            if($(this).attr('title')=='Unlike'){
                $.post('callback.php',{k:$(this).attr('id'),action:'unlike'},function(){
                    $this.text('Like');
                    $this.attr('title','Like');
                    var likes = parseInt(likes_count.text())-1;
                    likes_count.text(likes);
                });
             }
         }
    });
});
</script>

关于javascript - jQuery PHP MySQL 喜欢按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21909576/

相关文章:

javascript - AddThis 按钮不会更新以包含片段(#Hash 标签)

php - 如何将对象上下文传递给匿名函数?

jquery - 固定 Bootstrap 导航栏下的模糊效果

javascript - 我需要使用什么生命周期 Hook ? - react

javascript - 带有 promise 的 Angular 异步上传文件

javascript - 将 JSON 对象连接到数组中

javascript - 全日历 : trouble rendering events with ajax when pressing 'prev' or 'next'

php - 为什么 (My)SQL 中的 Sum() 函数返回的值是我期望的值的两倍?

jquery - 使用 jQuery 和 jQueryui 设置日期选择器中的最小日期

javascript - 为什么这些 Javascript 不一样?