我有一个按钮,在点击时将数据库中的表值加1(即类似按钮)。
When the user clicks the button:
var button_id = $(e.target).closest('div').attr('id');
var id = button_id.substring(12);
$.ajax({
method: 'POST',
url: 'update_like.php',
data: {id:id},
success: function(){
//
},
error: function(){
//
}
})
update_like.php
$id = mysqli_real_escape_string($conn,$_POST['id']);
if (!empty($_POST)){
mysqli_query($conn,"UPDATE posts SET likes=likes+1 WHERE id='$id'");
}
问:有什么方法可以检查他们是否已经喜欢它,以便他们只能喜欢这个帖子一次?
我只想到这样的事情:
有一个名为“likers”的列或类似的列,其中有一长串喜欢该帖子的用户ID。
即
5 217 16 31893 ...
< - 用户ID
在update_like.php
中,检查是否可以在该字符串中找到登录ID的用户。类似的东西:
$id = mysqli_real_escape_string($conn,$_POST['id']);
$result = mysqli_query($conn,"SELECT likers FROM posts WHERE id='$id'");
$likers = mysqli_fetch_assoc($result);
$user_id = $_SESSION['id']; // user ID
if (!empty($_POST)){
if (!(preg_match("/\b$user_id\b/", $likers))){
mysqli_query($conn,"UPDATE posts SET likes=likes+1 WHERE id='$id'");
}
}
这可行吗?
答案 0 :(得分:2)
你可以试试这个:
var button_id = $(e.target).closest('div').attr('id');
var id = button_id.substring(12);
var idArray = [];
if (idArray.indexOf(id) === -1) {
ajaxCall = $.ajax({
method: 'POST',
url: 'update_like.php',
data: {id:id},
success: function(){
//
idArray.push(id);
},
error: function(){
//
}
});
}
在服务器端,您可以尝试: 假设ID是逗号分隔列表。
UPDATE posts
SET likes = likes+1
WHERE id = '$id'
AND FIND_IN_SET('$id', listofuserid) = 0