PHP и контактная форма

У меня возникли проблемы с правильной настройкой 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">