2016-06-27 2 views
0

Я нашел следующие коды для обработки формы контакта и хотел бы добавить обработку ошибок и исключения из них.Обработка ошибок php с исключениями

HTML форма выглядит следующим образом:

<div class="contact-form"> 
    <form id="contact-form" action="sendmail.php" method="post" title="Contact Form" role="form"> 
     <div class="col-sm-6"> 
      <div class="form-group"> 
       <label for="contact-name">Name</label> 
       <input type="text" name="name" placeholder="Enter your name..." class="contact-name" id="contact-name"> 
      </div> 
      <div class="form-group"> 
       <label for="contact-email">Email</label> 
       <input type="text" name="email" placeholder="Enter your email..." class="contact-email" id="contact-email"> 
      </div> 
      <div class="form-group"> 
       <label for="contact-subject bold">Subject</label> 
       <input type="text" name="subject" placeholder="Your subject..." class="contact-subject" id="contact-subject"> 
      </div> 
     </div> 
     <div class="col-sm-6"> 
      <div class="form-group"> 
       <label for="contact-message">Message</label> 
       <textarea name="message" placeholder="Your message..." class="contact-message" id="contact-message"></textarea> 
      </div> 
     </div> 
     <div class="col-sm-12 text-center"> 
      <button type="submit" class="btn btn-default sketchFlowPrint" id="submit">Send</button> 
     </div> 
    </form> 
</div> 

sendmail.php выглядит следующим образом:

<?php 

// Email address verification 
function isEmail($email) { 
    return(preg_match("/^[-_.[:alnum:]][email protected]((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i", $email)); 
} 

if($_POST) { 

    // Enter the email where you want to receive the message 
    $emailTo = '[email protected]'; 

    $clientName = addslashes(trim($_POST['name'])); 
    $clientEmail = addslashes(trim($_POST['email'])); 
    $subject = addslashes(trim($_POST['subject'])); 
    $message = addslashes(trim($_POST['message'])); 

    $array = array(); 
    $array['nameMessage'] = ''; 
    $array['emailMessage'] = ''; 
    $array['messageMessage'] = ''; 

    if($clientName == '') { 
     $array['nameMessage'] = 'Please enter your name.'; 
    } 
    if(!isEmail($clientEmail)) { 
     $array['emailMessage'] = 'Please insert a valid email address.'; 
    } 
    if($message == '') { 
     $array['messageMessage'] = 'Please enter your message.'; 
    } 
    if($clientName != '' && isEmail($clientEmail) && $message != '') { 
     // Send email 
    $headers = "From: " . $clientName . " <" . $clientEmail . ">" . "\r\n" . "Reply-To: " . $clientEmail . "\r\n"; 
    mail($emailTo, $subject . ' (Example - Website)', $message, $headers); 
    } 

    echo json_encode($array); 

} else { 
     header ('location: index.html#contact'); 
} 

?> 

JQuery сценарий выглядит следующим образом:

// Contact form 
$('.contact-form form').submit(function(e) { 
    e.preventDefault(); 

    var form = $(this); 
    var nameLabel = form.find('label[for="contact-name"]'); 
    var emailLabel = form.find('label[for="contact-email"]'); 
    var messageLabel = form.find('label[for="contact-message"]'); 

    nameLabel.html('Name'); 
    emailLabel.html('Email'); 
    messageLabel.html('Message'); 

    var postdata = form.serialize(); 

    $.ajax({ 
     type: 'POST', 
     url: 'sendmail.php', 
     data: postdata, 
     dataType: 'json', 
     success: function(json) { 
      if(json.nameMessage !== '') { 
       nameLabel.append(' - <span class="red error-label"> ' + json.nameMessage + '</span>'); 
      } 
      if(json.emailMessage !== '') { 
       emailLabel.append(' - <span class="red error-label"> ' + json.emailMessage + '</span>'); 
      } 
      if(json.messageMessage !== '') { 
       messageLabel.append(' - <span class="red error-label"> ' + json.messageMessage + '</span>'); 
      } 
      if(json.nameMessage === '' && json.emailMessage === '' && json.messageMessage === '') { 
       form.fadeOut('fast', function() { 
        form.parent('.contact-form').append('<h2 class="text-center"><span class="orange">Thanks for contacting us!</span> We will get back to you very soon.</h2>'); 
       }); 
      } 
     } 
    }); 
}); 

Код работает очень хороший excepts для ДВУХ вещи:

  1. Я получаю электронное письмо, но адрес электронной почты клиентов не отображается нигде на моем электронном письме, и я не могу ответить клиенту, я попытался возиться с разделом заголовков, но не смог его правильно (пожалуйста, помогите мне исправить это).
  2. Я хочу, чтобы форма позволила пользователю узнать, не была ли форма отправлена. Для этого я добавил этот код скрипта Jquery после функции последнего "если":

    иначе { form.fadeOut ('быстрый', функция() { form.parent() контактно-форма. ». append («Что-то пошло не так! Пожалуйста, обновите страницу и повторите попытку».) }); }.

Я хотел бы добавить исключения из этого. Я хочу, чтобы эта функция «else», которую я добавил, выполнялась только в том случае, если что-то не так с чем-то другим, кроме случаев, когда пользователь не заполнил все необходимые поля (если пользователь не заполнил необходимые поля, форма должна отображаться «Пожалуйста, введите ваше имя. "или" Пожалуйста, введите действительный адрес электронной почты. "или" Пожалуйста, введите свое сообщение. "поверх полей ввода в зависимости от того, какое поле не было заполнено). Надеюсь, это имеет смысл.

+0

Исключения должны использоваться только в исключительных ситуациях (например, почтовый сервер сломал D :). Исключения не должны использоваться, чтобы сообщить пользователю, что введенное сообщение недействительно. –

ответ

0

в вашем PHP, вы должны определить еще пару переменных

1. $my_email = "[email protected]"; //senders email 
2. $subject = "Query from My Domain"; //a subject line 

, а затем использовать

mail($_REQUEST['email'],$subject,$message,$headers,"-f{$my_email}"); 

где

$headers = "From: " . $my_email; 

на самом деле я обычно использую

$headers = "From: " . $my_email; 
$headers .= PHP_EOL; 
$headers .= "MIME-Version: 1.0".PHP_EOL; 
$headers .= "Content-Type: multipart/mixed;".PHP_EOL; 
$headers .= " boundary=\"boundary_sdfsfsdfs345345sfsgs\""; 

Я не совсем понимаю, почему у вас есть электронная почта получателя в php; эти значения должны быть размещены из вашей формы

, например. $field_order_keys = array('name','email','comment');

, а затем запрошены с использованием $_REQUEST

это исправит проблему электронной почты отправителя

я создал plunker формы общего моего контакта PHP скрипт, который я обычно использую. В нем есть тарабарщина и проверка поля и т. Д. Возможно, вы найдете это полезным (ссылка не приземляется на нее, это контакт подтвержден.php над ним)

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