2015-11-09 4 views
1

У меня возникли проблемы с формой контакта, которую я создал для своего сайта. Я не эксперт по PHP, но я думал, что правильная форма контакта будет более профессиональной, чем простая ссылка href mailto. Мне удалось получить электронное письмо, оно сообщает мне отправителя, но темы нет и все просто пустое без текста. Также я продолжаю получать 2 письма каждый день без отправителя.Вопрос о кодировании контактной формы Php

Это то, что я сделал в PHP на странице с именем contact.php. Я надеюсь, что вы можете помочь:

<?php 
$name = $_POST['name']; 
$email = $_POST['email']; 
$form1_services = $_POST['form1_services']; 
$msg = $_POST['msg']; 
$formcontent="From: $name \n Message: $message"; 
$recipient = "[email protected]"; 
$subject = "Customer Inquiry"; 
$mailheader = "From: $email \r\n"; 
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!"); 
echo "Thank You! Keep in touch soon!" . " -" . "<a href='index.html'   style='text-decoration:none;font-family: 'gooddogregular';color:#009999;'>  Return Home</a>"; 

>

И это фактическая форма в HTML:

<form action="contact.php" method="post"> 
    <fieldset> 
     <legend></legend> 
     <div class="controlgroup"> 
      <label for="form1_name">Name *</label> 
       <input type="text" placeholder="Enter your full name*" name="name" value> 
     </div> 
     <div class="controlgroup"> 
      <label for="form1_email">Email *</label> 
       <input type="text" placeholder="Enter a valid email address*" name="email" value> 
     </div> 
     <div class="controlgroup"> 
      <label for="form1_services">Services Required</label> 
       <select id="form1_services" name="services"> 
        <option value="Website Design"> Website Design (from scratch) </option> 
        <option value="Resposive Design"> Responsive Design </option> 
        <option value="Customize a Site"> Customize a Site </option> 
        <option value="Quotation"> Quotation </option> 
       </select> 
     </div> 
     <div class="controlgroup"> 
      <label>Project Info*</label> 
       <textarea placeholder="Ciao Alessandro, I am contacting you because...*" id="msg" name="msg" required aria-required="true"></textarea> 
     </div> 
      <input type="submit" name="submit_btn" id="send" value="Hit me up!" class="wow rubberBand animated" data-wow-delay="2s"> 
    </fieldset>   
</form> 

Большое спасибо заранее. Алессандро

+0

Добавить 'echo ('

'. $ _ POST ['name']. '

');' на ваш php, чтобы убедиться, что вы действительно получаете данные из формы. – SunKnight0

+0

Как предостерегающая история, как упоминает @samlev, вам нужно выполнить проверку, чтобы кто-то не захватил вашу форму для отправки спама. – Rasclatt

+0

Также обратите внимание, что вы используете индекс, исходящий из атрибута 'name' html. Вы запрашиваете '$ _POST ['form1_services']', но он фактически отправляется как 'services'. –

ответ

1

Взглянув на вашем PHP, вы собираете ряд полей, а затем на самом деле не использовать их. Попробуйте это:

<?php 
$name = $_POST['name']; 
$email = $_POST['email']; 
$form1_services = $_POST['services']; 
$msg = $_POST['msg']; 

$message = 'From: ' . $name . ' <' . $email . '>' . "\n"; 
$message .= 'Service: ' . $form1_services . "\n"; 
$message .= 'Message: ' . "\n"; 
$message .= $msg; 

$recipient = "[email protected]"; 
$subject = "Customer Inquiry"; 
$mailheader = "From: $email \r\n"; 
mail($recipient, $subject, $message, $mailheader) or die("Error!"); 
echo "Thank You! Keep in touch soon!" . " -" . "<a href='index.html'   style='text-decoration:none;font-family: 'gooddogregular';color:#009999;'>  Return Home</a>"; 

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

+0

Привет, samlev, большое спасибо за вашу помощь. Я просто попробовал свой код и, наконец, работал. единственное, что письмо отправляется на мой мусор. Как вы думаете, это может быть исправлено? – Alessandro

+1

Лучшим вариантом является отсутствие у него «от» пользователя (это подвержено злоупотреблениям, и большинство почтовых клиентов будут видеть, что отправитель не соответствует серверу, который его отправил). Вы получаете имя и адрес электронной почты в теле, поэтому просто отправьте его со своего собственного адреса электронной почты или вы можете настроить фильтр gmail, который улавливает все контактные запросы. – samlev

+1

Я также отмечу, что наличие неаналитированного 'from' в качестве заголовка - плохая новость. Я мог бы установить свой адрес электронной почты на адрес [email protected] \ r \ nBCC: [email protected], [email protected], morespam @ example.com', а затем он отправил бы электронное письмо нескольким другим людям без вашего понимания. – samlev

0

Попробуйте добавить некоторые заголовки:

$mailheader = "From: $email \r\n"; 
    $mailheader .= "MIME-Version: 1.0\r\n"; 
    $mailheader .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
Смежные вопросы