首页 > 解决方案 > 提交 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
?>

标签: phptwitter-bootstrap-3

解决方案


基于:

该网站建在 Jekyll...

我们假设所讨论的页面是静态 HTML 页面。在这种情况下,您的标头不是由 php 脚本设置的。这可以解释为什么 php 函数 header()没有设置所需的标头。

在您分享的代码示例中,了解如何调用此 php 脚本非常重要。我的猜测是您将表单数据作为 POST 直接从表单发送,或者使用javascript/ajax将数据发送到您的 php 脚本并处理响应。

您可能希望在 javascript 中处理成功案例,并在 php 函数返回成功后处理重定向。

但是,如果打算使用 php 的header()函数处理重定向,则考虑将联系表单页面移动到独立的 .php 页面。(但是,鉴于您已经采用了基于 Jekyll 的站点生成器,我不确定我是否会建议此选项)


推荐阅读