PHP重定向,保留POST数据

6
我有一个带复选框表单的 HTML 页面。表单的操作指向一个 PHP 脚本。PHP 脚本可以收集 POST 变量,但由于执行后会跳转到 www.example/script.php,因此显然会显示空白屏幕。
我该如何让 PHP 去另一个 URL 获取更多的表单提交信息,并保留这些 POST 变量? header() 和 meta 重定向似乎会覆盖所有内容,无法收集数据...我该如何将这些数据收集到 POST 中,然后自动跳转到另一个 HTML 页面,该页面附带一个指向 PHP 脚本的操作?
感谢您的阅读和抱歉如果我的措辞有点混乱。

1
POST 数据存储在会话变量中。 - Jared Farrish
1
我只是写了 echo "<form method='POST' action='...' ...>...</form>",但我很好奇是否有更好的方法。 - JiminP
2个回答

5

您可以将$_POST变量存储在$_SESSION中,在表单的最后一部分完成时提交它们,或者您可以让中间页面将这些值存储为隐藏的输入并将它们提交给最终页面。


我明白你的意思,我可以尝试执行这个session...但是一旦script.php执行后,我如何跳转到另一个页面呢?它只会显示一个空白页面...我该如何让它跳转到另一个HTML页面,以便用户可以填写更多表单呢?谢谢! - Redirect42
为什么不在页面上直接显示表单的下一部分呢?如果你真的想要重定向用户,可以使用 header('Location: www.mysite.com/nextpage.php'); - Christopher Armstrong
我可以让“下一页”提交按钮链接到下一个表单页面,并以某种方式将所有表单信息放入POST中吗?这是否需要我在同一HTML页面上使用PHP,还是仍然可以将其放在自己的文件中? - Redirect42
此外,我愿意在DHTML和ajax中探索,以实现这一目标。还有,框架。 - Redirect42

2
我发现这段代码几乎总是有效的(除了某些情况,例如您想使用自定义的post数据进行转发,但客户端不支持JavaScript)。
这是通过利用“307临时重定向”来实现的,该方法似乎可以转发POST数据,或者通过创建自提交JavaScript表单来实现。
但是请注意,这只是一种hack方法,仅在必须转发POST数据时才使用。
<?php

function redirectNowWithPost( $url, array $post_array = NULL )
{
    if( is_null( $post_array ) ) { //we want to forward our $_POST fields
        header( "Location: $url", TRUE, 307 );
    } elseif( ! $post_array ) { //we don't have any fields to forward
        header( "Location: $url", TRUE );
    } else { //we have some to forward let's fake a custom post w/ javascript
        ?>
<form action="<?php echo htmlspecialchars( $url ); ?>" method="post">
<script type="text/javascript">
//this is a hack so that the submit function doesn't get overridden by a field called "submit"
document.forms[0].___submit___ = document.forms[0].submit;
</script>
<?php print createHiddenFields( $post_array ); ?>
</form>
<script type="text/javascript">
document.forms[0].___submit___();
</script>
        <?php
    }
    exit();
}

function createHiddenFields( $value, $name = NULL )
{
    $output = "";
    if( is_array( $value ) ) {
        foreach( $value as $key => $value ) {
            $output .= createHiddenFields( $value, is_null( $name ) ? $key : $name."[$key]" );
        }
    } else {
        $output .= sprintf("<input type=\"hidden\" name=\"%s\" value=\"%s\" />",
            htmlspecialchars( stripslashes( $name ) ),
            htmlspecialchars( stripslashes( $value ) )
        );
    }
    return $output;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接