@alexiusgrey

Где ошибаюсь при редиректе с php-формы на страницу спасибо(это не вордпресс)?

Похожий вопрос задавал не так давно, тогда помогли, но копирую то,что помогло в тот раз, и выдает ошибку.
Разница в том, что тогда сайт был на вордпресс, а сейчас нет, просто на коде, без cms.
Форма
<div class="popup-fields">
                <form id="order_form" class="layout-form" action="email.php" method="POST">
                    <div class="form-group-container">
                        <div class="form-group">
                            <label for="username"></label>
                            <input class="top-screen-input" id="username" name="username" type="text" placeholder="Ваше имя" required>
                        </div>
                        <div class="form-group">
                            <label for="userphone"></label>
                            <input class="top-screen-input" name="userphone" id="userphone" type="tel" placeholder="Ваш телефон" required>
                        </div>
                        <button type="submit" class="top-screen-button">Забронировать</button>
                    </div>
                    <span class="text-desc-p">Мы не передаем Ваши данные третьим лицам</span>
                </form>
       </div>


Обработчик максимально скопировал из предыдущей, код из email.php
ini_set('display_errors', 0);
ini_set('display_startup_errors', 0);
error_reporting(E_ALL);

$to = "example@gmail.com";
$from = "noreply@".$_SERVER['SERVER_NAME'];
$subject = '=?utf-8?B?'.base64_encode('Новая заявка').'?=';
$headers .= 'Return-path: <' . $from . ">\r\n";
$headers .= 'From: заявка <' . $from . ">\r\n";
$headers .= 'Content-type: text/plain; charset=utf-8' . "\r\n";
$headers .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n\r\n";
$message = "Имя: $_POST[username]\n\nТелефон: $_POST[userphone]";
$mail = mail($to, $subject, $message, $headers);
if ($mail) {
  header( "refresh:5;url=https://example.com/thank-you.html" );
}
else {?>
   <!DOCTYPE html>
  <html>
  <head>
    <title>Отправка заявки</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>html {width: 100%;height: 100%;}</style>
  </head>
    <body style='background: #fff;'>
      <div style='width:320px;margin:100px auto;background: #fff;color:#282828;text-align:center;padding:40px 30px 0;border: 1px solid #c0c0c0;border-radius:10px;font-size: 130%;font-family: Arial,sans-serif;box-shadow:0 10px 15px rgba(0,0,0, .5);'>
        <p>Произошла ошибка! Повторите попытку позже.</p>
        <p><a href='/' style='display:block;padding:10px 25px;background:#00b5a0;border-radius:5px;color:#fff;text-decoration:none;text-shadow:1px 1px 1px #000;width:125px;margin:40px auto 0;'>На главную</a></p>
      </div>
    </body>

    </html>
<?php }
?>

Вот ошибка отрабатывает корректно, хотя я поля ввожу правильно. Где я накосячил?
Разница с предудущей формой еще в том,что в той стояло
$to = "$_POST[letter_act]";
А тут такого нету, прописал адрес почты напрямую, на нее не приходит.
Наверно все очень просто. и это я туплю, подскажите пожауйста что я делаю неправильно
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Как всегда - проверить для начала что mail() вообще работает, забив поля данными вручную. Если почта доходит - заменяйте переменными вбитые значения. В какой-то момент либо перестанет работать, и будет понятно что не работает, либо все заработает, и значит ошибка где-то в опечатке или невнимательности.
К сожалению mail() достаточно "немногословная" функция, что конкретно случилось понять из ее поведения почти невозможно, в идеале лучше использовать библиотеки по типу PHPMailer.
Ответ написан
toxa82
@toxa82
header('Location: https://example.com/thank-you.html');
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
В стандарте HTTP нет заголовка "Refresh:", есть заголовок "Location:". При этом еще и HTTP Status должен быть 301, но этим уже HTTP-сервер заведует, он сам при наличии "Location:" нужный статус ставит.

А заголовок "Refresh:" уже есть в стандарте HTML, и должно это выглядеть так:
<html>
<head>
    <title>Делаем редирект, ждите</title>
    <meta http-equiv="refresh" content="5;url=https://example.com/thank-you.html">
</head>
<body>
Сейчас будет переход, сидите ждите 5 секунд, никак не меньше!
</body>
</html>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы