duanpo2037
duanpo2037
2016-08-15 02:04

数据在数据库中插入两次,ajax post

已采纳

I have modal bootstrap register post form with ajax post and php but it inserts data twice in database

my modal :

    <div id="register" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title">New Member</h4>
      </div>
      <div class="modal-body">
      <div class="msg"></div>

      <form id="regist" action="/model/php/ajax.php"  method="post" accept-charset="utf-8" >
     <div class="form-group">
  <label for="usr">username:</label>
  <input type="text" name="user" class="form-control" id="usr">
</div>
 <div class="form-group">
  <label for="ugame">name in game :</label>
  <input type="text" name="ugame" class="form-control" id="ugame">
</div>
<div class="form-group">
  <label for="pwd">password :</label>
  <input type="password" name="pwd" class="form-control" id="pwd">
</div>
<div class="g-recaptcha" data-sitekey="<?php echo key; ?>"></div>
        <button type="submit"  id="signup" class="btn btn-success btn-lg">Signup<span class="glyphicon glyphicon-user"></span></button>
     </form>   </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-info" data-dismiss="modal">close</button>
      </div>
    </div>

  </div>
</div>

and here Ajax Code :

    <script>
   $(document).ready(function () {
        $("#regist").on("submit", function(e) {
            var postData = $(this).serializeArray();
            var formURL = $(this).attr("action");
            $.ajax({
                url: formURL,
                type: "POST",
                data: postData,
                success: function(data, textStatus, jqXHR) {
                    $('.msg').html(data);
                    $('.inf').remove();
                },
                error: function(jqXHR, status, error) {
                    console.log(status + ": " + error);
                }
            });
            e.preventDefault();
        });

        $("#signup").on('click', function() {
            $("#regist").submit();
        });
    });
</script>

Send Post to [ Action="ajax.php" ] ,

here ajax.php code :

   <meta charset="UTF-8">
 <?php
  include '../db.php';
  include '../../lang/lang.ar.php';


           if(empty($_POST['user']) || empty($_POST['ugame']) || empty($_POST['pwd']))
           {
           echo $lang['empty'];
           }else{
            $q=mysqli_query($link,"SELECT * FROM accounts WHERE Username = '".$_POST['ugame']."'");
            $q2=mysqli_query($link,"SELECT * FROM customers WHERE uname = '".$_POST['user']."'");
            if(mysqli_num_rows($q) == 0)
            {
              echo $lang['ugame_!exist'];
            }else if(mysqli_num_rows($q2) != 0)
            {
               echo $lang['exist'];
            }else if(strpos($_POST['user'],';') !== false || strpos($_POST['user'],'-') !== false || strpos($_POST['user'],'#') !== false || strpos($_POST['user'],'@') !== false || strpos($_POST['user'],':') !== false  || strpos($_POST['user'],'*') !== false)
            {
                            echo $lang['not_allowed'];

            }else if(strpos($_POST['user'],' ') !== false){
                    echo $lang['space'];
            }else if(strlen($_POST['pwd']) < 6){
               echo $lang['small_pass'];
            }else if(strlen($_POST['user']) < 6){
               echo $lang['small_user'];
            }else if(strlen($_POST['pwd']) > 14){
               echo $lang['larg_pass'];
            }else if(strlen($_POST['user']) > 32){
               echo $lang['larg_user'];
            }else{

                $date = date("y-m-d");
                $stamp = date('Y-m-d\TH:i:s');

               $done = mysqli_query($link,"INSERT INTO customers  (uname,upass,ugame,date) VALUES ('".$_POST['user']."','".$_POST['pwd']."','".$_POST['ugame']."','".$date."')");
               mysqli_query($link,"INSERT INTO notification  (text,icon,date) VALUES ('New Account registred [ ".$_POST['user']." ]','icon-user','".$stamp."')");
               echo $lang['register_done'];

            }
           }
       ?>
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • donlih2986 donlih2986 5年前

    You're posting the form twice.

    When you click a submit button in a form, it triggers a submit event, which you handle with an AJAX request:

    $("#regist").on("submit", function(e) {
        // your AJAX code
    });
    

    But you also have a click event handler for the button:

    $("#signup").on('click', function() {
        $("#regist").submit();
    });
    

    Which manually triggers a second submit event. Simply remove that click handler entirely, since the form already triggers the submit event by default.

    点赞 评论 复制链接分享