如何用PHP中的简单“赞”页面多次赞?

时间:2019-06-06 04:20:56

标签: php mysql sql mysqli

我为正在处理的项目制作了一个简单的类似页面。我有一个包含发言者的页面,每个发言者都有一个喜欢的按钮,单击该按钮后,它会指向我的具有发言者ID的like_code php页面,并且成功将数据库更新为1 like。这行得通。

现在我的问题是我只能喜欢一次,我有一个变量'1',每次按下按钮时,都会使用sql UPDATE将其添加到现有的类似计数器中。但是由于某种原因,我只能让每个发言者都喜欢一次,如果我在数据库中手动添加了更多的点赞(例如7),则当我再次单击“点赞”按钮时,它会被覆盖并降为1。

到目前为止,我还没有在网上发现任何类似的问题,而且每个类似的在线系统与我的都有很大不同。我也不要使用userid,speakerid + likecounter在同一张表中。这是我在数据库中为类似代码使用的仅有两个值。

<?php 

require_once('website/script/database.php');

if(isset($_GET['idsprekers'])){
    //Get idsprekers
    $id = $_GET['idsprekers'];

    $a = "1";
    $liked = $row['likecounter'];
    $liked = $liked + $a;

    //Prepare query
    $sql = "UPDATE sprekers SET likecounter=$liked WHERE idsprekers=?";

    //$stmt = statement
    $stmt = $mysqli->prepare($sql);

    //Parameter
    $stmt->bind_param("i", $id);

    //Execute query
    $stmt->execute();


}

header("location:overzicht_spreker.php");

?>

链接到我的演讲者页面上的演讲者

print('<div class="col-2"><a href="like_code.php?idsprekers=' . $tempId 
.'" class="btn-like"><i class="far fa-heart"></i></a></div>');

我的预期结果是,当我单击“喜欢”按钮时,它每次都会更新数据库,当我单击它时,它将在数据库中显示1个赞,而当我再次单击它时,它将显示2个赞。现在,除非我手动输入,否则它只显示1,并且不希望退缩。

1 个答案:

答案 0 :(得分:0)

在查询本身中使用SET field = field + 1

$sql = "UPDATE sprekers SET likecounter=likecounter+1 WHERE idsprekers=?";

现在修改的代码将如下所示:

<?php 

require_once('website/script/database.php');

if(isset($_GET['idsprekers']) && $_GET['idsprekers'] > 0 ){ //check id is not coming as 0
    //Get idsprekers
    $id = $_GET['idsprekers'];

    //Prepare query
    $sql = "UPDATE sprekers SET likecounter=likecounter+1 WHERE idsprekers=?";

    //$stmt = statement
    $stmt = $mysqli->prepare($sql);

    //Parameter
    $stmt->bind_param("i", $id);

    //Execute query
    $stmt->execute();


}else{
    die('speaker id required'); //if id didn't came, throw an error
}

// apply exit or die along with header(), otherwise code execution won't stop and will create a big security loophole.
header("location:overzicht_spreker.php");exit; 

?>

注意:-请特别注意代码部分的注释。