我不知道如何让它工作,所以我目前只是在寻找想法,让我解释一下我想做什么;假设我有一个名为"click“的按钮。每次我按下这个按钮,它都会在数据库中加1,所以当我按下它10次时,它会在名为"clicks“的数据库列中保存值"10”。不过,这已经做好了。我只需要一些东西,可以检查我有多快,我按了10次按钮,使反机器人系统。因此,我认为在数据库中创建一个名为"time“的列这个"time”列会每10秒重置一次,并在每次按下"click“按钮时将该列加1。然后,我可以在我的PHP脚本中创建如下内容:如果时间> 200,则删除用户等。
因此,如果一个人应该能够在它重置之前在200上获得“时间”列,那么它一定是一个机器人在按,因为它不像人类那样在10秒内按那么多次。
我读过一些关于时间戳和时间间隔的东西,但我不能按照我想的方式去理解它。我只需要一个列,它会在一段时间后删除其中的所有数据。
欢迎提出任何建议!提前谢谢。
我已经带着代码走了这么远:
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。感谢您对论坛格式的关注
我现在添加了一些代码:
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。再次感谢你:)
添加了另外一些更改,我们现在得到的代码如下:
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“。
谢谢:-) -我们越来越接近了!
发布于 2012-11-04 01:32:23
我不确定您使用的是哪种DBMS,但您可以完全按照下面描述的方式进行操作。制作两列:
整数标记clicks
当用户单击时,选中标记并将其与当前日期和时间进行比较。如果相差超过10秒,则将clicks设置为1并标记为当前日期和时间( mysql中的NOW()函数,PostgreSQL中的current_timestamp()函数)。
否则,请检查点击。如果超过200,则将用户踢出。否则,将其递增1。
发布于 2012-11-05 23:54:49
if (isset($_POST‘’djahff‘)){ //按钮
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
https://stackoverflow.com/questions/13211432
复制相似问题