6

可能重复:
PHP header() 使用 POST 变量重定向

我正在编写一个脚本,其中表单数据被提交到另一个脚本。我希望第二个脚本对提交的$_POST数据执行一些错误检查,如果一切正常,则处理数据。如果数据有错误,我会使用header('Location: http://www.example.com/script.php');将访问者返回到表单页面。

我遇到的问题是我希望表单具有粘性 - 具有正确数据的字段维护用户输入的值。显然,要获得这些值,我需要访问$_POST数组。header()但是,当调用将访问者转发回表单时,这似乎被破坏了。

有什么方法可以使用标头位置内容将访问者重定向到另一个页面,同时仍然保留$_POST数据?

现在我像这样使用 :header('Location: http://www.example.com/add.php?id='.$id.'&name='.$name.'&code='.$code.'&desc='.$description.'');并访问 as $_GET

同样,我可以在header('location: xxx')??中使用 POST 类型?

4

3 回答 3

15

实现这种“粘性形式”的最佳方法是使用会话。

<?php
session_start();
$_SESSION = $_POST;
//do error checking here
//if all is valid
session_write_close();
header('Location: *where you want your form to go*');
die;
?>

在重定向页面上,您可以像这样使用它们:

<?php
session_start();
//use $_SESSION like you would the post data
?>
于 2012-08-31T10:32:52.493 回答
3

您可以将$_POST数据存储在会话中:

session_start();
$_SESSION['submitted_data'] = $_POST;

然后通过从变量中加载值来将值加载到输入中$_SESSION['submitted_data'],只需记住也要session_start()在错误页面的顶部。

于 2012-08-31T10:31:02.463 回答
0

为此使用会话。在表单页面中:

<?php
if (!empty($_COOKIE[session_name()])) {
    // we only start session if there is a session running
    session_id() || session_start();
}

if (empty($_POST) && !empty($_SESSION['POST'])) {
    // make sure you're not overwriting
    $_POST = $_SESSION['POST'];
}
// and so on just like you have $_POST filled

在接收 $_POST 数据的脚本中:

<?php
// after you're done with checking and stuff
session_id() || session_start();
$_SESSION['POST'] = $_POST;
header('Location: /script.php');

两个脚本都应该在保存域上,会话才能工作。如果您在Location标头中使用相对 URI,那么一切都应该可以正常工作。

于 2012-08-31T10:35:41.210 回答