我目前有一个JavaScript,如果刷新页面或者用户在提交后按下浏览器后退按钮,则重置表单,但如果一个非常无聊的用户违反JavaScript并填写并反复提交表单,我的数据库将会得到垃圾邮件。
我想防止这种情况发生(也许通过检查是否在一分钟左右的时间内从同一用户插入了超过10行)但我对如何防止这种情况有点无能为力。
答案 0 :(得分:1)
保存会话变量中的帖子数。
每次用户提交内容时,您都可以执行以下操作:
$_SESSION['postCount'] = $_SESSION['postCount'] + 1;
然后你将整个事情改为:
if($_SESSION['postCount'] > 2) {
// Your code that posts to the database
$_SESSION['postCount'] = $_SESSION['postCount'] + 1;
}
如果您不使用会话,请确保使用session_start()启动每个脚本;使用此代码,任何人都不能发布超过三次的内容。
答案 1 :(得分:0)
通常这是通过会话ID /令牌完成的。
通过这种方式,您可以检查它是否已经提交,只允许一次。
这是一个类似的问题:
How to prevent multiple inserts when submitting a form in PHP?
答案 2 :(得分:0)
我会在您的表中添加一列,记录上次表单提交的时间戳。然后,当您的页面加载时,将其声明为您的javascript的全局变量。
<?php include 'connect.php';
$sql = mysqli_fetch_assoc(mysqli_query($cxn, "SELECT lastFormSubmission FROM myTable WHERE login_id = '".mysqli_real_escape_string($cxn, $_SESSION['login_id'])."'"));
$lastFormTime = $sql['lastFormSubmission'];
?>
现在将时间声明为全局var:
<script type="text/javascript">
var lastTime = '<?= $lastFormTime ?>';
</script>
现在,当您的表单脚本运行时,您需要选择“太频繁”的阈值时间。
//Your script
var t = new Date().getTime() / 1000; //Need time in seconds to compare with timestamp
if (t - lastTime < yourThresholdTime) {
//don't submit form
}