Отправка нескольких форм 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>"