2017-01-20 13 views
-3

私はいつも送信メールフォームに問題があります。なぜなら、これは非常に多くの異なるコードが必要なためです。エラー "名前が短すぎるか空ではありません!"

<div class="col-2 animation_fade_in_block"> 
<div class="form-style" id="contact_form_2"> 
<div id="contact_body"> 
<label> 
<input type="text" name="name" id="name" required class="input-field" placeholder="Name *" /> 
</label> 
<label> 
<input type="email" name="email" required class="input-field" placeholder="E-mail *" /> </label> 
<label> 
<input type="text" name="phone" maxlength="19" required placeholder="Phone *" class="tel-number-field long" /> </label> 
<label for="field5"> 
<textarea name="message" id="message" class="textarea-field" required placeholder="Message *"></textarea> 
</label> 
<label> 
<input type="submit" id="submit_btn_2" class="btn" value="Send message " /> </label> 
</div> 
<div id="contact_results"></div> 
</div> 
</div> 

SCRIPT

$("#submit_btn_2").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_2 input[required=true], #contact_form_2 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(), 

      'phone_number': $('input[name=phone]').val(), 
      'subject': $('select[name=subject]').val(), 
      'msg': $('textarea[name=message]').val() 
     }; 

     //Ajax post data to server 
     $.post('../php/contact.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_2 input[required=true], #contact_form_2 textarea[required=true]").val(''); 
       $("#contact_form_2 #contact_body").fadeOut("fast"); //hide form after success 
      } 
      $("#contact_form_2 #contact_results").hide().html(output).slideDown(); 
     }, 'json'); 
    } 
}); 

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


$("#submit_btn_2").click(function(e) { 
    e.preventDefault(); 
    //Rest of your code 

}); 

PHPコード

<?php 
if($_POST) 
{ 
    $to_email  = "[email protected]"; //Recipient email, Replace with own email here 

    //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); 
    $phone_number = filter_var($_POST["phone_number"], FILTER_SANITIZE_NUMBER_INT); 
    $message  = filter_var($_POST["msg"], FILTER_SANITIZE_STRING); 

    //additional php validation 
    if(strlen($user_name)<3){ // If length is less than 3 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($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($message)<3){ //check emtpy message 
     $output = json_encode(array('type'=>'error', 'text' => 'Too short message! Please enter something.')); 
     die($output); 
    } 

    //email body 
    $message_body = " 

    Name:".$user_name."\r\n 
    Email: ".$user_email."\r\n 
    Phone Number: ". $phone_number."\r\n 
    Message:".$message 
    ; 

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

    $send_mail = mail($to_email, "Message from site", $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' => ' 

      <div class="popup_icon"><i class="fa fa-check "></i></div> 
<div class="popup_title">Спасибо за контакт со STYX!</div> 
<div class="popup_subtitle">Мы ответим очень скоро.</div> 


')); 
     die($output); 
    } 
} 
?> 

何:ここ

は、スクリプトの最後には、その後

HTMコードをPHPのhtmlコードで始まる、メールパズルですプロです傷。問題は私が「名前が短すぎるか空である」ということです。私が非常に長い名前を書くときでもエラー。私を助けることができる人はいますか?

ありがとうございます。

+0

問題をどこから取得できますか?最低限の言語に絞ってください。 – khelwood

+0

あなたのPHPスクリプトに 'echo $ _POST [" user_name] "'を入れて、あなたのデータがあなたのPHPスクリプトに実際に投稿されているかどうかをテストします。 – Twinfriends

+0

いいえどこに問題が起こっているのかわかりませんでした。だから私はすべてのコードを書いていますが、script.jsのどこかで問題を理解しています – Itrader

答えて

0

トラブルシューティングには2つのことがあります。

  1. jQueryスクリプトがuser_name POSTを送信していないか、セレクタから値を見つけられませんでした。
  2. あなたのPHPは$_POST['user_name']を消毒し、多くの文字列を削除しています。

トラブルシューティング:クロムまたはFirefoxを使用して

1. 、それはコンソールタブにOptions > More Tools > Developer Tools

クリックで発見されたChromeで(デベロッパーコンソールや開発ツールを開く 次2つの>シンボルを入力$('input[name=name]').val() undefinedを返した場合 - これはブラウザがこのセレクタを検出できないことを意味します

潜在的な修正、代わりにこれを使用する: $("input[name='name']").val()

name属性がjQueryの苦労これを解析することであってもよいnameもあるので。 *投機。


2. あなたのPHPは、私は、スクリプトの非常に開始時間に合わせ

echo json_encode(array("type"=>"error", "text" => print_r($_POST,true)); 
exit(); 

をしたい右$_POSTデータ

を取得しているかどうかを確認してください。

次はコメントアウトしてみてください:

//Sanitize input data using PHP filter_var(). 
// > $user_name  = filter_var($_POST["user_name"], FILTER_SANITIZE_STRING); 

これが動作する場合、あなたはフィルターvarは、この変数を殺している知っています。

0

私はすべてのアイデアを試しました。 2つの連絡フォームがあり、両方の「名前」パラメータが混在していたという問題がありました。 #contact_formと#contact_form_2を追加して固定しました。

  'user_name'  : $('#contact_form input[name=name]').val(), 
      'user_email' : $('#contact_form input[name=email]').val(), 

      'phone_number' : $('#contact_form input[name=phone]').val(), 
      'subject'  : $('#contact_form select[name=subject]').val(), 
      'msg'   : $('#contact_form textarea[name=message]').val() 



      'user_name'  : $('#contact_form_2 input[name=name]').val(), 
      'user_email' : $('#contact_form_2 input[name=email]').val(), 

      'phone_number' : $('#contact_form_2 input[name=phone]').val(), 
      'subject'  : $('#contact_form_2 select[name=subject]').val(), 
      'msg'   : $('#contact_form_2 textarea[name=message]').val() 
関連する問題