2014-11-30 8 views
3

У меня возникли проблемы с правильной настройкой скрипта php для моей контактной формы. Мне удалось отправить его по электронной почте, но в письме не отображается имя, адрес электронной почты или текст.PHP и контактная форма

PHP скрипт

<?php 
$name = $_POST['name']; 
$email = $_POST['email']; 
$message = $_POST['message']; 
$to = '[email protected]'; 
$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> 

ответ

9

Вы используете переменные 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 
} 

В противном случае, любой может послать e-mail без каких-либо информации вообще.

Вы также можете добавить else{} к нему как else { echo "Please fill in all the fields."; }

  • Это очень простой метод.
+0

Спасибо, это работает. У меня все еще есть проблема, когда вместо того, чтобы давать мне электронное письмо, которое они вводят, он дает адрес электронной почты, созданный хостинговой компанией, который не годится. – Robert

+0

@Robert Я внес изменения в свой ответ, чтобы показать вам, почему и как. Перезагрузите его и снизу. –

+0

@Robert Я сделал дополнительное редактирование относительно возможных пустых полей. Вы найдете его у основания под «Дополнительные примечания». –

1

Ваша форма должна атрибут

method="POST" 

Без этого, по умолчанию в браузерах method="GET", который отправляет форму в URL, например, http://example.com/default.php?name=First%20Last&email=...

+0

Простой и хороший ответ. +1 –

1

Вы должны указать метод POST:

<form role="form" method="POST" action="contact.php"> 
Смежные вопросы