我使用this post制作一个简单的“与我们联系”表单。该表单从您的访问者收集一些信息(电子邮件,姓名和消息)并通过电子邮件发送给您。
我不想重定向到感谢页面,而是希望它只在同一个HTML表单页面中打印感谢(或错误)文本。
如何做到这一点?我需要更改哪些内容才能将用户保留在同一页面并显示确认消息(“谢谢”)?
修改:使用ajax找到了一种更简单的方法。
答案 0 :(得分:1)
这是我的建议。
1-将您的文件名contact-form.html
更改为contact-form.php
2-添加了包含行并在contact-form.php
中编辑您的表单操作:
<h1>Contact us</h1>
<?php include './contact-form-handler.php'; ?>
<form method="POST" name="contactform" action="#">
3-编辑您的contact-form-handler.php,禁用标题并添加感谢您的个人信息,您还可以添加一些留给您幻想的布局和装饰。
//header('Location: contact-form-thank-you.html');
echo "Thank you " . $name . "<br />";
echo "We will contact you soon";
4-最后我会添加条件来检查表单是否已提交
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (empty... etc
}
5-(可选)要重新获取已发布的值,如果失败,我已在表单输入中添加了以下内容(其中3个,每个字段都有一个具有相应字段/变量名称):
value="<?php if (isset($_POST['name'])) echo $name; ?>"
但总的来说,当这一切完成后,我个人会仔细检查并清理一下。就像我检查JavaScript中的内容一样,没有必要检查字段是否为空,因此检查提交表单就足够了。我没有谈论形式安全,但没有谈论任何形式的滥用,这只是为了在你到目前为止做出一些想法。
完整代码
这是你的最终结果,我做了额外的事情:
与-form.php的强>
<form method="POST" name="contactform" action="#">
<p>
<label for='name'>Your Name:</label> <br>
<input type="text" name="name" value="<?php if (isset($_POST['name'])) echo $name; ?>">
</p>
<p>
<label for='email'>Email Address:</label> <br>
<input type="text" name="email" value="<?php if (isset($_POST['email'])) echo $email_address; ?>"> <br>
</p>
<p>
<label for='message'>Message:</label> <br>
<textarea name="message" value="<?php if (isset($_POST['message'])) echo $message; ?>"></textarea>
</p>
<input type="submit" value="Submit"><br>
</form>
与外形handler.php 强>
<?php
$errors = '';
$myemail = 'yourname@website.com';//<-----Put Your email address here.
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (empty($_POST['name']) ||
empty($_POST['email']) ||
empty($_POST['message'])
)
{
$errors .= "\n Error: all fields are required";
}
$name = $_POST['name'];
$email_address = $_POST['email'];
$message = $_POST['message'];
if (!preg_match(
"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i",
$email_address)
)
{
$errors .= "\n Error: Invalid email address";
}
if (empty($errors))
{
$to = $myemail;
$email_subject = "Contact form submission: $name";
$email_body = "You have received a new message. " .
" Here are the details:\n Name: $name \n Email: $email_address \n Message \n $message";
$headers = "From: $myemail\n";
$headers .= "Reply-To: $email_address";
mail($to, $email_subject, $email_body, $headers);
//redirect to the 'thank you' page
//header('Location: contact-form-thank-you.html');
echo "Thank you " . $name . "<br />";
echo "We will contact you soon";
$name = "";
$email_address = "";
$message = "";
}
}
?>