html5 — PHP-скрипт, отправляющий письма, но не отображающий данные формы

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

Вот мой HTML-код:

 <form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
<div class="col-sm-5 col-sm-offset-1">
<div class="form-group">
<label>Name *</label>
<input type="text" name="name" class="form-control" required="required">
</div>
<div class="form-group">
<label>Email *</label>
<input type="email" name="email" class="form-control" required="required">
</div>
<div class="form-group">
<label>Phone</label>
<input type="number" class="form-control">
</div>
<div class="form-group">
<label>Company Name</label>
<input type="text" class="form-control">
</div>
</div>
<div class="col-sm-5">
<div class="form-group">
<label>Subject *</label>
<input type="text" name="subject" class="form-control" required="required">
</div>
<div class="form-group">
<label>Message *</label>
<textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea>
</div>
<div class="form-group">
<button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>
</div>
</div>
</form>

А вот и полный скрипт PHP

<?php
header('Content-type: application/json');
$status = array(
'type'=>'success',
'message'=>'Thank you for contact us. As early as possible  we will contact you '
);

$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 = 'vishal@gmail.com';//replace with your email

$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;

На самом деле я использую шаблон HTML … и все это было там … Я пробовал много способов изменить его, но он не захватывает данные формы.

Любые предложения … пожалуйста, проверьте.

0

Решение

Ваш контент находится в переменной с именем $message, Вы передаете один называется $body в mail(), Если бы у вас был включен отчет об ошибках, php сообщал бы вам об этом.

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

К вашему сведению, используя @ подавлять ошибки — плохая практика. Это только усложняет отладку и не является надлежащим способом обработки потенциальных ошибок.

1

Другие решения

  1. Символ «@» перед функцией в php будет подавлять любые сообщения об ошибках. Лучше не использовать их, пока ваше приложение не будет готово к развертыванию. Я рекомендую удалить их, пока все не будет работать так, как вы хотели бы.

  2. Я рекомендую проверить пользовательский ввод перед его обработкой. В Интернете есть несколько сценариев, которые вы можете использовать для одного и того же.

  3. Чтобы исправить вашу текущую проблему, используйте: $success = @mail($email_to, $subject, $message, 'From: <'.$email_from.'>');

1

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

подобно
Измените эти строки.
Заметка использование input type вместо button

<button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>

К этим

<input type="submit" name="submit" class="btn btn-primary btn-lg" required="required">

Комментарий Вы можете отправить mail потому что вы жестко закодировали это в своем скрипте

Как на этой линии

$email_to = 'vishal@gmail.com';//replace with your email

Ваша другая ценность зависит от вашей формы.
Эти значения. Вы не получаете эти значения через вашу форму.

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

Комментарий второй не использовать @ в производстве. как подавить ошибку. И сообщение об ошибке важно во время производства.

Комментарий третий Всегда дезинфицируйте или проверяйте пользовательский ввод. в целях безопасности.

1

Шаг к решению ошибок:

1) Проверьте, что эти переменные хранят данные:

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

по эхо один за другим.

2) Затем передайте их $body переменная.

3) Используйте правильный заголовок с типом контента и тегами from и reply.

Попробуйте это как:

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers`enter code here`
$headers .= 'To:' . "\r\n";
$headers .= 'From: Admin<youremail@email.com>' . "\r\n";
// Mail it
mail($to, $subject, $body, $headers);
0

Ничто из вышеперечисленного не помогло мне. Была просто проблема в базовом javascript … он не смог получить данные, сериализация формы работала хорошо для меня

// Форма обратной связи

var form = $('#main-contact-form');
var data = $form.serialize()
form.submit(function(event){
event.preventDefault();
var form_status = $('<div class="form_status"></div>');
$.ajax({
type: "POST",
dataType: "json",
data: data,
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">' + data.message + '</p>').delay(3000).fadeOut();
});
});
0

Решение:

1) открыть файл main.js в / js

2) найти // контактную форму

3) заменить код на:

jQuery (function ($) {‘использовать строгий’,

$('.contact-form').submit(function () {'use strict',
$this = $(this);
$.post("sendemail.php", $(".contact-form").serialize(),function(result){
if(result.type == 'success'){
$this.prev().text(result.message).fadeIn().delay(3000).fadeOut();
}
});
return false;
});

});

4) тест! : D

0