提交表单后重定向不起作用


Redirect after submitting the form doesn't work

此联系人.php表单正在处理提交,然后重定向到新页面,然后突然停止工作。我尝试添加错误处理并将标题移动到所有其他标题的顶部,但都不起作用。表单仍在按预期提交数据,只是重定向不起作用。任何想法将不胜感激。

<?php 
include 'config.php';
$post = (!empty($_POST)) ? true : false;
if($post)
{
    $email = trim($_POST['email']);
    $subject = "Downloaded Course Units";
    $error = '';
    if(!$error)
    {
        $mail = mail(WEBMASTER_EMAIL, $subject, $message, 
        "From: ".$email."'r'n"
        ."Reply-To: ".$email."'r'n"
        ."X-Mailer: PHP/" . phpversion());
        if($mail)
        {
            echo 'OK';
            header('location: http://www.google.com.au/');
            exit();
        }
    }
}
?>

使用 javascript。

而不是

header('location: http://www.google.com.au/');

?>
<script type="text/javascript">
window.location.href = 'http://www.google.com.au/';
</script>
<?php

即使您的浏览器上输出了某些内容,它也会重定向。

但是,需要采取一种预防措施:即使页面上打印了某些内容,Javascript重定向也会重定向您的页面。

确保它不会跳过任何用 PHP 编写的逻辑。

header('location: http://www.google.com.au/');行替换为以下代码以在 php 中重定向而不使用标头函数。

$URL="http://yourwebsite.com/";
echo "<script type='text/javascript'>document.location.href='{$URL}';</script>";
echo '<META HTTP-EQUIV="refresh" content="0;URL=' . $URL . '">';

如果你想知道为什么我同时使用元标记和JavaScript来重定向,那么答案很简单。

如果在浏览器中禁用了 JavaScript,则元标记将重定向页面。

标头在

包含后不起作用,回显。在没有包含的情况下重试,回声。OR 代替函数标头用

echo '<meta http-equiv="refresh" content="0; URL=http://www.google.com.au/">';

我用:

function GoToNow ($url){
    echo '<script language="javascript">window.location.href ="'.$url.'"</script>';
}

用: 转到现在 ("http://example.com/url-&error=value");

如果你想

重定向到html代码之后的另一个页面,那么使用location.href javascript方法。

请参考此示例代码:

<html>
    <head>
        <title> Using the href property of the Location object</title>
    </head>
    <body>
        <script language="JavaScript">
        <!--
            function show(){
                 document.location.href ="http://www.java2s.com";
            }
        -->
        </script>
        <form name="form1">
            <br>
            <input type="button" name="sethref" value="Set href" onClick='show()'>
            <br>
        </form>
    </body>
    </html>

除了上述答案之外,您还可以对文档和主窗口以及 iframe 使用以下 JavaScript 代码:

<script type="text/javascript" >
        window.open('http://www.google.com.au/', '_self');
</script>

_self 在与链接文档相同的框架中打开链接的文档。

在上面的命令中,第二个参数的值类似于 HTML 中标签 A( <a></a> ) 中目标属性的值,除了 _self 值之外,还可以使用以下值:

_blank 在新窗口或选项卡中打开链接的文档

_parent 在父框架中打开链接的文档

_top 在窗口的整个正文中打开链接的文档

框架

名称 在命名框架中打开链接的文档

如果您使用的是 javascript,则应使用 exit() 函数停止重定向函数下方脚本的每次执行。否则,如果有人在浏览器中关闭javascript,则将执行以下语句。

只是一个使用 HEREDOCPHP 的快速脚本,它允许您将重定向脚本存储到变量中,并且非常可读并提高可重用性。

    $homePage = "'http://localhost:8000/'";
    $redirect = <<<REDIRECT
    <script type="text/javascript">
        window.location.href = $homePage;
    </script>
    REDIRECT;

稍后在您的代码中,只要您需要吐出echo

echo $redirect;

更好的是,我们也可以将其添加到带有一些默认变量的名为 redirect 的函数中。

function redirect(string $slug = '/', string $root='http://localhost:8000'): string
{
    return <<<REDIRECT
        <script type="text/javascript">
            window.location.href = '$root$slug' ;
        </script>
        REDIRECT;
}

转到默认http://localhost:8000/

 echo redirect();

前往谷歌地图

echo redirect(slug : '/maps', root: 'https://www.google.com');

您可以在 php 表单中使用此短代码,它首先检查标头是否已使用 php 代码发送,如果是,则使用 JavaScript 代码 echo 重定向,如果标头尚未发送,php 将重定向到存储在 $URL 变量中的页面。仅在第一行中输入要重定向到的页面的 URL:$URL = "your_url.html;变量 $URL 将在代码的其余部分用于表示您的 URL:

$URL = "http://your_url.html";
   if( headers_sent() ) 
 { 
  echo("<script>location.href='$URL'</script>"); 
 } else { 
    header("Location: $URL");
 }
exit;