2015-09-12 5 views
1

Я довольно новичок в использовании php, и сейчас я пытаюсь создать персональный сайт. У меня есть контактная форма на странице внизу, что я, похоже, не могу работать и отправлять мне электронное сообщение, которое пишет клиент. Форма имеет следующий HTML:Ошибка при отправке почты из php-файла

<form method="post"> 
       <div class="form-group"> 
        <label for="name">Your name:</label> 
        <input type="text" id="name" class="form-control" placeholder="Your name" /> 

       </div> 
       <div class="form-group"> 
        <label for="email">Your email:</label> 
        <input type="email" id="email" class="form-control" placeholder="Your email"/> 

       </div> 
       <div class="form-group"> 
        <label for="comment">Message</label> 
        <textarea class="form-control" id="comment"></textarea> 

       </div> 
       <input type="button" class="btn btn-warning" value="submit" id="sendEmail"/> 
      </form> 

и Я использую для следующих JavaScript, чтобы поместить форму в файл PHP и отправить по электронной почте самому себе. Здесь, в JavaScript:

<script> 
$(".contentContainer").css("min-height",$(window).height()); 

$("result").hide(); 

$("#sendEmail").click(function(){ 

    var name = $("#name").val(); 
    var email = $("#email").val(); 
    var comment = $("#comment").val(); 

    $.post("validate.php", 
    {postname:name,postemail:email,postcomment:comment}, 
    function(data){ 

     $("#result").html(data).fadeIn(); 
    }); 
}); 

</script> 

и вот файл PHP, который я использую:

<?php 
$error = NULL; 
    if (!$_POST['postname']) { 
     $error="<br />Please enter your name"; 
    } 
    if (!$_POST['postemail']) { 
     $error.="<br />Please enter your email address"; 
    } 
    if (!$_POST['postcomment']) { 
     $error.="<br />Please enter a comment"; 
    } 
    if ($_POST['postemail']!="" AND !filter_var($_POST['postemail'], FILTER_VALIDATE_EMAIL)) { 
     $error.="<br />Please enter a valid email address"; 
    } 
    if($error !=NULL){ 
     $result='<div class="alert alert-danger"><strong>There were error(s) 
     in your form:</strong>'.$error.'</div>'; 
    } else{ 
     if (mail("PERSONAL EMAIL", "Comment from website", "Name: ".$_POST['postname ']." 
     Email: ".$_POST['postemail']." 
     Comment: ".$_POST['postcomment'])) { 

      //echo $_POST['postname'] 

      $result='thank you!'; 
     } else{ 
      $result='There was an error sending your message! Try again later!'; 
     } 
    } 
?> 

Несколько вещей, которые я заметил: когда я заменить «ЛИЧНУЮ ПОЧТУ», я не получайте электронное письмо, когда я проверяю контактную форму на своем веб-сайте. Однако, когда я раскомментирую echo $ _POST ['postname'] сразу после оператора почты (я интерпретировал его как mail = true, чтобы отправить почту), тогда переменная echos вернется на мой сайт. Однако переменная $ result не появляется в div #result, как я предполагаю. Что я делаю неправильно? Есть ли ошибка, которую я сделал, что мне нужно знать для справок в будущем? Эта концепция между html < -> php все еще для меня новая!

ответ

0

Во-первых, вам нужно написать предложение preventDefault() в вашем коде jQuery для участия в нажатии кнопки sendEmail, в противном случае скрипт сделает форму submit.

Хорошая практика проверяет электронные письма и т. Д. На стороне клиента, используя jQuery.

Другая полезная практика заключается в том, что вы индексируете значения righ на значениях $_POST, используя isset($_POST['name']) в PHP.

+0

Ввод с типом = "кнопка" не должен представлять форму. A

2

Прежде всего, когда функция почты возвращает TRUE, это означает только, что сообщение было принято для доставки. Это не значит, что оно было или будет доставлено или даже отправлено с сервера. Я бы также проверил папку SPAM, потому что довольно часто этот метод отправки почты из php-скрипта помещает вас в спам. Он просто не использует SMTP и реальный ящик для отправки писем.

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

https://github.com/PHPMailer/PHPMailer

Вторая проблема заключается в том, что вы не эхо обратно $ результата. Вот почему он не отправляется в JS.

0

У вас есть синтаксическая ошибка на линии электронной почты: вы должны изменить AND на &&. И вместо использования данных с жесткой записью, вы должны использовать $("#formId").serialize() для значения данных.

+0

В этом случае И хорошо. Разница между И и && заключается в том, что && имеет более высокий приоритет, чем =, но И нет. Таким образом, $ a = $ b && $ c не совпадает с $ a = $ b AND $ c, в последнем он похож на ($ a = $ b) && $ c. – Zbyszek

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