一个“页面”上的多个表单 - 多个提交“块”

时间:2013-11-07 13:17:37

标签: php mysql

我在一个页面(~30)上有多个表单,有些表格有文件上载。

每个表单都有自己的提交按钮。

strukrap是bootstrap-tab和-collapsebox-design - 所以你可以在不重新加载的情况下更改标签并触及“控制面板”中的每个表单。

我尝试为所有表单运行“mysql注入我”(firefox插件),结果:

服务器响应错误500。

没有改变任何东西,不得不等待5分钟,一切都还好。

我的问题是:如何阻止theese表单(服务器端)的快速自动/用户提交?这是可能的吗?这样每个用户每1秒钟只能提交一个。

3 个答案:

答案 0 :(得分:1)

为什么没有带有用户ID的MySQL表,并且有一行名为'last_submit'的行是datetime

每次用户提交内容时都会更新。

然后让PHP检查他们最近没有提交过什么东西。

答案 1 :(得分:1)

  1. 向用户提供会话
  2. 在名为 last-submit 的会话中定义一个变量,并将当前时间作为值。
  3. 当表单结果出现时:
    1. 检查最后提交值是什么。
    2. 如果超过 x 秒前,则将时间保存为 last-submit 并分别作出响应。
    3. 如果小于 x 秒,请拒绝表单并分别作出回应。
  4. 如果您想阻止机器人或脚本,请执行以下操作:

    1. 在表单中添加输入字段,将其命名为_robo_trap_,并通过将样式设置为display: none使其对人眼不可见。
    2. 当表单检查robo_trap是否有任何值或其默认值是否已更改时。如果是,则丢弃表格,因为人类无法看到并且不需要填写表格。
    3. 例如:

      <?php
      
      /* User Session */
      session_start();
      
      /* Current Time */
      $now = new DateTime();
      
      /* First Time ... */
      if ( empty($_SESSION['last-submit']) ) {
          $_SESSION['last-submit'] = $now;
      }
      
      /* On Form Submit ... */
      if ( !empty($_POST) ) {
      
          /* How fast?! */
          $gap = now->diff( $_SESSION['last-submit'] );
          $gap = $gap->format('%s');
      
          if ( $gap > 1 ) {
      
              // good ...
      
              $_SESSION['last-submit'] = $now;
      
          } else {
      
              // bad ...
          }
      }
      

      P.S。只是一个示例代码,为您提供一些想法,我没有测试它。

答案 2 :(得分:0)

您可以暂时禁用其他表单提交操作:

$(document).ready(function(){

    $(':input[type="submit"]').click(function(){

         var otherButtons = $(':input[type="submit"]').not($(this));
         otherButtons.prop('disabled', true);

         setTimeout(function(){
             otherButtons.prop('disabled', false);
         },
         1000); //disable for 1 second


    });

});

在服务器端,您可以进行重新提交检查,如:PHP avoid browser reposting $_POST on page refresh?