Почему моя форма POST переносит меня на новую страницу?

0

Настроить

У меня есть простая форма HTML, которая указывает на PHP-скрипт, который отправит электронное письмо.

проблема

Когда я нажимаю кнопку отправки, отправляется электронное письмо, но я беру его на URL-адрес PHP.

Я пробовал все TARGET = "_ self" в объявлениях, но я все еще был взят на новую страницу.

Код HTML CODE

<form name="contactform" method="post" action="send_form_email1.php">
    <table width="450px">
        <tr>
            <td>
                <input type="text" placeholder="Full Name" name="full_name"/>
            </td>
        </tr>
        <tr>
            <td>
                <input type="text" placeholder="Email Address" name="email"/>
            </td>
        </tr>
        <tr>
            <td>
                <input type="text" placeholder="Phone Number" name="telephone"/>
            </td>
        </tr>
        <tr>
            <td>
                <input type="text" placeholder="Question" name="comments"/>
            </td>
        </tr>
        tr>
                 <td colspan="2" style="text-align:center">
                <input type="submit" value="Submit" > 
            </td>
        </tr>
    </table>
</form>

PHP скрипт

// EDIT THE 2 LINES BELOW AS REQUIRED
 // EDIT THE 2 LINES BELOW AS REQUIRED
$email_to = "[email protected]";
$email_subject = "Your email subject line";


function died($error) {
    // your error code can go here
    echo "We are very sorry, but there were error(s) found with the form you submitted. ";
    echo "These errors appear below.<br /><br />";
    echo $error."<br /><br />";
    echo "Please go back and fix these errors.<br /><br />";
    die();
}

// validation expected data exists
if(!isset($_POST['full_name']) ||
    !isset($_POST['email']) ||
    !isset($_POST['telephone']) ||
    !isset($_POST['comments'])) {
    died('We are sorry, but there appears to be a problem with the form you submitted.');       
}

$full_name = $_POST['full_name']; // required
$email_from = $_POST['email']; // required
$telephone = $_POST['telephone']; // not required
$comments = $_POST['comments']; // required

$error_message = "";
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
if(!preg_match($email_exp,$email_from)) {
$error_message .= 'The Email Address you entered does not appear to be valid.<br />';
}
$string_exp = "/^[A-Za-z .'-]+$/";
if(!preg_match($string_exp,$full_name)) {
$error_message .= 'The First Name you entered does not appear to be valid.<br />';
}
if(strlen($comments) < 2) {
$error_message .= 'The Comments you entered do not appear to be valid.<br />';
}
if(strlen($error_message) > 0) {
died($error_message);
}
$email_message = "Form details below.\n\n";

function clean_string($string) {
  $bad = array("content-type","bcc:","to:","cc:","href");
  return str_replace($bad,"",$string);
}

$email_message .= "Last Name: ".clean_string($last_name)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Telephone: ".clean_string($telephone)."\n";
$email_message .= "Comments: ".clean_string($comments)."\n";

// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
 @mail($email_to, $email_subject, $email_message, $headers);  
?>


<?php
}
?>

Любая помощь приветствуется.

  • 0
    действие вашей формы установлено в send_form_email1.php. после отправки письма на какой URL-адрес страницы идет ??
  • 0
    в вашей форме вы устанавливаете action = "send_form_email1.php"
Теги:
forms
html-email

6 ответов

1
Лучший ответ

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

header('Location: http://www.yoursite.com/home-page.html');
exit;
  • 0
    Я закончил тем, что пошел с этим подходом из-за его простоты. Я буду смотреть на другие варианты, как позволяет время.
0

Вы можете попробовать несколько вариантов

  1. Вы можете попробовать ajax - находиться на одной странице и использовать другой php файл для отправки электронной почты
  2. Это потребовало бы, чтобы вы изменили расширение с.html на.php. Вы можете отправить форму на существующую страницу. Тем не менее, есть некоторые дыры в области безопасности.
  3. Вы можете сохранить свой существующий код, но перенаправлять обратно на начальную страницу, как только сообщение отправлено через javascript или заголовки php.
0

Если вы не хотите перейти на новый URL-адрес, вы можете сделать запрос AJAX скрипту php вместо формы submit.

0

Ваш браузер загрузит страницу, когда форма будет отправлена на нее. Это ожидаемое поведение.

Вы можете обойти это с помощью некоторых опций:

  1. Сообщение выполняется на той же странице, код PHP, обрабатывающий форму, является его частью. Проверьте, if ($_POST) знает, что пользователь отправляет что-то, но страница будет перезагружена в любом случае;

  2. Страница, которую вызывает ваша форма, перенаправит пользователя на другую страницу;

  3. Отправьте его с помощью AJAX. Таким образом, вы даже не теряете содержимое полей, страница не обновляется вообще.

Вариант 1 не является предпочтительным, поскольку, если пользователь пытается перезагрузить страницу после отправки формы, браузер снова отправит ее. Лучшей практикой, чтобы избежать этого, является перенаправление пользователя, если вы не отправляете сообщение с AJAX, в этом случае вы полностью контролируете все, что отправлено, оно даже не заполняет их историю браузера.

  • 0
    Может ли какой-либо из этих подходов дать мне возможность подтвердить, что электронное письмо было отправлено?
  • 0
    Конечно. Все они на самом деле, это зависит только от сценария, который отправляет электронную почту, чтобы дать надлежащий отзыв.
0

Элемент Form работает как отправка данных на другую страницу. как вы указали в действии.

если вы хотите вернуться к фактическому

  1. вы должны перенаправить на него.
  2. вы также можете включить свой файл send_form_email1.php в фактический.

например:

header('Location: page_url');

или

include('yourfile');

если вы включаете файл в фактический файл, тогда вы должны установить action = "" blank, он автоматически отправит его на ту же страницу, и вы должны проверить его как отправку по почте. Тогда другой код останется таким же.

0

Я думаю, что использование заголовка будет отличным вариантом. ,

header ("Расположение вашей html-страницы"); на вашей php-странице обрабатывать формы.

Существует еще один вариант, который не используется широко.

Вы можете включить код в php файл на первую страницу и сохранить его как php-код, а затем в атрибуте действия тега формы. Пожалуйста, введите значения, например

<form name="contactform" method="post" action="">

Это не рекомендуется, но для вашей проблемы я настоятельно рекомендую это как самое простое решение

Ещё вопросы

Сообщество Overcoder
Наверх
Меню