2016-08-15 11 views
0

I ajaxポストとPHPとモーダルブートストラップレジスタの投稿フォームを持っているが、それはデータベースに2倍のデータを挿入データは、Ajaxポスト、データベースに二度挿入

私のモーダル:

<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> 

、ここAjaxコード:

<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> 

、[ Action="ajax.php"]に投稿を送信ここ

ajax.phpコード:

<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

[ネットワーク]タブを確認し、1つのリクエストが通過しているかどうかを確認します。また、提出/登録をクリックするとページが再読み込みされますか? – Darren

+2

@Darrenコメントに続いて/答えると、クエリをパラメータ化する作業が必要です。これはSQLインジェクションに開放されています。 http://php.net/manual/en/mysqli.quickstart.prepared-statements.php – chris85

答えて

3

あなたは二回、フォームを投稿しています。

あなたはformsubmitボタンをクリックすると、それはあなたがAJAXリクエストを扱うsubmitイベントをトリガ:

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

しかし、あなたははボタンのclickイベントハンドラを持っている:

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

これは、手動で第2のsubmitイベントをトリガします。フォームが既定でsubmitイベントを既にトリガーしているため、そのclickハンドラーを完全に削除するだけです。

関連する問題