dongquan8753 2014-02-20 13:40
浏览 57
已采纳

jQuery PHP MySQL Like按钮

I would like to create a like button using PHP, MySQL and jQuery, but seems there's an error, i don't know where is it, can you help ?

I have two pages [index.php & callback.php]

INDEX

$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>

CALLBACK

$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
                )
            );
            }
        }
    }
 }
 ?>

I tested the callback.php file, (address bar using GET) it's working fine, can you check the INDEX, i think, i miss something, a dot ?

Thanks for your help

  • 写回答

1条回答 默认 最新

  • dongshenjie3055 2014-02-20 14:01
    关注

    Your reference to $(this) in $.post is incorrect. You probably assumed $(this) will be the .like element, but that's not the case. this in a $.post would return something similar:

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

    The code below should change the text accordingly.

    <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>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 数字取证课程 关于FAT文件系统的操作
  • ¥15 如何使用js实现打印时每页设置统一的标题
  • ¥15 安装TIA PortalV15.1报错
  • ¥15 能把水桶搬到饮水机的机械设计
  • ¥15 Android Studio中如何把H5逻辑放在Assets 文件夹中以实现将h5代码打包为apk
  • ¥15 使用小程序wx.createWebAudioContext()开发节拍器
  • ¥15 关于#爬虫#的问题:请问HMDB代谢物爬虫的那个工具可以提供一下吗
  • ¥15 vue3+electron打包获取本地视频属性,文件夹里面有ffprobe.exe 文件还会报错这是什么原因呢?
  • ¥20 用51单片机控制急停。
  • ¥15 孟德尔随机化结果不一致