[英]Can't seem to get my like/dislike to work in PHP
我的表是comment_likedislike。 它具有comment_counterid,comment_counter,comment_id(来自另一个表)字段。 我有一个网址(LIKE),单击该网址即可链接到此代码,并获取comment_id和like_id。
我想做一个计数,如果它是第一个“赞”,它将在comment_likedislike表中存储一个新的comment_counter。 但是,如果表中的注释已经有一个“赞”,它只会将comment_counter更新为+1。
问题:当我运行这段代码时,无论是否有类似的注释,它都不是UPDATE(第一个语句),而是INSERT(第二个if语句)。 我不认为代码正在检查表中是否已经有comment_id。
我是一个PHP新手。
谢谢!
if (isset($_GET['comment_id']) && isset($_GET['like_id'])) {
$query5="SELECT * FROM comment_likedislike ";
$data5=mysqli_query ($dbc, $query5);
while ($row5= mysqli_fetch_array($data5)){
$comment_id2=$row5['comment_id'];
}
if ($comment_id2 == $_GET['comment_id']){
$counter=$row5['comment_counter'];
$counter++;
$query= "UPDATE comment_likedislike SET comment_counter ='$counter' WHERE comment_id= '".$_GET['comment_id']."' ";
mysqli_query($dbc, $query);
}
if ($comment_id2 != $_GET['comment_id']) {
$counter2=1;
$query9 = "INSERT INTO comment_likedislike (comment_counter, comment_id) VALUES ('$counter2', '".$_GET['comment_id']."' )";
mysqli_query($dbc, $query9);
}
}
您应该在SQL查询中放入WHERE子句,而不要获取整个表并在PHP中进行解析。
if (isset($_GET['comment_id']) && isset($_GET['like_id'])) {
$query5="SELECT * FROM comment_likedislike WHERE comment_id = '" . $_GET['comment_id'] . "'";
$data5 = mysqli_query ($dbc, $query5);
$row5 = mysqli_fetch_array($data5);
然后,您可以打开empty($ row5)的值。
您的代码已损坏,因为$ comment_id2将始终是表中的最后一个注释ID。 您拉出整个表,然后依次将$ comment_id2设置到每个“ comment_id”字段。
我试图根据您的代码推断出您要做什么。 似乎您要尝试在与GET参数中存在的给定注释ID对应的行中增加一个计数器。 如果没有与该注释相对应的行,则要创建一个新注释。
如果这是您打算要做的,那您就错了。 很难解释您的代码有多错误,因为我无法弄清楚您要使用哪种代码来编写这样的代码。
首先,应在SQL查询中检查是否存在该行,然后需要修改if语句的结构:
if (isset($_GET['comment_id']) && isset($_GET['like_id'])) {
// Ignoring obvious SQL injection vulnerability for now
$query5="SELECT * FROM comment_likedislike WHERE comment_id = '" .
$_GET['comment_id'] . "'";
$data5=mysqli_query ($dbc, $query5);
if ($row5= mysqli_fetch_array($data5)){
$counter=$row5['comment_counter'];
$counter++;
$query= "UPDATE comment_likedislike SET comment_counter ='$counter' WHERE comment_id= '".$_GET['comment_id']."' ";
mysqli_query($dbc, $query);
}
else
$counter2=1;
$query9 = "INSERT INTO comment_likedislike (comment_counter, comment_id) VALUES ('$counter2', '".$_GET['comment_id']."' )";
mysqli_query($dbc, $query9);
}
}
我还建议您阅读停止PHP中SQL注入的最佳方法,因为您永远都不想在示例中以这种方式构建查询。 (或者是我的。)
使用echo
语句查看$_GET['comment_id']
和$comment_id2
实际获得的值。 由于您永远都不会碰到更新案例,因此两个值绝不能相等。
导致它们不匹配的原因可能有多种,从一个或另一个值的多余空格(可以修剪)到HTML表单(其中包含导致无法发送参数的错误)的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.