2017-02-15 13 views
1

PHPの登録フォームにjQuery検証を使用しています。私のPHPでは、私の形式は以下の通りです:PHP - > jQuery - > AJAXフォームの検証

私request.jsで
<form id="register-form"> 
    <input class="form-control" name="dispName" placeholder="Display name" type="text"> 
    <input class="form-control" name="email" placeholder="Email address" type="email"> 
    <input class="form-control" name="password" id="password" placeholder="Password" type="password"> 
    <input class="form-control" name="password2" placeholder="Re-enter password" type="password"> 
    <input class="btn btn-primary" id="submit-button" type="submit" value="Request Access"> 
</form> 

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.3.min.js"></script> 
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/jquery.validate.min.js"></script> 
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/additional-methods.min.js"></script> 
<script src="request.js"></script> 

検証は以下の通りである:

私のPHPの検証サーバ側の
$.validator.addMethod("checkUserName", 
     function(value, element) { 
      var result = false; 
      $.ajax({ 
       type:"POST", 
       async: false, 
       url: "check-username.php", // script to validate in server side 
       data: {dispName: value}, 
       success: function(data) { 
        result = (data == true) ? true : false; 
       } 
      }); 
      // return true if username is exist in database 
      return result; 
     }, 
     "This username is already taken! Try another." 
    ); 
$("#register-form").validate({ 
    rules: { 
     dispName: { 
      required:true, 
      nowhitespace: true, 
      lettersonly: true, 
      checkUserName: true 
     }, 
     email: { 
     required: true, 
     email: true, 
     remote: "http://localhost:3000/inputValidator" 
     }, 
     pw: { 
     required: true, 
     strongPassword: true 
     }, 
     cpw: { 
     required: true, 
     equalTo: '#password' 
     } 
    }, 
    messages: { 
     email: { 
     required: 'Please enter an email address.', 
     email: 'Please enter a <em>valid</em> email address.', 
     } 
    } 
    }); 

<?php 
$searchVal = $_POST['dispName']; 
try { 
    $dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password); 

    $sql = "SELECT * FROM users WHERE dname = " . "'" . $searchVal . "'"; 
    $stmt = $dbh->query($sql); 
    $result = $stmt->fetch(PDO::FETCH_ASSOC); 

    if($result){ 
     echo 'true'; 

    }else { 
     echo 'false'; 
    } 

    $dbh = null; 
    } 
     catch(PDOException $e) 
    { 
     echo $e->getMessage(); 
    } 
?> 

私は続けますThis username is already taken! Try another.を取得しても、私はデータベースではない名前を使用します。ダミーの "POST"値を使ってサーバー上のcheck-username.phpをテストしたところ、うまくいきました。だから、私は強い理解を持っている構文のrequest.jsです。誰もが正しい方向に私を指すことができます....あなたはこのような何かを行うことができます

+0

閉じた ''タグは表示されませんか? – RiggsFolly

+0

そこに...ちょうどここにそれを追加するのを忘れてしまった... –

+1

おめでとう、あなたはPDOを使用していますが、まだSQLインジェクションのために開いているスクリプトを書いています... – CBroe

答えて

1

...事前にありがとう:

$.validator.addMethod("checkUserName", 
    function(value, element) { 
     var result = false; 
     $.ajax({ 
      type:"POST", 
      async: false, 
      url: "check-username.php", // script to validate in server side 
      data: {dispName: value}, 
      success: function(data) { 
       result = (data == true) ? true : false; 
if(result == true){/*here you show error according to your way*/} 
      } 
     }); 

    }, 

); 
0
var typingTimerEmail;    //timer identifier 
    var doneTypingIntervalEmail = 1000; //time in ms, 5 second for example 
    var $input = $('#email'); 

    //on keyup, start the countdown 
    $input.on('keyup', function() { 

     clearTimeout(typingTimerEmail); 
     $('#submit').attr("disabled", true); 
     typingTimerEmail = setTimeout(doneTypingEmail, doneTypingIntervalEmail); 
    }); 

    function doneTypingEmail() { 

     //do something 
     var url = "http://172.16.0.60/bird_eye_api/"; 
     var email_exist = $('#email').val(); 

     if(email_exist.length > 0){ 
      $('.email_exist_msg').hide();  
      $('#submit').attr("disabled", false); 
      //$('.check_mail').css('border','1px solid #ff0000'); 


      $.ajax({ 
       url: url + "admin/check", 
       type: 'POST', 
       data: {'email':email_exist}, 
       success: function (data) { 
        console.log(data) 
        if(data == 'true'){ 
         $('#submit').attr("disabled", true); 
         $('.email_exist_msg').html('User with this email already exist').show();  
        } else { 

         $('#submit').attr("disabled", false); 
         //$('.check_mail').css('border','');  
         $('.email_exist_msg').html('User with this email already exist').hide();  
        } 
       }, 
      }); 
     } 
     if(email_exist.length==0){ 
      $('.email_exist_msg').hide(); 
      //$('.check_mail').css('border','')  
     } 
    } 

あなたはそれにカスタムURLを設定することができます。あなたの電子メールフィールドのキーアップで、あなたのURLにajaxを発し、ユーザーが存在するかどうかをチェックします。確かにtrueまたはfalseを返します。それによると、ajaxの成功はメッセージを表示します。

+0

答えに追加の文脈を与えてください。 – CCH

関連する問題