php 提交表单后重定向不起作用[重复]

00jrzges  于 2023-10-15  发布在  PHP
关注(0)|答案(9)|浏览(119)

此问题已在此处有答案

How to fix "Headers already sent" error in PHP(16个回答)
3个月前关闭。
这个contact.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();
        }
    }
}
?>
cyvaqqii

cyvaqqii1#

使用JavaScript。
而不是

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

使用

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

它会重定向,即使有东西在您的浏览器上输出。
但是,有一个预防措施是要做的:JavaScript重定向将重定向您的页面,即使页面上有打印内容。
确保它不会跳过任何用PHP编写的逻辑。

f0brbegy

f0brbegy2#

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

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

如果你想知道为什么我同时使用Meta标记和JavaScript来重定向,那么答案很简单。
如果浏览器中禁用了JavaScript,则Meta标记将重定向页面。

l0oc07j2

l0oc07j23#

头不工作后,包括,回声。再试一次,不包括,回声。使用OR代替函数头

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

0dxa2lsx4#

我解决了这个问题:

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

用途:GoToNow('http://example.com/url-&error=value');

ccrfmcuu

ccrfmcuu5#

如果你想在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>
e4yzc0pl

e4yzc0pl6#

除了上面的答案,你还可以在文档和主窗口以及iframe中使用以下JavaScript代码:

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

_self在原来的框架中打开链接的文档。

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

_blank在新窗口或选项卡中打开链接的文档
_parent在父框架中打开链接的文档
_top在整个窗口中打开链接的文档
framename在命名框架中打开链接文档

4dbbbstv

4dbbbstv7#

如果你使用JavaScript,你应该使用exit()函数来停止重定向函数下面的脚本的每次执行。否则,如果有人在他们的浏览器中关闭了javascript,下面的语句将被执行。

rqcrx0a6

rqcrx0a68#

这是一个使用PHPPHP的快速脚本,它允许您将重定向脚本存储到变量中,并且可读性很强,提高了可重用性。

$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();

转到谷歌Map

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

rjzwgtxy9#

您可以在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;

相关问题