У меня возникли проблемы с правильной настройкой php-скрипта для моей контактной формы. Мне удалось отправить его по электронной почте, но в письме не отображается имя, адрес электронной почты или текст.
PHP Script
<?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $to = 'myemail@email.comm'; $subject = 'Hello'; mail ($to, $subject, $message, "From: " . $name); echo "Your Message has been sent."; ?>
Форма обратной связи
<form role="form" action="contact.php"> <div class="form-group"> <label for="InputName">Name</label> <input name="name" type="text" class="form-control" id="InputName" placeholder="Enter Name"> </div> <div class="form-group"> <label for="InputEmail">Email Address</label> <input name="email" type="email" class="form-control" id="inputEmail" placeholder="Enter email"> </div> <div class="form-group"> <label for="InputText">Message</label> <input name="message" type="text" class="form-control" id="InputText" placeholder="Enter Text"> </div> <button name="submit" type="submit" class="btn btn-default">Send</button> </form>
Вы используете переменные POST, но ваша форма следующая:
<form role="form" action="contact.php">
не имеет метода POST. Форма по умолчанию GET, когда метод не определен.
Поэтому вам нужно будет изменить свою форму на
<form role="form" action="contact.php" method="post">
Из комментария, который вы оставили:
«У меня по-прежнему возникает проблема, когда вместо того, чтобы давать мне электронное письмо, которое они вводят, он дает сообщение, созданное хостинговой компанией, которое не является хорошим».
A: Скорее всего, из-за того, как вы используете From:
в вашем коде, который является именем человека. Почта ожидает адрес электронной почты.
Заменить:
mail ($to, $subject, $message, "From: " . $name);
с:
mail ($to, $subject, $message, $header);
и добавив следующее под $subject = 'Hello';
$header = "From: ". $name . " <" . $email . ">\r\n";
Таким образом, вы увидите имя человека в электронной почте, имея действительный заголовок «От».
Дополнительные замечания:
Я также предлагаю вам проверить, не осталось ли какое-либо из полей, используя:
if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message'])) { // execute code }
В противном случае любой может отправить электронную почту без какой-либо информации.
Вы также можете добавить else{}
к нему, как else { echo "Please fill in all the fields."; }
else { echo "Please fill in all the fields."; }
Вашей форме нужен атрибут
method="POST"
Без этого браузер по умолчанию использует method="GET"
, который отправляет форму в URL-адрес, например http://example.com/default.php?name=First%20Last&email=...
Вы должны указать метод POST:
<form role="form" method="POST" action="contact.php">