【问题标题】:Member gets member: granting points会员获得会员:授予积分
【发布时间】:2011-08-09 13:14:04
【问题描述】:

我的网站有一个推荐给朋友的按钮。 为了鼓励人们使用这个功能,我想用积分奖励那些使用它的人(积分将兑换奖品..还不知道)。

好的,所以我有这个结构:

form.php

您可以在此处输入您朋友的电子邮件,并根据需要向他/她发送消息。还有一个隐藏的输入会将您的用户 ID 发送到 action.php。

action.php

是 phpmailer 发挥作用的地方,如果有的话,您的消息和“访问我的网站”链接(我的网站中包含您的用户 ID 的 process.php 链接)将发送给您的朋友。

您的朋友点击链接并访问 process.php

此文件连接到我的 MySQL 数据库表,选择用户 ID 发送的点数,为好友推荐增加 10 个点数,然后将最终点数插入表中。 然后有一个:

header("Location: http://www.mysite.com");

所以你的朋友看不到 process.php 工作。

一切都很好,但对于: 如果您的朋友一直点击该链接,他/她将获得无穷无尽的积分。

我该如何解决这个问题?

非常感谢!

【问题讨论】:

  • 您的意思是在 URL 上附加一个哈希,然后将该哈希存储在一个表中,并在处理完成后将其标记为完成?类似的东西?

标签: php mysql ajax email


【解决方案1】:

当他们点击电子邮件中的链接时,我首选的让流程只发生一次的方法是有一个类似的表格:

CREATE TABLE friends (
   id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   hash VARCHAR(100),
   active TINYINT(1) DEFAULT 1,
   [user id's or other associative fields you want]
) TYPE=innodb;

然后,当我生成电子邮件的 url 时,我将在末尾附加一个哈希:

http://my.url.com/process.php?hash=[hash]

并将散列和相关信息存储在数据库中,然后当他们单击链接时,我使用散列提取用户 ID 并进行任何处理并将活动从 1 更改为 0。

下次他们点击链接时,您将拉取记录,如果 active 设置为 0,您只需返回一个页面,上面写着“你已经得到了作弊者的积分”:) 或更专业的东西。 (我一直想把人们叫出来,但权力总是阻止我)

如果您需要进一步解释,请告诉我:)

【讨论】:

    【解决方案2】:

    为您发送的每封电子邮件生成一个唯一令牌,并将该令牌包含在电子邮件内的 url/链接中。还将所有令牌存储在数据库表中。当有人单击链接并访问您的网站时,搜索该令牌并将其标记为已访问。仅在令牌尚未标记为已访问时添加 10 个点。

    【讨论】:

      【解决方案3】:

      您可以将 IP 或 SessionID 保存在文件中(可能在数据库中),并在每次有人投票时检查。

      如果您保留 SessionID,他们将能够在重新打开浏览器时再次投票。如果您保留 IP,他们将能够在 IP 更改时再次投票,以适合您的申请。

      我会这样做。

      【讨论】:

      • 不是投票系统,而是推荐朋友系统
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 2013-01-31
      • 2019-12-13
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      • 2015-06-19
      相关资源
      最近更新 更多