我想使用 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/