Моя HTML-форма отправляет электронную почту, но не отправляет данные. В чем может быть проблема? - PullRequest
0 голосов
/ 01 ноября 2018

Как веб-разработчик среднего уровня, у меня проблема с тем, что моя форма не отправляет вставленные данные (электронное письмо проходит, но данные формы не отправляются), я не знаю, является ли это формой или сценарием PHP.

HTML

<form id="main-contact-form" name="contact-form" method="POST" action="sendemail.php">
              <fieldset>
            <div class="row  wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
              <div class="col-sm-6">
                <div class="form-group">
                  <input type="text" name="name" class="form-control" placeholder="Name" required="required">
                </div>
              </div>
              <div class="col-sm-6">
                <div class="form-group">
                  <input type="email" name="email" class="form-control" placeholder="Email Address" required="required">
                </div>
              </div>
            </div>
            <div class="form-group">
              <input type="text" name="subject" class="form-control" placeholder="Subject" required="required">
            </div>
            <div class="form-group">
              <textarea name="message" id="message" class="form-control" rows="4" placeholder="Enter your message" required="required"></textarea>
            </div>                        
            <div class="form-group">
              <button type="submit" class="btn-submit">Send Now</button>
            </div>
                </fieldset>
          </form>

JS

// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
    event.preventDefault();
    var form_status = $('<div class="form_status"></div>');
    $.ajax({
        url: $(this).attr('action'),
        beforeSend: function(){
            form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
        }
    }).done(function(data){
        form_status.html('<p class="text-success">Thank you for contacting us. We will respond to you as soon as possible</p>').delay(5000).fadeOut();
    });
});

PHP

<?php
$name       = @trim(stripslashes($_POST['name']));
 $from       = @trim(stripslashes($_POST['email']));
$subject    = @trim(stripslashes($_POST['subject'])); 
 $message    = @trim(stripslashes($_POST['message']));
$to          = 'email@email.com';
$headers .= "MIME-Version: 1.0";
$headers .= "Content-type: text/plain; charset=iso-8859-1";
$headers .= "From: {$name} <{$from}>";
$headers .= "Reply-To: <{$from}>";
$headers .= "Subject: {$subject}";
$headers .= "X-Mailer: PHP/".phpversion();
mail($to, $subject, $message, $headers);die;
?>

Пожалуйста, помогите, поскольку я застрял здесь.

1 Ответ

0 голосов
/ 01 ноября 2018
@trim(stripslashes($_POST['name']));

Использование @ для подавления ошибок и предупреждений обычно считается плохой идеей в лучшие времена. Делать это, когда вы пытаетесь отладить проблему, - исключительно плохая идея.

form.submit(function(event){
    event.preventDefault();

Вы используете JavaScript для предотвращения отправки формы.

$.ajax({
    url: $(this).attr('action'),
    beforeSend: function(){
        form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
    }

Тогда вместо этого вы используете JavaScript для выполнения HTTP-запроса.

Вы указываете, что URL совпадает с формой.

Вы не отправляете никаких данных.

Вы не устанавливаете метод (поэтому по умолчанию это GET).

Если вы хотите отправлять данные из вашего JavaScript, то вам действительно нужно их отправить.

В руководстве jQuery объясняется, как читать данные формы. Не забудьте установить метод тоже.

...