首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过向数据库中添加值来创建“反botting”系统

问通过向数据库中添加值来创建“反botting”系统
EN

Stack Overflow用户
提问于 2012-11-04 01:07:17
回答 2查看 107关注 0票数 0

我不知道如何让它工作,所以我目前只是在寻找想法,让我解释一下我想做什么;假设我有一个名为"click“的按钮。每次我按下这个按钮,它都会在数据库中加1,所以当我按下它10次时,它会在名为"clicks“的数据库列中保存值"10”。不过,这已经做好了。我只需要一些东西,可以检查我有多快,我按了10次按钮,使反机器人系统。因此,我认为在数据库中创建一个名为"time“的列这个"time”列会每10秒重置一次,并在每次按下"click“按钮时将该列加1。然后,我可以在我的PHP脚本中创建如下内容:如果时间> 200,则删除用户等。

因此,如果一个人应该能够在它重置之前在200上获得“时间”列,那么它一定是一个机器人在按,因为它不像人类那样在10秒内按那么多次。

我读过一些关于时间戳和时间间隔的东西,但我不能按照我想的方式去理解它。我只需要一个列,它会在一段时间后删除其中的所有数据。

欢迎提出任何建议!提前谢谢。

我已经带着代码走了这么远:

代码语言:javascript
复制
if (isset($_POST['djahff'])) { // The button
require_once('connectvars.php'); // The DB connection
    $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    $idsession = $_SESSION['id'];
    $result = mysqli_query($dbc, "INSERT INTO pbclickslogin SET cps=1, id='$idsession' ON DUPLICATE KEY UPDATE cps=cps+1"); // Adding 1 to the column "cps" where username=$username

    $data = mysql_query("SELECT TIMESTAMPDIFF(SECOND, NOW(), mark) > 10 FROM pbclickslogin WHERE username='$username'") // Checking if the difference from mark and now is 10 seconds I assume?
    or die(mysql_error());
while($info = mysql_fetch_array( $data )) {
$result = mysqli_query($dbc, "UPDATE pbclickslogin SET cps='0', mark=NOW() WHERE username='$username'"); // Updating cps and mark because the difference from mark and now was 10 seconds.
 }
}

每次按下按钮时,网站都会更新,这是一个输入类型为"submit“的按钮。

嗯,我没有完全理解你,Algomorph,但我想这是因为我的代码发布错误。对不起,我在这个论坛上还是个新手。不管怎样,我猜我在这里有一个更新语句,等等?还有你之前提到的同样的问题吗?

Ps。感谢您对论坛格式的关注

我现在添加了一些代码:

代码语言:javascript
复制
if ($info[0] == 1) {
    $result = mysqli_query($dbc, "UPDATE pbclickslogin SET cps='0', mark=NOW() WHERE username='$username'"); // Updating cps and mark because the difference from mark and now was 10 seconds.
}

然而,代码永远不会立即更新。我也尝试过($info'0‘== 1),但不幸没有成功。除此之外,我现在不太理解这个,什么是$info?它是否在数据库中发现了某个值为0的内容?我通常只在调用列时使用$info。再次感谢你:)

添加了另外一些更改,我们现在得到的代码如下:

代码语言:javascript
复制
if (isset($_POST['djahff'])) { // The button

require_once('connectvars.php'); // The DB connection
    $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    $idsession = $_SESSION['id'];
    $result = mysqli_query($dbc, "INSERT INTO pbclickslogin SET cps=1, id='$idsession' ON DUPLICATE KEY UPDATE cps=cps+1"); // Adding 1 to the column "cps" where username=$username

    $data = mysql_query("SELECT TIMESTAMPDIFF(SECOND, mark, NOW() ) > 10 FROM pbclickslogin WHERE id='$idsession';") // Checking if the difference from mark and now is 10 seconds I assume?
    or die(mysql_error());
while($info = mysql_fetch_array( $data )) {
if ($info[0] == 1) {
    $result = mysqli_query($dbc, "UPDATE pbclickslogin SET cps='0', mark=NOW() WHERE id='$idsession'"); // Updating cps and mark because the difference from mark and now was 10 seconds.
}
 }
}

对Algomorph说:顺便问一下,你为什么要把NOW() > 10改成NOW() )> 1000?另外:我现在遇到的问题是,当我按下"djahff“按钮时,它会更新时间戳"mark”,而不是整数"cps“。

谢谢:-) -我们越来越接近了!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-04 01:32:23

我不确定您使用的是哪种DBMS,但您可以完全按照下面描述的方式进行操作。制作两列:

整数标记clicks

  • timestamp

当用户单击时,选中标记并将其与当前日期和时间进行比较。如果相差超过10秒,则将clicks设置为1并标记为当前日期和时间( mysql中的NOW()函数,PostgreSQL中的current_timestamp()函数)。

否则,请检查点击。如果超过200,则将用户踢出。否则,将其递增1。

票数 1
EN

Stack Overflow用户

发布于 2012-11-05 23:54:49

if (isset($_POST‘’djahff‘)){ //按钮

代码语言:javascript
复制
require_once('connectvars.php'); // The DB connection
    $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    $idsession = $_SESSION['id'];
    $result = mysqli_query($dbc, "INSERT INTO pbclickslogin SET cps=1,       id='$idsession' ON DUPLICATE KEY UPDATE cps=cps+1"); // Adding 1 to the column "cps" where username=$username

    $data = mysql_query("SELECT TIMESTAMPDIFF(SECOND, NOW(), mark) > 10 FROM pbclickslogin WHERE username='$username'") // Checking if the difference from mark and now is 10 seconds I assume?
    or die(mysql_error());

while($info = mysql_fetch_array( $data )) { $result = mysqli_query($dbc,"UPDATE pbclickslogin SET cps='1',mark=NOW() WHERE username='$username'");//更新cps和mark,因为与mark和now相差10秒。}}

这是我从Algomorph告诉我的内容中理解的代码。问题是用户在这10秒内多次点击按钮"djahff“。每次按下按钮,“标记”栏就会更新回现在的时间。

除此之外,每次运行都很好:)有什么建议吗?

@Algomorph

  • Peter
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13211432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档