Отправка нескольких форм PHP

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

$mailcheck = spamcheck($_POST['inputemail']);
        if ($mailcheck==FALSE)
          {
          echo "Invalid input";
          }
        else
          {
          // This still needs to be debugged online as soon as possible
          $from = $_POST['inputemail'];
          $name = $_POST['inputname'];
          $phone = $_POST['inputphone'];
          $date = $_POST['inputdate'];
          $time = $_POST['inputtime'];
          $data = $_POST['inputprotection'];
          $subject = $_POST['inputdropdown'];
          $message = $_POST['inputmessage'];
          $message = wordwrap($message, 70);
          mail("UP498701@myport.ac.uk",$subject,$message,"From: $from\n" . "Name: $name\n" . "Phone: $phone\n" . "Date: $date\n" . "Time: $time\n" . "Keep Data? $data\n");
          echo "Thank you for sending us feedback, you'll be redirected in 5 seconds";
          }
        }

Здесь я объявляю всю информацию, которая будет передана в качестве заголовка письма. Текущий PHP проходит проверку синтаксиса как работает до такой степени, что отправляется электронное письмо, содержащее $to, $subject, $message все хорошо, но заголовок $ проходит только через последнюю часть (Сохранить данные? $data\n). Когда я удаляю все остальные поля и просто сохраняю часть $data, электронное письмо перестает отправлять $header, У меня также есть проблема с перенаправлением, которое было удалено из приведенного ниже кода и будет вставлено, как только текущая проблема будет решена. Текущий полный PHP:

<html>
<body>

    <?php
    function spamcheck($field)
      {
      // Sanitize e-mail address
      $field=filter_var($field, FILTER_SANITIZE_EMAIL);
      // Validate e-mail address
      if(filter_var($field, FILTER_VALIDATE_EMAIL))
        {
        return TRUE;
        }
      else
        {
        return FALSE;
        }
      }
    ?>

    <?php 
    if (isset($_POST['inputemail']))
        {
        $mailcheck = spamcheck($_POST['inputemail']);
        if ($mailcheck==FALSE)
          {
          echo "Invalid input";
          }
        else
          {
          // This still needs to be debugged online as soon as possible
          $from = $_POST['inputemail'];
          $name = $_POST['inputname'];
          $phone = $_POST['inputphone'];
          $date = $_POST['inputdate'];
          $time = $_POST['inputtime'];
          $data = $_POST['inputprotection'];
          $subject = $_POST['inputdropdown'];
          $message = $_POST['inputmessage'];
          $message = wordwrap($message, 70);
          mail("UP498701@myport.ac.uk",$subject,$message,"From: $from\n" . "Name: $name\n" . "Phone: $phone\n" . "Date: $date\n" . "Time: $time\n" . "Keep Data? $data\n");
          echo "Thank you for sending us feedback, you'll be redirected in 5 seconds";
          }
        }
    ?>

</body>

и временно размещен по адресу http://luke-hale.com/temp/contact.html. Я уверен, что это просто случай, когда меня дезинформируют, но любая помощь будет отличной, ура!

РЕДАКТИРОВАТЬ:

хорошо, так что проблема сортируется с:

          $subject = $_POST['inputdropdown'];
          $message = $_POST['inputmessage'] . "\r\n\r\n" . $_POST['inputname'];
          $message = wordwrap($message, 70);
          $headers = "From: " . $_POST['inputemail'];
          mail("UP498701@myport.ac.uk",$subject,$message,$headers);
          echo "Thank you for sending us feedback, you'll be redirected in 5 seconds";

Это работает, хотя нигде не отображает заголовки $, но я не слишком обеспокоен этим, следующая вещь - это перенаправление, через которое я обычно запускаю:

header("refresh:5;url=http://www.domain.com")

Хотя раньше это работало некорректно, я буду применять редактирование при проверке на будущее.

РЕДАКТИРОВАТЬ

Таким образом, форма работает, а переадресация - нет. Сайт по-прежнему размещается в том же домене, но теперь полный PHP выглядит так:

<html>
<body>

    <?php
    function spamcheck($field)
      {
      // Sanitize e-mail address
      $field=filter_var($field, FILTER_SANITIZE_EMAIL);
      // Validate e-mail address
      if(filter_var($field, FILTER_VALIDATE_EMAIL))
        {
        return TRUE;
        }
      else
        {
        return FALSE;
        }
      }
    ?>

    <?php 
    if (isset($_POST['inputemail']))
        {
        $mailcheck = spamcheck($_POST['inputemail']);
        if ($mailcheck==FALSE)
          {
          echo "Invalid input";
          }
        else
          {
          $subject = $_POST['inputdropdown'];
          $message = "Name: " . $_POST['inputname'] . "\r\n\r\n" . "Email: " . $_POST['inputemail'] . "\r\n\r\n" . "Phone: " . $_POST['inputphone'] . "\r\n\r\n" . "Date: " . $_POST['inputdate'] . "\r\n\r\n" . "Time: " . $_POST['inputtime'] . "\r\n\r\n" . "Retain Data? " . $_POST['inputprotection'] . "\r\n\r\n" . "Message: " . $_POST['inputmessage'];
          $message = wordwrap($message, 70);
          $headers = "From: " . $_POST['inputemail'];
          mail("UP498701@myport.ac.uk",$subject,$message,$headers);
          echo "Thank you for sending us feedback, you'll be redirected in 5 seconds";
          }
        }
    header("refresh:5;url=http://www.domain.com")
    ?>

</body>

Форма все еще отправляет нормально, но в возвращении говорится, что начало заголовка строки не может быть передано, потому что данные браузера уже были изменены. Я не уверен точно, что я сделал или где так, если бы кто-нибудь мог протянуть руку, это было бы здорово!

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ

Мой последний, полностью рабочий код:

<?php
function spamcheck($field)
{
$field=filter_var($field, FILTER_SANITIZE_EMAIL);
if(filter_var($field, FILTER_VALIDATE_EMAIL))
{
return TRUE;
}
else
{
return FALSE;
}
}
?>
<?php
ob_start();
if (isset($_REQUEST['inputemail'])&&($_REQUEST['inputname'])&&($_REQUEST['inputmessage']))
{
$mailcheck = spamcheck($_POST['inputemail']);
if ($mailcheck==FALSE)
{
echo "Invalid email, you'll be redirected ";
header("refresh:5;url=http://www.luke-hale.com/");
}
else
{
$subject = $_POST['inputdropdown'];
$message = "Name: " . $_POST['inputname'] . "\r\n\r\n" . "Email: " . $_POST['inputemail'] . "\r\n\r\n" . "Phone: " . $_POST['inputphone'] . "\r\n\r\n" . "Date: " . $_POST['inputdate'] . "\r\n\r\n" . "Time: " . $_POST['inputtime'] . "\r\n\r\n" . "Retain Data? " . $_POST['inputprotection'] . "\r\n\r\n" . "Message: " . $_POST['inputmessage'];
$message = wordwrap($message, 70);
$headers = "From: " . $_POST['inputemail'];
mail("UP498701@myport.ac.uk",$subject,$message,$headers);
echo "Thank you for your messgae, I'll get back to you as soon as possible! You'll be redirected in 5 seconds.";
}
header("refresh:5;url=http://www.luke-hale.com/");
}
else
{
echo "You did not fill all the required fields, please try again.";
header("refresh:5;url=http://www.luke-hale.com/");
}
?>

3 ответа

Решение

Попробуйте поместить данные формы в $message переменная, вставка \n после каждого атрибута дать новую строку. Не используйте заголовок.

Для Location и Refresh требуется абсолютный URI

header('Location: http://www.domain.com');

Примеры для почты:
/questions/27779346/kak-mne-otpravit-dannyie-formyi-s-moego-sajta-na-moyu-elektronnuyu-pochtu/27779357#27779357
/questions/30203903/forma-html-php-daet-mne-500-vnutrennih-oshibok-servera-pri-dobavlenii-dopolnitelnyih-polej-vvoda/30203926#30203926

mail("Your Email Address Here",$subject,$therest,"subject: $subject\n");   

У сказал так: "Почтовая функция тоже не проблема, а правильный синтаксис есть" mail($to,$subject,$message,$headers,$parameters)

Объяснение:

your email adress = $to  
$subject = $subject  
$therest = $message (rename it if you want)  
"subject: $subject\n" = the header (change it to $headers if you want that)

Пример заголовка (как в документации)

$headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

Вы можете повторить Javascript внизу вашего PHP-скрипта, который вместо этого перенаправляет, например:

$url = "url";
$time = 5000 // time in milliseconds

print "<script>window.setTimeout(function(){window.location='".$url."'},".$time.")       </script>"
Другие вопросы по тегам