PHP - 在用户上执行任务只需单击一次

时间:2017-01-03 12:15:42

标签: javascript php html sql

我正在开发类似于facebook的功能的功能。有一个登录和SESSION以及所有内容,但问题是,一旦用户登录,他可以多次点击这样的内容,每次都会更新值。我不希望这种情况发生。我希望用户只针对该特定代码单击一次。之后,即使用户再次点击它也不会发生任何事情。我在互联网上搜索过这个,但是我发现许多复杂的答案要么不起作用,要么难以理解。 如果答案是用PHP或JavaScript来表达的,我将不胜感激。

以下是代码:

$likes = $row['like'];
if(is_null($likes)){
    echo "<p>No Likes Yet.</p>";
}else{
    echo "<p style='display: inline; color: #808080;'>".$likes."  Likes</p><br>";
}
echo "<br><a href='like.php?id=".$id."'><img src='images/like.png' style='width:30px; height: 30px; margin-left: 10px;'/></a>";
?>

请注意,上面锚标记中的like.php是Like更新到数据库的位置。

2 个答案:

答案 0 :(得分:0)

将其添加到<a>标记

onclick="this.remove()"

当您按下投票按钮时,此按钮将被移除,无法再次投票。

答案 1 :(得分:0)

您需要将用户操作存储在表中,这非常简单。您创建一个新表来记录'user_id'和他点击'like'的'item_id'。然后你可以使用一个php函数检查这个表,当用户访问或尝试再次喜欢该项目时,如果他已经做了你可以删除链接,只是不要让这样的总和。

要检查的功能如下:

function checkUserAction() {
        $actionQuery = mysql_query("SELECT COUNT(*) AS total FROM actions WHERE user_id={$_SESSION['user']} AND item_id = {$_GET['item']}");
        $actionTotal = mysql_fetch_array($actionQuery);
        return $actionTotal['total'];
    }

该函数将用户喜欢的数量返回给项目。如果他已经喜欢它将是1,如果不是0.有了这个你可以做一个真或假检查显示或不显示链接:

if(checkUserAction()) { // if true don't link

echo "<br><img src='images/like.png' style='width:30px; height: 30px; margin-left: 10px;'/>";

} else { // if false link

echo "<br><a href='like.php?id=".$id."'><img src='images/like.png' style='width:30px; height: 30px; margin-left: 10px;'/></a>";

}

如果他已点击,您可以显示另一张图片让他知道。

记录在记录喜欢次数时执行简单插入查询所需的操作:

mysql_query("INSERT INTO actions(user_id,item_id) VALUES({$_SESSION['user']},{$_GET['item']})");

更新:这是如何将用户的喜欢存储在一行中以避免创建数千行的草图。在表格中,“喜欢”字段应更改为VARCHART字段以存储一串数字:

// The first time a user likes INSERT a new row
mysql_query("INSERT INTO test.doarray(user,likes) VALUES(1,'25,12')");
// New likes are added with CONCAT() separated with commas (or other char you choose)
mysql_query("UPDATE test.doarray SET likes = CONCAT(likes,',24,53') WHERE user = 1");
// Now when you fetch the data you can transform it in an array using explode()
$doQuery = mysql_query("SELECT * FROM test.doarray WHERE user = 1");
while($doFetch = mysql_fetch_array($doQuery)) {
    $result = explode(",",$doFetch['likes']);
}
print_r($result);

现在您可以使用以下方法检查项目是否已被喜欢:

in_array($_GET['item_id],$result);