2017-11-25 7 views
0

私の連絡フォームをチェックして送信する作業中のJavaスクリプト検証コードがあります。フォームを送信すると、正しく、それは私の電子メールに詳細を送信します。私はどのように自分のJavaスクリプトと私のPHPの検証を含めると、成功のメッセージを表示する方法がわからない。私はこれまで持っていることは次のとおりです。JavaScriptフォームの上にsuccesメッセージを含むPHPフォームの検証を追加する

HTML:

<form id="mc-form" method="POST"> 
    <div class="form-group col-xs-12 "> 
     <label for="name" hidden>שם פרטי</label> 
     <input type="text" name="name" id="name" class="cv form-control" placeholder="שם פרטי"> 
     <span class='error-message' id='name-error'></span> 

    </div> 
    <div class="form-group col-xs-12 "> 
     <label for="phone" hidden>טלפון</label> 
     <input type="text" name="phone" id="phone" class="cv form-control" placeholder="טלפון"> 
     <span class='error-message' id='phone-error'></span> 
    </div> 
    <div class="form-group col-xs-12 "> 
     <label for="email" hidden>דואר אלקטרוני</label> 
     <input type="email" name="email" id="email" class="cv form-control" placeholder="דואר אלקטרוני"> 
     <span class='error-message' id='email-error'></span> 
    </div> 
    <div class="form-group col-xs-12 "> 
     <label for="subject" hidden>נושא</label> 
     <input type="text" name="subject" id="subject" class="cv form-control" placeholder="נושא"> 
    </div> 
    <div class="form-group col-xs-12 "> 
     <label for="message" hidden>הודעה</label> 
     <textarea name="message" id="message" class="cv form-control message" placeholder="השאירו את הודעתכם פה" rows="4" cols="50"></textarea> 
    </div> 
    <!-- <input type="submit" id="submit-button" class="btn btn-custom-outline " value="שלח" > --> 
    <button onclick='return validateForm()' class="btn btn-custom-outline " id="submit-button">שלח</button> 
    <span class='error-message' id='submit-error'></span> 
    <span class="success">Thank's for submitting the form</span> 

    <br> 
    <!-- <div class="success"><?= $success ?></div>--> 
    <!--<span class="error"></span> --> 
</form> 

マイJS:

function validateName() { 

    var name = document.getElementById('name').value; 

    if (name.length == 0) { 

     producePrompt('Name is required', 'name-error', 'red') 
     return false; 

    } 

    if (!name.match(/^[a-zא-ת]+(\s[a-zא-ת]+)*$/i)) { 

     producePrompt('Letters only please.', 'name-error', 'red'); 
     return false; 

    } 


    return true; 

} 

function validatePhone() { 

    var phone = document.getElementById('phone').value; 

    if (phone.length == 0) { 
     producePrompt('Phone number is required.', 'phone-error', 'red'); 
     return false; 
    } 

    if (!phone.match(/([0-9\s\-]{7,})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/)) { 
     producePrompt('Include only digits| min :8 ', 'phone-error', 'red'); 
     return false; 
    } 


    return true; 

} 

function validateEmail() { 

    var email = document.getElementById('email').value; 

    if (email.length == 0) { 

     producePrompt('Email is required', 'email-error', 'red'); 
     return false; 

    } 

    if (!email.match(/^[A-Za-z\._\-[0-9]*[@][A-Za-z]*[\.][a-z]{2,4}$/)) { 

     producePrompt('Email Invalid', 'email-error', 'red'); 
     return false; 

    } 


    return true; 

} 

/*function validateMessage() { 
    var message = document.getElementById('contact-message').value; 
    var required = 30; 
    var left = required - message.length; 

    if (left > 0) { 
    producePrompt(left + ' more characters required','message-error','red'); 
    return false; 
    } 

    producePrompt('Valid', 'message-error', 'green'); 
    return true; 

}*/ 

function validateForm() { 
    var vn = validateName(); 
    var vp = validatePhone(); 
    var ve = validateEmail(); 

    if (!vn || !vp || !ve) { 
     jsShow('submit-error'); 
     producePrompt('Please fix errors to submit.', 'submit-error', 'red'); 
     setTimeout(function() { 
      jsHide('submit-error'); 
     }, 2000); 
     return false; 
    } else { 

    } 

} 

function jsShow(id) { 
    document.getElementById(id).style.display = 'block'; 
} 

function jsHide(id) { 
    document.getElementById(id).style.display = 'none'; 
} 




function producePrompt(message, promptLocation, color) { 

    document.getElementById(promptLocation).innerHTML = message; 
    document.getElementById(promptLocation).style.color = color; 


} 

PHP:

// define variables and set to empty values 
$name_error = $email_error = $phone_error = " "; 
$name = $email = $phone = $message = $subject = $success = " "; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["name"])) { 
    $name_error = "Name is required"; 
    } else { 
    $name = test_input($_POST["name"]); 
    // check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Zא-ת ]*$/",$name)) { 
     $name_error = "Only letters and white space allowed"; 
    } 
    } 


    if (empty($_POST["email"])) { 
    $email_error = "Email is required"; 
    } else { 
    $email = test_input($_POST["email"]); 
    // check if e-mail address is well-formed 
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     $email_error = "Invalid email format"; 
    } 
    } 

    if (empty($_POST["phone"])) { 
    $phone_error = "Phone is required"; 
    } else { 
    $phone = test_input($_POST["phone"]); 
    // check if e-mail address is well-formed 
    if (!preg_match("/^(\d[\s-]?)?[\(\[\s-]{0,2}?\d{3}[\)\]\s-]{0,2}?\d{3}[\s-]?\d{4}$/i",$phone)) { 
     $phone_error = "Invalid phone number"; 
    } 
    } 

if (empty($_POST["subject"])) { 
    $subject = ""; 
    } else { 
    $subject = test_input($_POST["subject"]); 
    } 

    if (empty($_POST["message"])) { 
    $message = ""; 
    } else { 
    $message = test_input($_POST["message"]); 
    } 

    if ($name_error == '' and $email_error == '' and $phone_error == '' and $lastname_error == ''){ 
     $message_body = ''; 
     unset($_POST['submit']); 
     foreach ($_POST as $key => $value){ 
      $message_body .= "$key: $value\n"; 
     } 

     $to = '[email protected]'; 
     $subjectm = 'Contact Form Submit'; 
     if (mail($to, $subjectm, $message)){ 
      $success = "Message sent, thank you for contacting us!"; 
      $name = $lastName = $email = $phone = $message = $subject = ''; 
     } 
    } 

} 

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

私は私をチェックする作業のJavaスクリプトの検証コードを持っています私はフォームを送信した後に成功メッセージを表示するPHPでサーバー側の検証を追加したいそれは私の電子メールに詳細を送信します。私はどのように自分のJavaスクリプトと私のPHPの検証を含めると、どのように成功のメッセージを表示すると思いますか分かりません。私が今までに持っているものは:

+0

あなたはPHPでの '$のSUCCESS'変数を作成しますが、あなたのコードでそれを使用していないのに役立ちます。 – panther

+0

javascriptとphpの両方で同じスタイルの成功メッセージが表示されるようにするには、ajaxでそれを行う必要があります。 –

+0

@私が理解できるようにいくつかのコード例を含めてください。 – SemSam

答えて

1

jqueryを使って、この最高のIMOを行うことができます。そのためには、PHPスクリプトを少し修正してjsonを出力し、エラー/成功メッセージを別々に保存する必要があります。既存のjavascriptにjqueryコードを少し追加し、忘れないように、jqueryライブラリをHTMLの下のどこかに入れてください。完了のために、私は件名とメッセージの単純な空のチェックを追加し、フォームが実際に送信されるまで成功メッセージを非表示にします。

注:あなたは、あなたの質問からあなたの電子メールを削除したい場合があります:)

HTMLスクリプト

<style> 
    .error { 
     color:red; 
    } 
</style> 
<form id="mc-form" method="POST"> 
    <div class="form-group col-xs-12 "> 
     <label for="name" hidden>שם פרטי</label> 
     <input type="text" name="name" id="name" class="cv form-control" placeholder="שם פרטי"> 
     <span class='error-message' id='name-error'></span> 

    </div> 
    <div class="form-group col-xs-12 "> 
     <label for="phone" hidden>טלפון</label> 
     <input type="text" name="phone" id="phone" class="cv form-control" placeholder="טלפון"> 
     <span class='error-message' id='phone-error'></span> 
    </div> 
    <div class="form-group col-xs-12 "> 
     <label for="email" hidden>דואר אלקטרוני</label> 
     <input type="email" name="email" id="email" class="cv form-control" placeholder="דואר אלקטרוני"> 
     <span class='error-message' id='email-error'></span> 
    </div> 
    <div class="form-group col-xs-12 "> 
     <label for="subject" hidden>נושא</label> 
     <input type="text" name="subject" id="subject" class="cv form-control" placeholder="נושא"> 
     <span class='error-message' id='subject-error'></span> 
    </div> 
    <div class="form-group col-xs-12 "> 
     <label for="message" hidden>הודעה</label> 
     <textarea name="message" id="message" class="cv form-control message" placeholder="השאירו את הודעתכם פה" rows="4" cols="50"></textarea> 
     <span class='error-message' id='message-error'></span> 
    </div> 
    <!-- <input type="submit" id="submit-button" class="btn btn-custom-outline " value="שלח" > --> 
    <button class="btn btn-custom-outline " id="submit-button">שלח</button> 
    <span class='error-message' id='submit-error'></span> 
    <span class="success">Thank's for submitting the form</span> 

</form> 

<!-- load jQuery libraries --> 
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script> 

Javascriptを/ jQueryの

<script type="text/javascript"> 

    $(document).ready(function(){ 

     function jsShow(id) { 
      $('#'+id).show(); 
     } 

     function jsHide(id) { 
      $('#'+id).hide(); 
     } 

     function producePrompt(message, promptLocation, color) { 

      $('#'+promptLocation).text(message).css('color', color).show(); 

     } 

     jQuery.validator.addMethod("lettersonly", function(value, element) { 
      return this.optional(element) || /^[a-zא-ת]+(\s[a-zא-ת]+)*$/i.test(value); 
     }, "Letters only please"); 
     jQuery.validator.addMethod("digitsonly", function(value, element) { 
      return this.optional(element) || /([0-9\s\-]{7,})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/.test(value); 
     }, "Include only digits| min :8 "); 

     $('.success').hide(); 

     $("#mc-form").validate({ 
      error: function(label) { 
       $(this).addClass("error"); 
      }, 
      rules: { 
       name: { 
        required: true, 
        lettersonly: true 
       }, 
       phone: { 
        required: true, 
        digitsonly: true 
       }, 
       email: { 
        required: true, 
        email: true 
       }, 
       subject: { 
        required: true, 
        minlength: 2 
       }, 
       message: { 
        required: true, 
        minlength: 2 
       } 
      }, 
      messages: { 
       name: { 
        required: "Please specify your name", 
        lettersonly: "Letters only please" 
       }, 
       phone: { 
        required: "Phone number is required", 
        digitsonly: "Include only digits| min :8 " 
       }, 
       email: { 
        required: "Email is required", 
        email: "Email Invalid" 
       }, 
       subject: { 
        required: "Subject is required" 
       }, 
       message: { 
        required: "Message is required" 
       } 
      }, 
      submitHandler: function(form) { 
       sendForm(); 
      } 
     }); 

     function sendForm() { 

      $('[id*="-error"]').text(''); // default hide all error messages 

      event.preventDefault(); // prevent form submission and therefore page reload 

      $.ajax({ 
       type: 'POST', 
       url: 'process_form.php', 
       data: $("#mc-form").serialize(), 
       success: function(data) { 

        if(data.hasOwnProperty('error')) { 

         Object.keys(data['error']).forEach(function(key) { 
          producePrompt(data['error'][key], key+'-error', 'red'); 
         }); 

        } 
        if(data.hasOwnProperty('mail_error')) { 
         alert('Could not send mail'); 
        } 
        if(data.hasOwnProperty('success')) { 
         $('.success').show(); 
        } 
       } 
      }); 

     } 

    }); 
</script> 

PHPスクリプト

// init error and success message variable to check for emptiness 
$error_msg = array(); 
$success_msg = array(); 
$data = ''; 

// prevent warnings or errors from displaying, else you won't get proper json result 
ini_set('display_errors',0); 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 

    if (empty($_POST["name"])) { 
     $error_msg['name'] = "Name is required"; 
    } else { 
     $name = test_input($_POST["name"]); 
     // check if name only contains letters and whitespace 
     if (!preg_match("/^[a-zA-Zא-ת ]*$/",$name)) { 
      $error_msg['name'] = "Only letters and white space allowed"; 
     } 
    } 


    if (empty($_POST["email"])) { 
     $error_msg['email'] = "Email is required"; 
    } else { 
     $email = test_input($_POST["email"]); 
     // check if e-mail address is well-formed 
     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
      $error_msg['email'] = "Invalid email format"; 
     } 
    } 

    if (empty($_POST["phone"])) { 
     $error_msg['phone'] = "Phone is required"; 
    } else { 
     $phone = test_input($_POST["phone"]); 
     // check if e-mail address is well-formed 
     if (!preg_match("/^(\d[\s-]?)?[\(\[\s-]{0,2}?\d{3}[\)\]\s-]{0,2}?\d{3}[\s-]?\d{4}$/i",$phone)) { 
      $error_msg['phone'] = "Invalid phone number"; 
     } 
    } 
    if (empty($_POST["subject"])) { 
     $error_msg['subject'] = "Subject is required"; 
    } 
    if (empty($_POST["message"])) { 
     $error_msg['message'] = "Message is required"; 
    } 

    if (empty($_POST["subject"])) { 
     $subject = ""; 
    } else { 
     $subject = test_input($_POST["subject"]); 
    } 

    if (empty($_POST["message"])) { 
     $message = ""; 
    } else { 
     $message = test_input($_POST["message"]); 
    } 

    if (empty($error_msg)){ // note that $lastname_error does not exists 
     $message_body = ''; 
     unset($_POST['submit']); 
     foreach ($_POST as $key => $value){ 
      $message_body .= "$key: $value\n"; 
     } 

     $to = '[email protected]'; 
     $subjectm = 'Contact Form Submit'; 
     if (mail($to, $subjectm, $message)){ 
      $success_msg = "Message sent, thank you for contacting us!"; 
      $name = $email = $phone = $message = $subject = ''; 
     } else { 
      $mail_error_msg = 'Could not send email'; 
     } 


    } 

    // set output data accordingly 
    if(!empty($success_msg)) { 
     $data = array('success'=>$error_msg); 
    } else if(!empty($error_msg)) { 
     $data = array('error'=>$error_msg); 
    } else if(!empty($mail_error_msg)) { 
     $data = array('mail_error'=>$mail_error_msg); 
    } 

    // output json that you can parse with jquery 
    header('Content-Type: application/json'); 
    echo json_encode($data); 
} 

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

EDIT

あなたのコメントを読んだ後、それは私が私のサーバー上で前のコードをテストし、それがうまく働いたあなたが

I copied pretty much everything you wrote

によって何を意味するかに依存します。私は検証機能return validateForm()を削除して以来、あなたのJavaScriptの検証なしでは、物事を混乱させる可能性があります。実際に動作させてプレーンなjavascriptをjqueryと混合しないようにするために、私はHTMLとJavascriptのコードを適合させたので、jQueryだけが使用されています。

  1. PHPスクリプトそのプロセスのみが出力JSON、何もしなければならない:ここで

    は、Ajaxを使用するための一般的なトラブルシューティングのヒントがあります。

  2. 処理スクリプトにエラー、警告または通知を表示(無効)しないでください。
  3. ajaxパラメータurlのファイル名が正しいことを確認してください。

希望これは

+0

説明に感謝しますが、私はまだそれを動作させることができません、それは提出しないで、エラーを表示しません...私はindex.htmの以前のjqueyをhade、私はあなたが書いた、それを超えて私のコードを変更する必要がありますか? – SemSam

+0

@SemSamは私の適応された答えを参照してください – Yolo

+0

私はついにそれを働かせました、検証は完全に動作し、エラーなどを示します...しかし、すべてのフィールドが正しく入力されたら、送信させません。何も起こりません。コンソールで次のエラーが表示されます。リソースをロードできませんでした:file:/// C:/Users/ilona/Desktop/BootstrapLandinPage/send.php:クロスオリジン要求は、プロトコルスキームでのみサポートされています。http、データ、クロム、クロムエクステンション、https。 私のPHPスクリプト名はsend.phpです。 – SemSam

関連する問題