gpt4 book ai didi

php - 使用 php 和 jquery 实现喜欢/不喜欢计数器

转载 作者:行者123 更新时间:2023-11-28 20:46:05 25 4
gpt4 key购买 nike

我有一个漫画网站,我想跟踪有多少人点击喜欢和不喜欢单个漫画 ID...我想将该值存储在我的数据库中,并将其报告回来输出到浏览器。

这是我的无效解决方案:

viewcomic.php:

    <script type="text/javascript">
function likeCounter(choice) {
var site = $("#site").val();
var imgid = $("#imgid").val();
$.get("./scripts/likecounter.php", {_choice : choice, _site : site, _id : imgid},
function(returned_data) {
$("#choice").html(returned_data);
}
);
}
</script>
//Changed to try and work with buttons
<button id="like" onClick="likeCounter(this.id)">Like</button>
<button id="dislike" onClick="likeCounter(this.id)">Dislike</button>
<input id="site" type="hidden" value="<?php echo $site; ?>">
<input id="imgid" type="hidden" value="<?php echo $imgid; ?>">

<br />
Likes: <span id="choice"></span>

likecounter.php

<?php 
include 'dbconnect.php';

$site = $_GET['_site'];
$imgid = $_GET['_id'];
$input = $_GET['_choice'];

if ($site == "artwork") {
$table = "comics";
}
else {
$table = "artwork";
}

$likes = $mysqli->query("SELECT like FROM $table WHERE id = $imgid");
$dislikes = $mysqli->query("SELECT dislike FROM $table WHERE id = $imgid");


if ($input == "like") {
$sql = "UPDATE $table SET like = like + 1 WHERE id = $imgid";
$mysqli->query($sql);
$likes++;

else if ($input == "dislike") {
$sql = "UPDATE $table SET like = dislike + 1 WHERE id = $imgid";
$mysqli->query($sql);
$dislikes++;
}
mysqli_close($mysqli);

echo "Likes: " . $likes . ", Dislikes: " . $dislikes;

?>

它不会增加数据库值,也不会向浏览器报告值。有什么建议吗?

谢谢!

最佳答案

技术问题是这一行:

$.get("./scripts/likecounter.php", {_choice : choice, _site : site, _id : id}...

由于站点和 ID 未定义,您将收到 JavaScript 错误ReferenceError:站点未定义

尝试:

$.get("./scripts/likecounter.php", {_choice : choice, _site : "<?php echo $site; ?>", _id : "<?php echo $imgid; ?>"}...

您不需要隐藏的输入,onClick 也应该是 onclick

其他快速建议:

确保 $imgid 实际上是一个整数:

$imgid = intval($_GET['_id']);
if($imgid == 0) exit('Invalid id');

以下内容不需要分开:

$likes = $mysqli->query("SELECT like FROM $table WHERE id = $imgid");
$dislikes = $mysqli->query("SELECT dislike FROM $table WHERE id = $imgid");

$result = $mysqli->query("SELECT like_count, dislike_count FROM $table WHERE id = $imgid");

$mysqli->query 只会返回一个 mysqli_result,这意味着你不能只是回显它,你必须进行一次提取,因为你知道你只得到一个结果你可以使用 list($likes, $dislikes) = $result->fetch_array(MYSQLI_NUM);

阅读docs帮助你理解我到底在说什么。

正如您提到的,人们可以随心所欲地点击喜欢/不喜欢,您需要使用某种 IP 日志来限制这一点。例如,设置一个包含以下字段的新数据库表; ip、表、imgid。然后当有人“喜欢”时记录他们的 IP:

$sql = "INSERT INTO xxx (ip, table_name, imgid) VALUES(\"".$_SERVER['REMOTE_ADDR']."\", \"$table\", $imgid)";
$mysqli->query($sql);

然后在添加新记录之前检查他们是否有记录:

$sql = "SELECT ip FROM xxx WHERE ip = \"".$_SERVER['REMOTE_ADDR']."\" AND table_name = "$table" AND imgid = $imgid";
$result = $mysqli->query($sql);
if($result->num_rows == 0) { ...if($input ==... }

关于php - 使用 php 和 jquery 实现喜欢/不喜欢计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13408308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com