2015-12-10 4 views
0

Я работаю с PHP mail() и имею контактную форму, которая posts поля ввода submit. Все входы в форме html привязаны к ним так, чтобы PHP мог получить их значения.

<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php" role="form"> 
         <div class="row"> 
          <div class="col-sm-6"> 
           <div class="form-group"> 
            <input type="text" name="name" class="form-control" required="required" placeholder="Name"> 
           </div> 
          </div> 
          <div class="col-sm-6"> 
           <div class="form-group"> 
            <input type="text" name="email" class="form-control" required="required" placeholder="Email address"> 
           </div> 
          </div> 
         </div> 
         <div class="row"> 
          <div class="col-sm-12"> 
           <div class="form-group"> 
            <textarea name="message" id="message" required="required" class="form-control" rows="8" placeholder="Message"></textarea> 
           </div> 
           <div class="form-group"> 
            <button type="submit" class="btn btn-danger btn-lg">Send Message</button> 
           </div> 
          </div> 
         </div> 
</form> 

На submit форме posted к sendemail.php для извлечения значений входных и отправить по электронной почте:

<?php 
    header('Content-type: application/json'); 
    $status = array(
     'type'=>'success', 
     'message'=>'Email sent!' 
    ); 

    $name = @trim(stripslashes($_POST['name'])); 
    $email = @trim(stripslashes($_POST['email'])); 
    $subject = @trim(stripslashes($_POST['subject'])); 
    $message = @trim(stripslashes($_POST['message'])); 

    $email_from = $email; 
    $email_to = '[email protected]'; 

    $body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message; 

    $success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>'); 

    echo json_encode($status); 
    die; 

Как вы можете видеть, что я пытаюсь получить значение формы с помощью:

$name = @trim(stripslashes($_POST['name'])); 
$email = @trim(stripslashes($_POST['email'])); 
$subject = @trim(stripslashes($_POST['subject'])); 
$message = @trim(stripslashes($_POST['message'])); 

Который ссылается на правильные имена, связанные с именем каждой формы ввода

Но его не получать фактические значения так, когда я получаю электронную почту все тело сообщения содержит это:

Name: 
Email: 
Subject: 
Message: 

, а не фактическое содержание feilds.

Я прочитал, что PHP не разобрать POST, когда ваш ENCTYPE отличается от application/x-www-form-urlencoded или multipart/form-data, но я не имею никакого enctype Аттрибут на моем form.

результат var_dump ($ _ POST):

array(0) { 
} 

Я не могу видеть, где я пошло не так

+5

Не подавляйте ошибки (** '' @ **), исправить код и обрабатывать ошибки. – Darren

+0

Плюс, если вы используете связанный JS здесь, покажите его. –

+0

Привет, Фред, это то, о чем я просил, но до сих пор не получил ответа. – Franco

ответ

0

вы можете мне сказать, что это делает в файле PHP?

header('Content-type: application/json'); 
    $status = array(
     'type'=>'success', 
     'message'=>'Email sent!' 
    ); 

Вы отправляете форму через ajax-вызов.

Также важно отметить, что @Darren сказать, удалить эти «@» из вашего кода, вам это не нужно. Это будет подавлять ошибки в функции, если они есть!

Может быть, вы можете попробовать это вместо:

$(document).ready(function(){ 
    $('#submit').click(function(e) { 
      e.preventDefault; 

      var form = $('form#main-contact-form'); 

      var formAction = form.attr('action'); 

      $.ajax({ 
       url: formAction, 
       data : form.serialize(), 
       dataType: "json", 
       type : 'POST', 
      }) 
      .done(function(data) { 
       //here is your returned array 
       if(data.type == 'success'){ 
        alert(data.message) 
       } 
      }) 
      .fail(function() { 
       console.log("error"); 
      }) 


    }) 
}) 
+0

no ajax здесь, только массив, содержащий тест для отправки электронной почты. эхо в формате json, если это – AnonDCX

+0

Вы можете повторять результаты в PHP, ничего страшного в этом, но вы не можете получить его таким образом, если вы не используете призыв ajax, чтобы получить ответ, поэтому мне интересно, почему вы делаете это таким образом. – Franco

+0

это просто путь iv всегда. Я получу список var_dump, посмотрю, что он придумал с – AnonDCX

0

Вы можете получить сырой формат, как это.

$post = json_decode(file_get_contents('php://input')); 

А затем получить доступ, как это

$email = $post->email; 
0

Так я понял это, он оказывается, что класс .contact-form EAS уже привязан к функции js которая используется Ajax для передачи данных в скрипт PHP , В то время он не собирал никаких данных из формы, поэтому $_POST не получал никакой ценности.

Я зафиксировал ошибку, передавая значения формы:

var form = $('.contact-form'); 
form.submit(function (evt) { 
    $this = $(this); 
    $.post('sendemail.php',{ name: $('input[name=name]').val() email: $('input[name=email]').val() message: $('input[name=message]').val() }, function(data) {; 
     $this.prev().text(data.message).fadeIn().delay(3000).fadeOut(); 
    },'json'); 
    evt.preventDefault(); 
    return false; 
}); 
+0

Существуют ли какие-либо связанные функции JS? Похож на проблему, связанную с библиотекой или скриптом, который обрабатывает форму вместо стандартного POST. –