【问题标题】:How to keep all the POST information while redirecting in PHP?如何在 PHP 中重定向时保留所有 POST 信息?
【发布时间】:2023-03-25 07:57:01
【问题描述】:
header('Location: ' . $uri);

这将丢失所有$_POST 信息。

【问题讨论】:

  • @complie-fan 接受任何有价值的回答
  • header("Location: $url", TRUE, 307) 怎么样?
  • @JefreySobreiraSantos 谢谢你的精彩回答 :)

标签: php post


【解决方案1】:

不要像建议的那样使用 $_SESSION。会话数据与所有其他页面共享,包括在其他选项卡中打开的页面。如果您在网站的多个位置使用相同的技巧,您可能会遇到不可预知的行为。

未经测试的更好的代码应该是这样的。

session_start();
$data_id = md5( time().microtime().rand(0,100) );
$_SESSION["POSTDATA_$data_id"] = $_POST;
header('Location: ' . $uri."?data_id=$data_id");

在下一页你可以像这样检索以前的帖子

session_start();
$post = array();
$data_key = 'POSTDATA_'.$_GET['data_id'];
if ( !empty ( $_GET['data_id'] ) && !empty( $_SESSION[$data_key] ))
{ 
    $post = $_SESSION[$data_key];
    unset ( $_SESSION[$data_key] );
}

以上代码未经测试,您可能需要处理一些错误才能工作。

【讨论】:

  • 第二行缺少一个)?
【解决方案2】:

如果您想将POST 数据转发到其他页面(action 页面除外),请使用

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

【讨论】:

  • 如果 $uri 上的脚本希望将数据放入 $_POST,这将不起作用。
  • 如果您控制脚本,您可以更改它以检查两者。
【解决方案3】:

确实,您不能重定向 POST 请求。

要么让您的服务器代理请求(即向其他站点发出 cURL 请求),要么创建另一个表单,用隐藏字段填充它并使用 Javascript 提交/让用户点击。

或者,正如@diEcho 所说,这取决于您要执行的操作:会话。

【讨论】:

【解决方案4】:

如果您执行重定向,则帖子将丢失并且会发生 GET。

您可以将 POST 保存在 SESSION 中或将其编码为 GET(作为查询字符串)

【讨论】:

    【解决方案5】:

    您可以将帖子数据保存在会话中,重定向,然后从会话中取回。

    session_start();
    $_SESSION['POSTDATA'] = $_POST;
    header('Location: ' . $uri);
    

    然后在新位置的 PHP 文件中,像这样检索帖子数据:

    $_POST = $_SESSION['POSTDATA'];
    

    【讨论】:

      【解决方案6】:

      我确实使用我自己的简单方法。

      只要想得很合乎逻辑!例如,如果您使用要保留其值的文本属性,则可以使用:

      <?php $textvalue = $_POST['textname']; ?>
      <input type="text" name="textname" value="<?php echo $textvalue; ?>" />
      
      <br />
      
      //And if you want to use this method for a radio button, you can use:
      <?php if(isset($_POST['radio1']){
        $selected = "selected";
      }  ?>
      <input type="radio" name="radio1" <?php echo $selected; ?> />
      

      【讨论】:

      • 这个答案是错误和短视的。编辑它是不值得的,因为它没有意义。
      猜你喜欢
      • 2011-08-08
      • 1970-01-01
      • 2021-03-30
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      相关资源
      最近更新 更多