контактная форма пуста; ответ из контактной формы отправляется на неправильный адрес

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

Проблема 1. Приходящее электронное письмо пусто и не содержит содержимого отправленного сообщения. Нашел здесь сообщение, которое звучит похоже, но предложенное предложение не применимо: Проблема с контактной формой: я получаю сообщения, но без содержания (пустая страница).

Проблема 2. Ответное сообщение также появляется в том же почтовом ящике, а не отправляется на адрес пользователя формы, который при тестировании оказался моим собственным.

HTML:

<form method="post" action="submit.php">
 <p>Name:<br>
 <input type="text" name="Name" id="Name" /></p>

 <p>Phone:<br>
 <input type="text" name="Phone" id="Phone" /></p>

 <p>Email:<br>
 <input type="text" name="Email" id="Email" /></p>

 <p class="antispam">Leave this empty:<br />
 <input name="url" /></p>

 <p style="color:#06C;">Forward to:<br>
 <input type="text" name="Forwardto" id="Forwardto" /></p>

 <p>Message:<br />
 <textarea name="Message" rows="20" cols="20" id="Message"></textarea></p>

 <p><input type="submit" value="Send" class="submit-button" /></p>
</form>

PHP (с удаленным моим фактическим адресом):

<?php

if(isset($_POST['url']) && $_POST['url'] == ''){

    $youremail = '[email protected]';

    $body = "This is the form that was just submitted:
    Name:  $_POST[name]
    Phone:  $_POST[phone]
    E-Mail: $_POST[email]
    Forward to: $_POST[forwardto]
    Message: $_POST[message]";

    if( $_POST['email'] && !preg_match( "/[\r\n]/", $_POST['email']) ) {
      $headers = "From: $_POST[email]";
    } else {
      $headers = "From: $youremail";
    }

    mail($youremail, 'Contact Form', $body, $headers );

}

?>

Соответствующий CSS:

<style type="text/css">
.antispam { display:none;}
</style>

Проблема в коде выше. . . или может быть что-то еще происходит?


person user2356283    schedule 09.05.2013    source источник
comment
Вы пробовали использовать $_POST['Email'] вместо $_POST['email'] с большой буквы Е?   -  person Mateusz    schedule 09.05.2013
comment
Вы также должны включить отчеты об ошибках, вы бы получили уведомления php о том, что индексы $_POST, которые вы использовали, были недействительными.   -  person Patrick Evans    schedule 09.05.2013
comment
Ключи массива php чувствительны к регистру. все ваши ключи $_POST ДОЛЖНЫ соответствовать регистру name в форме. вы отправляете Email, Phone и т. д., но пытаетесь получить доступ к email, phone и т. д.   -  person Marc B    schedule 09.05.2013


Ответы (2)


Вы пытаетесь получить доступ к $_POST['email'], в то время как имя поля email (маленькая буква "е") — попробуйте вместо этого использовать $_POST['Email']

Вторая проблема - первый аргумент функции mail() - это адрес электронной почты, на который вы хотите его отправить, то есть $_POST['Email']. Прямо сейчас вы пытаетесь отправить его в жестко запрограммированный $youremail.

person Mateusz    schedule 09.05.2013
comment
Неправильная не только переменная электронной почты. Все они будут неправильно упакованы. - person j08691; 09.05.2013
comment
Спасибо всем вам за ваши ответы. Эти исправления решили обе проблемы. - person user2356283; 09.05.2013
comment
Если я помог вам, пожалуйста, примите и поддержите мой ответ. Информацию об ошибках см. здесь. - person Mateusz; 09.05.2013
comment
@Mateusz: я пытался сделать это раньше, но это не позволит мне, потому что у меня нет минимально необходимой репутации 15. - person user2356283; 09.05.2013

сначала нужно закрыть кавычки $body = "Это только что отправленная форма:"; я предлагаю использовать $_REQUEST вместо $_POST, поскольку эта переменная является суперглобальным массивом, используемым для сбора данных, отправленных методами GET и POST. я пробовал это, и это работает, если (isset($_REQUEST['email'])) введите код здесь`{

      //Email information
      $admin_email = "myemail.co.uk";
      $subject = "This is the form that was just submitted";
      $email = $_REQUEST['email'];
      $comment = $_REQUEST['comment'];
      $full_name = $_REQUEST['full_name'];

      //send email
      mail($admin_email, "$subject", "message:" . $comment, "From:" . $email,     `enter code here`enter code here`$full_name);

       //Email response if needed
      echo "Thank you for contacting us!";
       }

      //if "email" variable is not filled out, display the form
       else  
        {
        enter code here`enter code here`?>
        enter code here`<p>Email us at <i>website name.com</i></p>
        enter code here`<?php
        enter code here`}
        enter code here`die();
        enter code here`?>
person user2433281    schedule 03.05.2016