При отправке письма данные не передаются

kikosik666

Новичок
Здравствуйте, такая вот проблема и не могу решать проблему

У меня форма обратной связи на php, ajax

Когда отправляю письмо, на почту получаю что кто ты отправил письмо, но данные не получаю(имя, заголовок, от кого, сообшение), а когда убираю ajax, все четко работает. В чем может быть проблема?

Вот код

<form id="main-contact-form" name="contact-form" method="post" action="sendemail.php">
<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>
</form>

php

<?php
$name = @trim(stripslashes($_POST['name']));
$from = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
$to = 'c[email protected]';//replace with your email


$headers = "From:".$from;

mail($to, $subject, $message, $headers);

die;
?>

ajax

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 contact us. As early as possible we will contact you</p>').delay(3000).fadeOut();
});
});
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну так убери своих собак и посмотри, приходят данные или нет. А так как они не приходят, то надо думать, что ты передаешь что-то не так.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@kikosik666, @, это плохой тон, использовать подавление ошибок при обработке входящих данных
 

kikosik666

Новичок
В айакс нужна было добавить type: 'POST' и data: $(this).serialize().

Получилась, спасибо
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@kikosik666, плохой тон в написании кода, да. Так делать не надо.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
$name = @trim(stripslashes($_POST['name']));

надо писать так:

PHP:
if(!empty($_POST['name'])){
    $name = $_POST['name'];
} else {
   $name = null;
}
 

AnrDaemon

Продвинутый новичок
Код:
$name = $_POST['name'] ?: null;
Это не проверка условия, это прямое присвоение.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@AnrDaemon, боюсь там не та версия языка, так я тоже думал написать.

PS: тьфу, я думал о

PHP:
$name = $_POST['name'] ?? 'something';
 

AnrDaemon

Продвинутый новичок
@AnrDaemon, боюсь там не та версия языка, так я тоже думал написать.

PS: тьфу, я думал о

PHP:
$name = $_POST['name'] ?? 'something';
Имя формы в _POST обычно есть, так что отдельно проверять на isset() я считаю моветоном. Если передана некорректная форма и тебе хочется половить отсутствующие поля - повесь error_handler на нотисы… IMO.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@AnrDaemon, в форме могут быть зависимые поля, часть может не передаваться и ради отлова нотисов тут городить error_handler - это уже с пушки по воробушкам. IMHO
 

AnrDaemon

Продвинутый новичок
Действительно, как-то я чекбоксы из виду упустил. Виноват!
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@AnrDaemon, ну для них можно замутить hidden с дефолтом, но не все так заморачиваются. Да и доверять вводу - это неправильно. Валидировать надобно.
 
Сверху