【问题标题】:Prevent duplicate submission with post in jquery [closed]防止在jquery中使用post重复提交[关闭]
【发布时间】:2015-10-05 17:29:15
【问题描述】:

我有一个通过 jquery post() 提交按钮的表单。不幸的是,它提交了两次,结果它重复了 mysql 中的记录。

我有两个文件:register.php(包含 html 和 javascript)和运行 sql 的tttt.php

我的问题是:如何修改我的脚本以防止重复提交?

请帮帮我。 this is link of the page

register.php的一部分:

<form id="regForm" method="post" action="tttt.php">
<!-- (...) -->
</form>

<script type="text/javascript">
      $("#sub").click(function(){

                     var data=$("#regForm :input").serializeArray();
        var posting = $.post($("#regForm").attr("action"), data, function(info){




             if(info==="yes"){$("#result1").html("ثبت نام انجام شد");}

        else{if(info==="no"){$("#result1").html("ثبت نام  با موفقیت انجام نشد");           }}

        });
        posting.done(function( data ) {

                  if(data==="no"){
                     $('#result1').fadeOut(8000, function() {
                     $(this).empty().show();
                     $("#regForm").submit(function(){
                     return false;});
                                                             });
                                   }  
    else       {
         $('#result1').fadeOut(12000, function() {
         $(this).empty().show();
        $("#regForm").submit(function(){
                       return false;});  
                                                 });
                       $("input:text ").val("");
                    $("input:password ").val("");

    }         


     });
            });

          $("#regForm").submit(function(){
                  return false;

                     });

              </script>

tttt.php的一部分:

   <?php
header("Content-Type: text/plain"); 
require_once("../private/connection.php");





if(isset($_POST["name"])  && !empty($_POST["name"]) && isset($_POST["lastname"]) && !empty($_POST["lastname"]) && isset($_POST["birthday"]) && !empty($_POST["birthday"])&&  isset($_POST["email"]) && !empty($_POST["email"]) && isset( $_POST["password"]) && !empty($_POST["password"]) && isset($_POST["confirmPassword"]) && !empty($_POST["confirmPassword"]) ){

        $name     =$conn->real_escape_string($_POST["name"]);
        $lastname =$conn->real_escape_string($_POST["lastname"]);
        $birthday =$conn->real_escape_string($conn->real_escape_string($_POST["birthday"]);
        $email    =$conn->real_escape_string($_POST["email"]);
        $password =$conn->real_escape_string($_POST["password"]);
        $hashed_password = password_hash($password, PASSWORD_BCRYPT);   



        if ($result=$conn->query("INSERT INTO students (student_name,student_family,student_birthday,student_email,student_password)
VALUES ('$name','$lastname' ,'$birthday' ,'$email','$hashed_password')")) {


            echo "yes";
} 
        else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}




    }else


{  echo "no";}  

        $conn->close();     
    ?>

【问题讨论】:

  • 警告您的代码极易受到 sql 注入攻击!
  • @DanielA.White 是正确的,您也没有正确检查这些帖子值是否存在。如果他们不这样做,调用if ( $_POST[ "name" ] ) 将引发错误。你需要检查isset( $_POST[ "name" ] )。此外,使用php.net/manual/en/book.pdo.php 完成所有数据库工作。更安全。
  • 试试.one(),让点击事件只应用一次...
  • 你的if有一个submit,你的else有一个提交,在条件结束后还有一个submit
  • @Daniel 我更新了代码是否可以告诉我它是否容易受到 sql 注入的影响?

标签: php jquery


【解决方案1】:

将按钮类型更改为按钮

<button type="button" id="sub" name="sub" class="btn btn-warning form-control pull-right">ثبت نام <span class="glyphicon glyphicon-ok
"></span></button>

【讨论】:

  • 最好绑定到提交处理程序,这样用户仍然可以使用键盘提交
  • 谢谢拉维,它解决了我的问题。
  • 如何在服务器中处理预加载器时添加它?例如在按钮旁边显示“正在加载...”。
  • 点击提交后是否需要,比如点击提交后会显示“正在保存...”之类的内容?
  • @Ravi 是的。当数据保存在数据库中时,想显示一个文本。但我不知道我应该在哪里写代码。
【解决方案2】:

在插入记录之前,如果用户不存在,只需检查数据库。据我所知,您的独特列将是电子邮件和密码哈希。并做一些适当的错误处理。

【讨论】:

    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多