PHP header()用POST变量重定向

这个问题在这里已经有了答案:

  • 带Post参数的PHP重定向9个答案

  • 如果你不想使用会话,你可以做的唯一事情就是POST到同一页面。 无论如何,哪个IMO是最好的解决方案。

    // form.php
    
    <?php
    
        if (!empty($_POST['submit'])) {
            // validate
    
            if ($allGood) {
                // put data into database or whatever needs to be done
    
                header('Location: nextpage.php');
                exit;
            }
        }
    
    ?>
    
    <form action="form.php">
        <input name="foo" value="<?php if (!empty($_POST['foo'])) echo htmlentities($_POST['foo']); ?>">
        ...
    </form>
    

    这可以变得更加优雅,但你明白了......


    // from http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl
    function do_post_request($url, $data, $optional_headers = null)
    {
      $params = array('http' => array(
                  'method' => 'POST',
                  'content' => $data
                ));
      if ($optional_headers !== null) {
        $params['http']['header'] = $optional_headers;
      }
      $ctx = stream_context_create($params);
      $fp = @fopen($url, 'rb', false, $ctx);
      if (!$fp) {
        throw new Exception("Problem with $url, $php_errormsg");
      }
      $response = @stream_get_contents($fp);
      if ($response === false) {
        throw new Exception("Problem reading data from $url, $php_errormsg");
      }
      return $response;
    }
    

    不可能将POST重定向到别的地方。 当您发布了请求后,浏览器将从服务器获得响应,然后完成POST。 之后的一切都是一个新的要求。 当您在那里指定位置标题时,浏览器将始终使用GET方法来获取下一页。

    您可以使用一些Ajax在后台提交表单。 这样你的表单值保持不变。 如果服务器接受,您仍然可以重定向到其他页面。 如果服务器不接受,则可以显示错误消息,让用户更正输入并重新发送。

    链接地址: http://www.djcxy.com/p/74361.html

    上一篇: PHP header() redirect with POST variables

    下一篇: Setting POST variable without using form