Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 确保用户不发送垃圾邮件”;例如;按钮_Php - Fatal编程技术网

Php 确保用户不发送垃圾邮件”;例如;按钮

Php 确保用户不发送垃圾邮件”;例如;按钮,php,Php,我的朋友和我正在创建一个请愿板,我正在添加一个喜欢/不喜欢的功能。我打算这样做,只有用户可以喜欢/不喜欢它。问题是,我不知道如何确保用户不会多次垃圾邮件按钮,以及如何注册哪个用户喜欢/不喜欢哪个主题。下面是到目前为止我的代码 编辑:谢谢,我现在正在创建喜欢/不喜欢表。但现在我必须将用户与数据库进行比较,看看他们以前是否喜欢评论。我知道我必须使用WHERE(检查好恶表),但我不确定如何将其与IF结合起来 <?php include connect.php if (isset($_POST[

我的朋友和我正在创建一个请愿板,我正在添加一个喜欢/不喜欢的功能。我打算这样做,只有用户可以喜欢/不喜欢它。问题是,我不知道如何确保用户不会多次垃圾邮件按钮,以及如何注册哪个用户喜欢/不喜欢哪个主题。下面是到目前为止我的代码

编辑:谢谢,我现在正在创建喜欢/不喜欢表。但现在我必须将用户与数据库进行比较,看看他们以前是否喜欢评论。我知道我必须使用WHERE(检查好恶表),但我不确定如何将其与IF结合起来

<?php
include connect.php

if (isset($_POST['like']) || isset($_POST['dislike'])) 
{
    if($_SESSION['signed_in']){
        if (isset($_POST['like'])) {
            $sql="UPDATE 
                    topics
                SET
                    likes=likes+1,
                WHERE
                    id=topic_id";

            echo "You liked it";
        }

        elseif (isset($_POST['dislike'])) {
            $sql="UPDATE 
                    topics
                SET
                    dislikes=dislikes+1,
                WHERE
                    id=topic_id";

            echo "You disliked it";
        }
    }
    else{
        echo 'Please log in.'
}

?>

您应该有一个包含以下列的“喜欢”表

“article\u id”、“user\u id”主键应包含这两列

每当用户喜欢一篇文章时,将其插入likes值($article\u id,$user\u id); 由于主键,如果有人喜欢两次,它将失败

每次用户不喜欢时,从喜欢中删除,其中article\u id=$article\u id和user\u id=$user\u id。这将允许用户在需要时再次喜欢

要获取文章的喜欢数,请运行SELECT COUNT(*)作为来自喜欢的nb_of_Likes FROM Likes,其中article_id=$article_id,而不是将该数字存储在article表中


有意义吗?

以下解决方案是可能的,可以一起使用:

  • 如果您使用注册/登录机制,那么您可以在内部设置一些计数机制,以便每个用户可以在每个申请中选择一次(如Bgi建议的)
  • 你可以存储一个cookie,防止他进一步喜欢,即使他创建了一个新用户
  • 当然,人们可以删除Cookie或使用其他浏览器,因此您可以使用md5等工具对其IP进行哈希,并比较该哈希是否已经在使用请愿书
  • 当然,多个人可以共享同一个IP,因此IP哈希可能并不总是一个好的解决方案。或者,您可以使用facebook API,并要求人们拥有一定数量的朋友或其他东西,以验证他们的真实性

你永远无法完全摆脱垃圾邮件发送者,这取决于你的申请有多具体。因此,你越想阻止利用请愿书,请愿书的匿名性就越低。

为什么不使用类似facebook的按钮呢。只是一个想法。它将处理垃圾邮件问题。这是一个复杂的问题,不容易解决。确保它不会被垃圾邮件攻击的唯一方法是强迫用户在他们喜欢之前登录。即使你阻止在一台设备上进行多次投票(比听起来更难),如果我在我的电脑上、笔记本电脑上、手机上、平板电脑上、儿子的电脑上访问它会怎么样。。。。我刚刚投了5次票…@cale_b基于问题和代码,强制用户登录已经是一项要求,OP在技术实现方面存在问题。我不会从数据库中删除任何内容。改为三列:
article\u id
user\u id
,以及
like
。如果他们喜欢某样东西,请将
like
列更新为
1
。如果他们不喜欢,将其更改为
0
,如果他想跟踪不喜欢的内容,他确实可以这样做。考虑到主键的唯一限定符是防止重复的保证,这将需要一种不同于此答案的方法。此外,由于没有收集其他数据,删除是首选的解决方案,原因有二:1。删除和更新的时间大约相同,单位为db。2.减少桌上的浮肿这是假设它有类似facebook的行为。。。喜欢与否,没有不喜欢。桌子上的浮肿?这有什么关系?如果所有的东西都被编入索引,你可能会有数百万条记录,而这根本不会有什么不同。为了防止重复,只需检查是否已经有一条记录具有用户id和文章id。这还允许您在将来扩展功能,例如,如果您想添加一个明确的“不喜欢”按钮(在这种情况下,将
like
列设置为
-1
)。像这样的查询很便宜。在这里,设计比性能更重要。