繁体   English   中英

似乎无法让我喜欢/不喜欢在PHP中工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM