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");
}
我有一个问题,因为我有 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");
}