PHP 重定向到表单页面后显示消息的外部文件联系表单

PHP externel file contact form that display a message after redirect to the form page

我有一个问题,因为我有 2 个不同的联系表格文件,但我需要在提交表格并连续重定向到 email.php 然后 return 到 form.php 之后它将显示在 email.php 中创建的变量(表单的结果)。我认为我可以通过 SESSION 或 cookie 来做到这一点,但我认为这不是最好的方法所以有人可以帮我在 form.php 中打印 $formResult 吗?

form.php

<form id="contact-form" method="POST" action="email.php">
    <div class="form-group">
        <label class="sr-only" for="contact-name">Name</label>
        <input name="name" type="text" class="form-control" id="contact-textarea" placeholder="Name">
    </div>
    <div class="form-group">
         <label class="sr-only" for="contact-email">Email address</label>
         <input name="email" type="email" class="form-control" id="contact-email" placeholder="Email">
    </div>
    <div class="form-group">
         <label class="sr-only" for="contact-message">Message</label>
         <textarea name="message" id="contact-message" class="form-control" placeholder="Message"></textarea>
    </div>
    <button name="submit" type="submit" class="btn contact-submit">Send message</button>
</form>

email.php

if (isset($_POST["submit"])) {
    $formName = $_POST['name'];
    $formEmail = $_POST['email'];
    $formMessage = $_POST['message'];

    $formBody = "From: $formName\nE-Mail: $formEmail\nMessage:\n$formMessage";
    $formTo = "myemail@gmail.com";
    $formSubject = 'Message from mysite';

    if (mail ($formTo, $formSubject, $formBody)) {
        $formResult = '<div class="alert alert-success"><span>Message sent, thank You!</span></div>';
    } else {
        $formResult = '<div class="alert alert-error"><span>Sorry there was an error. Please try again later.</span></div>';
    }

    header("location: form.php");

}

email.php改为

session_start();

if (isset($_POST["submit"])) {
    $formName = $_POST['name'];
    $formEmail = $_POST['email'];
    $formMessage = $_POST['message'];

    $formBody = "From: $formName\nE-Mail: $formEmail\nMessage:\n$formMessage";
    $formTo = "myemail@gmail.com";
    $formSubject = 'Message from mysite';

    mail ($formTo, $formSubject, $formBody);

    if (mail ($formTo, $formSubject, $formBody)) {
        $_SESSION['alert'] = '<div class="alert alert-success"><span>Message sent, thank You!</span></div>'; // changed
    } else {
        $_SESSION['alert'] = '<div class="alert alert-error"><span>Sorry there was an error. Please try again later.</span></div>'; // changed
    }

    header("location: form.php");

}

在您的 form.php 中,打印会话变量(如果存在)。显示后,删除会话。

<?php session_start() ?>

<?php 
if (isset($_SESSION['alert'])) {
    echo $_SESSION['alert'];
    unset($_SESSION['alert']);
} 
?>

<form id="contact-form" method="POST" action="email.php">
    <div class="form-group">
        <label class="sr-only" for="contact-name">Name</label>
        <input name="name" type="text" class="form-control" id="contact-textarea" placeholder="Name">
    </div>
    <div class="form-group">
         <label class="sr-only" for="contact-email">Email address</label>
         <input name="email" type="email" class="form-control" id="contact-email" placeholder="Email">
    </div>
    <div class="form-group">
         <label class="sr-only" for="contact-message">Message</label>
         <textarea name="message" id="contact-message" class="form-control" placeholder="Message"></textarea>
    </div>
    <button name="submit" type="submit" class="btn contact-submit">Send message</button>
</form>

你的思路很对,提交后可以使用sessions打印消息

您需要先启动会话,因此在 <?php 下输入 email.php 这一行:

session_start();

然后将email.php中的以下变量$formResult替换为$_SESSION["formResult"]

现在输入form.php这段代码:

<?php
session_start(); # This line must always on top of your file under the '<?php'
isset($_SESSION["formResult"])) {
    echo htmlspecialchars($_SESSION["formResult"]);

    # Now remove the session :)
    unset($_SESSION["formResult"]);
}
?>

另一种实现方法是使用 url 变量,这样就不需要会话或 cookie,例如

form.php

<?php
// define here an array of messages
$results = array(
    1 => '<div class="alert alert-success"><span>Message sent, thank You!</span></div>',
    2 => '<div class="alert alert-error"><span>Sorry there was an error. Please try again later.</span></div>',
);

if(isset($_GET['result']) && isset($results[$_GET['result']]))
{
   echo $results[$_GET['result']];
}

?>

<form id="contact-form" method="POST" action="email.php">
    <div class="form-group">
        <label class="sr-only" for="contact-name">Name</label>
        <input name="name" type="text" class="form-control" id="contact-textarea" placeholder="Name">
    </div>
    <div class="form-group">
         <label class="sr-only" for="contact-email">Email address</label>
         <input name="email" type="email" class="form-control" id="contact-email" placeholder="Email">
    </div>
    <div class="form-group">
         <label class="sr-only" for="contact-message">Message</label>
         <textarea name="message" id="contact-message" class="form-control" placeholder="Message"></textarea>
    </div>
    <button name="submit" type="submit" class="btn contact-submit">Send message</button>
</form>

email.php

if (isset($_POST["submit"])) {
    $formName = $_POST['name'];
    $formEmail = $_POST['email'];
    $formMessage = $_POST['message'];

    $formBody = "From: $formName\nE-Mail: $formEmail\nMessage:\n$formMessage";
    $formTo = "myemail@gmail.com";
    $formSubject = 'Message from mysite';

    if (mail ($formTo, $formSubject, $formBody))
    {
        $formResult = 1;
    }
    else
    {
        $formResult = 2;
    }

    header("location: form.php?result=$formResult");

}