防止多个SQL插入

时间:2014-09-16 13:36:49

标签: php sql insert

我目前有一个JavaScript,如果刷新页面或者用户在提交后按下浏览器后退按钮,则重置表单,但如果一个非常无聊的用户违反JavaScript并填写并反复提交表单,我的数据库将会得到垃圾邮件。

我想防止这种情况发生(也许通过检查是否在一分钟左右的时间内从同一用户插入了超过10行)但我对如何防止这种情况有点无能为力。

3 个答案:

答案 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
}