php - 提交 Bootstrap 联系模式后重定向到新页面
问题描述
用户可以通过 Bootstrap 弹出模式与我们联系。目前,它提交所有内容并回显成功消息(仍以弹出模式格式)。我不想回显消息,而是重定向到一个全新的页面(而不是另一个弹出窗口)。
我试过使用“header('Location:contact-thank-you.html'); exit();”,这似乎是显而易见的解决方案。但是,这只是被视为另一个回显 - 它在弹出模式中打印出整个页面(HTML 和所有)。
控制台中没有错误消息。
php 文件的开头上方没有空格(我理解这可能会导致问题)。
我可以通过 javascript 重定向来解决这个问题,但我想了解为什么这不起作用。我没有在页面的前面回应任何其他内容(尽管如果有人没有提交所需的信息,我确实会出错),所以 header() 不应该工作吗?它只是不能很好地与 Bootstrap 一起工作吗?
该站点是在 Jekyll 中构建的,如果这对问题有任何影响的话。
这是我的 php 的粗略轮廓,为了您的观看乐趣,删除了很多额外的东西:):
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = strip_tags(trim($_POST["name"]));
$email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
// Require Email
if (empty($email)) {
http_response_code(400);
exit;
}
// Set the email subject.
$subject = "$name - New Contact";
// Build the email content.
$email_content = "";
$email_content .= "Name: $name\n";
$email_content .= "Email: $email\n";
$email_headers = "From: $name <$email>";
$recipient = "myname@mycompany.com";
send_mail($recipient, $subject, $email_content, $email_headers);
// confirm message was sent
header('Location: contact-thank-you.html');
exit();
}
// removed mailer function and other sections unessential to this question
?>
解决方案
基于:
该网站建在 Jekyll...
我们假设所讨论的页面是静态 HTML 页面。在这种情况下,您的标头不是由 php 脚本设置的。这可以解释为什么 php 函数 header()
没有设置所需的标头。
在您分享的代码示例中,了解如何调用此 php 脚本非常重要。我的猜测是您将表单数据作为 POST 直接从表单发送,或者使用javascript/ajax将数据发送到您的 php 脚本并处理响应。
您可能希望在 javascript 中处理成功案例,并在 php 函数返回成功后处理重定向。
但是,如果打算使用 php 的header()
函数处理重定向,则考虑将联系表单页面移动到独立的 .php 页面。(但是,鉴于您已经采用了基于 Jekyll 的站点生成器,我不确定我是否会建议此选项)
推荐阅读
- google-analytics - GA 的 Measurement Protocol 将事件发送到错误的视图,而不是因为过滤器
- python - 将 PostgreSQL 加速到 BigQuery
- android - 在 Parcelable 类中使用 Parcelable 属性的问题
- ffmpeg - 在单个命令 FFMPEG 中剪切音频并添加覆盖
- python - 在 tkinter 画布上挑选(pick_event)正确的艺术家?
- scala - Akka HTTP AuthenticationFailedRejection 原因
- javascript - 通过 eval 访问组件方法中的导入对象
- jmeter - 如何为 JMeter 添加更多间隔响应时间概述
- flutter - 颤动中滚动视图内的Listview
- api - Revit API,访问数据库,试图读取或写入受保护的内存