@Enniack

Почему не отправляется форма?

PHP:

<?php

$frm_name  = "$name";
$recepient = "mymail@example.com";
$sitename  = "текст";
$subject   = "Новая заявка с сайта \"$sitename\"";

$name = trim($_POST["name"]);
$phone = trim($_POST["phone"]);
$email = trim($_POST["email"]);
$theme = trim($_POST["theme"]);
$comment = trim($_POST["comment"]);



$message = "
Имя: $myname <br>
Телефон: $phone <br>
E-mail: $email <br>
Тема: $theme <br>
Комментарий: $comment <br>
";


mail($recepient, $subject, $message, "From: $frm_name " . "\r\n" . "Сообщение:" . "\r\n" . "X-Mailer: PHP/" . phpversion() . "\r\n" . "Content-type: text/html; charset=\"utf-8\"");


echo "<p>Ваше сообщение отправлено. Спасибо.";
header("refresh:3;url=http://sitename.ru");


HTML:

<div id="test-popup" class="white-popup mfp-hide">
    <div class="top-form-wrap">
        <form action="mail.php" class="form-bottom top-form" method="POST"><button class="mfp-close" type="button" title="Close (Esc)">x</button>
            <div class="form-bottom-title-wrap"><span class="form-bottom-title">Заказать обратный звонок</span></div>
            <div class="field-wrap"><img src="<?php echo get_template_directory_uri(); ?>/img/form-icon-user.png" alt="user">
                <input type="text" placeholder="Ваше имя" required name="name">
            </div>
            <div class="field-wrap"><img src="<?php echo get_template_directory_uri(); ?>/img/form-icon-phone.png" alt="phone">
                <input type="tel" placeholder="Ваш телефон" required name="phone">
            </div>
            <input type="submit" value="Отправить" class="form-submit">
        </form>
    </div>
</div>


После отправки кидает на 404.
Помогите, пожалуйста, разобраться.

ps. хостинг 1gb.by
  • Вопрос задан
  • 1622 просмотра
Решения вопроса 1
@Enniack Автор вопроса
Все очень просто, action, действительно, неверный был.
Директорию не запрашивал - <?php echo get_template_directory_uri(); ?>/mail.php
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
WebSpider
@WebSpider
header("refresh:3;url=http://sitename.ru");
Вместо этого надо прописать
header("Location: http://sitename.ru");

echo "<p>Ваше сообщение отправлено. Спасибо.";
Это убрать
Ответ написан
@heartdevil
плыву как воздушный шарик
Привет.

Если это wordpress, то вам лучше использовать стандартный способ обработки форм.
Action формы должен быть на admin-post.php. Плюс надо добавить скрытое поле и nounce для безопасности формы.
Почитайте про nounce https://codex.wordpress.org/WordPress_Nonces

Вот так выглядит примерное создание формы

<form name="loginForm" id="loginForm" action="<?php echo esc_url(get_admin_url() . 'admin-post.php') ?>" method="post">
	<input type="hidden" name="action" value="login-form" />
	<?php wp_nonce_field('process_login_form_action','login_form_sec_field'); ?>


Далее в файле functions.php

Вы пишите обработчик этой формы.

add_action('admin_post_submit-form', 'process_mail_form_action'); // для залогинненых пользователей
add_action('admin_post_nopriv_submit-form', 'process_mail_form_action'); // для незалогинненых пользователей один и тот же обработчик
function process_mail_form_action()
{
// тут читаете из $_POST
}


Не забывайте обрабатывать nouce поле в коде.
Ответ написан
Комментировать
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Если кидает на 404 - значит кидает куда то не туда. Какой url у страницы с формой?
В режиме телепата: попробуйте
action="/mail.php"
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы