2017-07-31 74 views
-1

如何使用AJAX和JQuery來使用HTML編寫的POST表單以驗證PHP?使用AJAX,Jquery和PHP進行表單驗證

這裏是我得到的一個例子,我願意顯示錯誤和cookie值顯示內聯編輯而不刷新,我可以用Jquery/AJAX以某種方式完成它嗎?

Iv'e看過的例子,認爲我應該創建另一個PHP頁面,併發布數據,但如何正確使用多個表單域?

<?php 
//check form submission 
if(isset($_POST['send'])){ 

    //validation for Name 
    if(strlen($_POST['fullname']) > 4){ 
    //set cookie if passed 
    setcookie('fullname', $_POST['fullname']); 
    }else { 
    $error[] = 'Your name is required!'; 
    } 
    //validation for ID 
    if ((isset($_POST['id']) && is_numeric($_POST['id']))) { 
    setcookie('id', $_POST['id']); 
    }else { 
    $error[] = 'ID number is required!'; 
    }  

//check for errors 
    if(isset($error)){ 
    foreach($error as $error){ 
    echo '<p style="background: red;">'.$error.'</p>'; 
    } 
    } 
?> 

<form method="post"> 
    <input name="fullname" type="text" value="<?php if(isset($_COOKIE["fullname"])){ 
    echo $_COOKIE["fullname"];} ?>" placeholder="full Name"> 
    <input name="id" type="text" value="<?php if(isset($_COOKIE["id"])){ 
    echo $_COOKIE["id"];} ?>" placeholder="ID"> 
    <input name="send" type="submit" value="send"> 
</form> 
+3

「* ..我看到的例子,認爲我應該建立另一個PHP頁面,並張貼在那裏的數據。*」請便。而且,如果問題來了,隨時提問。但是,第一次嘗試。 –

+0

我無法在代碼中的任何地方看到jquery。當然你可以用ajax來做。但首先你必須用ajax顯示你的代碼你試過了什麼。 –

+0

請不要發送垃圾郵件。嘗試編輯您以前的帖子。 https://stackoverflow.com/questions/45408908/show-form-submitted-data-values-with-php-validation-without-refresh/45409219 – JYoThI

回答

0

您是否考慮過使用jQuery .validate()插件? jQuery Validator Link

前端和後端驗證有點不同。在前端,您希望確保您獲得正確的數據類型,必填字段等,並且表單已準備好提交。在服務器端,你要確保你有乾淨的數據,並且它會正確地寫入數據庫,但通常不必處理錯誤消息,除非發生災難性事件並且數據庫不可用或者其他情況。

+0

我沒有與我使用的前端驗證問題。 但是,如上所示的PHP後端錯誤,我需要刷新以查看cookie,並且我希望在驗證時正確設置它。 – Hakerovsky

+0

我明白你的意思了。我認爲你最好使用'$ _SESSION'而不是cookies。 – Difster

+0

我同意,但我需要使用cookie。 – Hakerovsky

0

您可以使用以下HTML,JavaScript和PHP代碼:

在這裏你可以看到完整的信息:Click here

enter image description here

HTML:

<div class="form-style" id="contact_form"> 
    <div class="form-style-heading">Please Contact Us</div> 
    <div id="contact_results"></div> 
    <div id="contact_body"> 
     <label><span>Name <span class="required">*</span></span> 
      <input type="text" name="name" id="name" required="true" class="input-field"/> 
     </label> 
     <label><span>Email <span class="required">*</span></span> 
      <input type="email" name="email" required="true" class="input-field"/> 
     </label> 
     <label><span>Phone</span> 
      <input type="text" name="phone1" maxlength="4" placeholder="+91" required="true" class="tel-number-field"/>&mdash;<input type="text" name="phone2" maxlength="15" required="true" class="tel-number-field long" /> 
     </label> 
      <label for="subject"><span>Regarding</span> 
      <select name="subject" class="select-field"> 
      <option value="General Question">General Question</option> 
      <option value="Advertise">Advertisement</option> 
      <option value="Partnership">Partnership Oppertunity</option> 
      </select> 
     </label> 
     <label for="field5"><span>Message <span class="required">*</span></span> 
      <textarea name="message" id="message" class="textarea-field" required="true"></textarea> 
     </label> 
     <label> 
      <span>&nbsp;</span><input type="submit" id="submit_btn" value="Submit" /> 
     </label> 
    </div> 
</div> 

jQuery的阿賈克斯

<!-- include Google hosted jQuery Library --> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 

<!-- Start jQuery code --> 
<script type="text/javascript"> 
$(document).ready(function() { 
    $("#submit_btn").click(function() { 

     var proceed = true; 
     //simple validation at client's end 
     //loop through each field and we simply change border color to red for invalid fields  
     $("#contact_form input[required=true], #contact_form textarea[required=true]").each(function(){ 
      $(this).css('border-color',''); 
      if(!$.trim($(this).val())){ //if this field is empty 
       $(this).css('border-color','red'); //change border color to red 
       proceed = false; //set do not proceed flag 
      } 
      //check invalid email 
      var email_reg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
      if($(this).attr("type")=="email" && !email_reg.test($.trim($(this).val()))){ 
       $(this).css('border-color','red'); //change border color to red 
       proceed = false; //set do not proceed flag    
      } 
     }); 

     if(proceed) //everything looks good! proceed... 
     { 
      //get input field values data to be sent to server 
      post_data = { 
       'user_name'  : $('input[name=name]').val(), 
       'user_email' : $('input[name=email]').val(), 
       'country_code' : $('input[name=phone1]').val(), 
       'phone_number' : $('input[name=phone2]').val(), 
       'subject'  : $('select[name=subject]').val(), 
       'msg'   : $('textarea[name=message]').val() 
      }; 

      //Ajax post data to server 
      $.post('contact_me.php', post_data, function(response){ 
       if(response.type == 'error'){ //load json data from server and output message  
        output = '<div class="error">'+response.text+'</div>'; 
       }else{ 
        output = '<div class="success">'+response.text+'</div>'; 
        //reset values in all input fields 
        $("#contact_form input[required=true], #contact_form textarea[required=true]").val(''); 
        $("#contact_form #contact_body").slideUp(); //hide form after success 
       } 
       $("#contact_form #contact_results").hide().html(output).slideDown(); 
      }, 'json'); 
     } 
    }); 

    //reset previously set border colors and hide all message on .keyup() 
    $("#contact_form input[required=true], #contact_form textarea[required=true]").keyup(function() { 
     $(this).css('border-color',''); 
     $("#contact_results").slideUp(); 
    }); 
}); 
</script> 

PHP

<?php 
if($_POST) 
{ 
    $to_email  = "[email protected]"; //Recipient email, Replace with own email here 
    $from_email  = '[email protected]_domain.com'; //from mail, it is mandatory with some hosts and without it mail might endup in spam. 

    //check if its an ajax request, exit if not 
    if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') { 

     $output = json_encode(array(//create JSON data 
      'type'=>'error', 
      'text' => 'Sorry Request must be Ajax POST' 
     )); 
     die($output); //exit script outputting json data 
    } 

    //Sanitize input data using PHP filter_var(). 
    $user_name  = filter_var($_POST["user_name"], FILTER_SANITIZE_STRING); 
    $user_email  = filter_var($_POST["user_email"], FILTER_SANITIZE_EMAIL); 
    $country_code = filter_var($_POST["country_code"], FILTER_SANITIZE_NUMBER_INT); 
    $phone_number = filter_var($_POST["phone_number"], FILTER_SANITIZE_NUMBER_INT); 
    $subject  = filter_var($_POST["subject"], FILTER_SANITIZE_STRING); 
    $message  = filter_var($_POST["msg"], FILTER_SANITIZE_STRING); 

    //additional php validation 
    if(strlen($user_name)<4){ // If length is less than 4 it will output JSON error. 
     $output = json_encode(array('type'=>'error', 'text' => 'Name is too short or empty!')); 
     die($output); 
    } 
    if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //email validation 
     $output = json_encode(array('type'=>'error', 'text' => 'Please enter a valid email!')); 
     die($output); 
    } 
    if(!filter_var($country_code, FILTER_VALIDATE_INT)){ //check for valid numbers in country code field 
     $output = json_encode(array('type'=>'error', 'text' => 'Enter only digits in country code')); 
     die($output); 
    } 
    if(!filter_var($phone_number, FILTER_SANITIZE_NUMBER_FLOAT)){ //check for valid numbers in phone number field 
     $output = json_encode(array('type'=>'error', 'text' => 'Enter only digits in phone number')); 
     die($output); 
    } 
    if(strlen($subject)<3){ //check emtpy subject 
     $output = json_encode(array('type'=>'error', 'text' => 'Subject is required')); 
     die($output); 
    } 
    if(strlen($message)<3){ //check emtpy message 
     $output = json_encode(array('type'=>'error', 'text' => 'Too short message! Please enter something.')); 
     die($output); 
    } 

    //email body 
    $message_body = $message."\r\n\r\n-".$user_name."\r\nEmail : ".$user_email."\r\nPhone Number : (".$country_code.") ". $phone_number ; 

    //proceed with PHP email. 
    $headers = 'From: '. $from_email .'' . "\r\n" . 
    'Reply-To: '.$user_email.'' . "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 

    $send_mail = mail($to_email, $subject, $message_body, $headers); 

    if(!$send_mail) 
    { 
     //If mail couldn't be sent output error. Check your PHP email configuration (if it ever happens) 
     $output = json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration.')); 
     die($output); 
    }else{ 
     $output = json_encode(array('type'=>'message', 'text' => 'Hi '.$user_name .' Thank you for your email')); 
     die($output); 
    } 
} 
?>