如何限制用户两次更新同一行

时间:2013-10-10 22:12:10

标签: php mysql

我正在尝试创建类似于Facebook LIKE按钮的系统。我想让用户喜欢图片,但只让他们喜欢它一次。在他们喜欢之后,他们应该只能与之不同。

我目前的代码是:

<?php
$id = $_GET["picID"];

    include 'db.php';

    $colID  = str_replace('_', ' ', $_GET['picID']);
    $colID  = mysql_escape_string($picID);

    $sql = "SELECT * FROM picture WHERE id = $id";
    $result = mysql_query($sql) or die (mysql_error()."<br/>".sql); 
    $row = mysql_fetch_array($result);


    $update = "UPDATE picture SET likes=likes+1 WHERE id='$id'";
    mysql_query($update) or die (mysql_error()."<br/>".update);     
    echo "Thank you";

?>

目前,我使用超链接触发“赞”动作:

<a href='like.php?colID=$row[id]'>Like</a>

最后我想将其更改为AJAX,这样用户只需单击Like(如在Facebook上),无需更改页面。我还在读如何做到这一点。这个任务有一个特定的名字吗?或者有人能告诉我演示我能做到吗?

修改

用户需要登录才能欣赏图片。我有两个未关联的表格,UserPictures。目前,用户可以继续点击“赞”,并在类似列中添加1。

2 个答案:

答案 0 :(得分:0)

一种方法是创建一个包含图片ID列和用户ID的表,以显示某人喜欢某张特定图片。如果表中列出了具有图片ID的用户ID,那么您不应该允许他们喜欢图片,因为他们已经喜欢它。您可以使用对数据库的查询执行此检查,该查询将返回1或0的计数。

答案 1 :(得分:0)

在数据库中创建一个字符串列,以指示谁喜欢该图片。

如果用户已登录(因此可以投票),请通过对其进行爆炸并循环来搜索字符串中的姓名。然后从字符串中删除他的名字或添加它。 请注意,您还可以使用序列化将数组直接保存到数据库: http://php.net/manual/en/function.serialize.php

对于快速加载,您可以使用其他列,其中包含第一列的名称计数。