2017-01-20 8 views
-3

У меня всегда возникают проблемы с отправкой почтовых форм. Я думаю, что это связано с тем, что для этого требуется множество разных кодов;Ошибка «Имя слишком короткое или пустое!»

Вот почта головоломка, начиная с кода HTML, то конечный сценарий, то PHP

HTM КОД:

<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); 
    } 
} 
?> 

Что является про я проблема; проблема в том, что у меня «Имя слишком короткое или пустое!» ошибка, даже когда я пишу очень длинное имя. Есть ли кто-нибудь, кто может мне помочь?

Заранее спасибо

+0

Не можете ли вы отладить его и выяснить, откуда возникла проблема? По крайней мере, он ограничивает язык. – khelwood

+0

Поместите 'echo $ _POST [" user_name] "в свой PHP-скрипт тест, если ваши данные действительно отправлены на ваш PHP-скрипт. – Twinfriends

+0

Нет, я не мог найти, где проблема, и поэтому я помещаю все коды, но поскольку я понимаю проблему где-то на script.js – Itrader

ответ

0

Там может быть две вещи, которые нужно снимать проблемы.

  1. Ваш скрипт jQuery не отправляет POST user_name или не может найти значение из селектора.
  2. Ваш PHP дезинфицирует $_POST['user_name'] и удаляет много строк.

Устранение неполадок:.

1. Использование Chrome или Firefox, откройте консоль разработчика или Developer Tools (в Chrome он находится в Options > More Tools > Developer Tools

Нажмите на вкладку Console Следующая два символа > введите $('input[name=name]').val() Если он возвращает undefined - это означает, что браузер не может найти этот селектор.

потенциал Fix, используйте вместо этого: $("input[name='name']").val()

Поскольку атрибут name также name JQuery может иметь трудное время синтаксического анализа этого. * Спекуляции.


2. Проверьте, чтобы увидеть, если ваш PHP получает справа $_POST данные

Я хотел бы сделать быстрый и грязный

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

В самом начале сценария.

Следующая попробуйте закомментировать:

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

Если это работает, то вы знаете, что фильтр вар убивает эту переменную.

0

Я пробовал все идеи, в первую очередь, спасибо за всех. Проблема была в двух контактах, и оба параметра «имя» были смешаны. Я добавляю #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() 

 Смежные вопросы

  • Нет связанных вопросов^_^