是什么导致数据在DB中插入两次以上?

时间:2018-05-24 18:08:44

标签: php jquery mysqli

我的表单会继续将表单数据粘贴两次以上到我的数据库中 我无法弄清楚为什么?

这是PHP代码

public function doQuery($sql){
  $this->_reuslt = mysqli_query($this->_conn, $sql);
  $this->_numRows = $this->_reuslt->num_rows;
}

function insert($data){
        $dbo = database::getInstance();
        $sql = "INSERT INTO ".$this->_table." (";
        $sql .= implode(", ", array_keys($data)) . ') VALUES (';
        $sql .= "'" . implode("', '", array_values($data)) . "')";
        $dbo->doQuery($sql);
  }

PHP IN ACTION

if(empty($validate->message)) {
        $data = array(
              'userFname'       => $_POST['firstname'],
              'userLname'       => $_POST['lastname'],
              'userEmail'       => $_POST['email'],
              'userPsw'         => $_POST['password'],
        );
        $user->insert($data);
}

这是JS

$(document).ready(function(){
      $("#create_account").on("submit", function(event){
            event.preventDefault();
            var that = $(this);
            var firstname = $("#firstname").val();
            var lastname = $("#lastname").val();
            var email = $("#email").val();
            var password = $("#password").val();
            var re_password = $("#re_password").val();
            var create_accountSbm = $("#create_accountSbm").val();
            $("#return_new_Account").load('/blog/form', {
                  firstname:firstname,
                  lastname:lastname,
                  email:email,
                  password:password,
                  re_password:re_password,
                  create_accountSbm:create_accountSbm

            });
      });
});

2 个答案:

答案 0 :(得分:1)

正如其中一条评论中所建议的那样,您必须停止submit行动的传播。您还可以创建常规按钮(不输入提交类型) - 因此它只会执行您的代码。 现在,您从JS代码和form.submit进行一次调用,启动对表单action字段中提到的url的第二次调用。

答案 1 :(得分:0)

这里我们有两种形式,有和没有停止事件传播。检查每种情况下会发生什么:

$(document).ready(function() {

  $("input").on("click", console.clear);

  $("#form1").on("submit", function(e) {
    e.preventDefault();
  });

  $("#form2").on("submit", function(e) {
    e.preventDefault();
    e.stopPropagation();
  });

  $("form, div, body").on("submit", function(e) {
    console.log(this);
  });

  $(document).on("submit", function() {
    console.log('reached document');
    return false;
  });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="some-div">

  <form id="form1">
    <input type="submit" name="s1" value="Save-1">
  </form>

  <form id="form2">
    <input type="submit" name="s2" value="Save-2">
  </form>

</div>