1

我想在执行一个 php 函数后重定向POST到一个页面,并一次使用 methode 提交一个 html 表单。

我找到了很多解决方案,GET但我POST.

4

4 回答 4

0

您可以使用会话来保存 POST 数据。

我目前正在使用如下代码。在我的第一个页面加载时,检查了 $_POST 数据。如果它包含数据库中已经存在的某些值,那么它将重定向到这些值的页面。

// This could be part of the same script as below, or a different script.
session_start();

if($_POST['my_value'] && valueExistsInMyDb($_POST['my_value']) ) { // check my db to see if this is an existing value

  $id = getIdOfMyValue($_POST['my_value']); // e.g. '4'

  $_SESSION['POST'] = $_POST; // take ALL post data and save it in the session variable

  header("location: your.php?myvalue=" . $id); // redirect to bookmarkable target page where $_GET variable matches what was posted.
  exit();  // ensure no other code is executed in this script after header is issued.
}

然后你的其他文件(甚至可能是同一个文件)可以这样做:

// your.php?myvalue=4

if(isset($_SESSION) && array_key_exists('POST',$_SESSION)) {
  $_POST = $_SESSION['POST']; // creates or overwrites your $_POST array with data from the session. The rest of your script won't be able to tell that it's not a real $_POST, which may or may not be what you want.
  unset($_SESSION['POST']); // you probably want to remove the data from the session.
}
// now your myvalue=4 is stored in GET, and you can handle the rest of the POST data as you like

我不知道这是否是最好的解决方案,但到目前为止它似乎对我有用。我几天前才写代码,还没有测试所有方面。

另一种选择是使用 HTML5 来更改地址栏。不需要重定向。但缺点是显然只有“现代 Webkit 浏览器”才能使用它。

于 2014-01-02T23:28:41.310 回答
0

如果您不想依赖 curl,Javascript 可以提供帮助。有这个躺在周围。传入 $_POST 或要发布的数据数组。添加错误/参数检查。

function http_post_redirect($url='', $data=array(), $doc=true) {

    $data = json_encode($data);

    if($doc) { echo "<html><head></head><body>"; }

    echo "
    <script type='text/javascript'>
        var data = eval('(' + '$data' + ')');
        var jsForm = document.createElement('form');

        jsForm.method = 'post';
        jsForm.action = '$url';

        for (var name in data) {
            var jsInput = document.createElement('input');
            jsInput.setAttribute('type', 'hidden');
            jsInput.setAttribute('name', name);
            jsInput.setAttribute('value', data[name]);
            jsForm.appendChild(jsInput);
        }
        document.body.appendChild(jsForm);
        jsForm.submit();
    </script>";

    if($doc) { echo "</body></html>"; }
    exit;
}
于 2013-10-10T15:30:15.777 回答
0

form action指出要在其中执行函数的 php 文档,然后最后放置header("location: your_location_file.php");

第一步 - 将表单提交到functions.php
第二步 - 对提交的数据做任何你需要做的事情
第三步 - 重定向

例子:

<form method="post" action="functions.php">
...
</form>

函数.php

<?php
...
all your code
...
header("location: your_location_file.php");
?>
于 2013-10-10T15:22:11.183 回答
0

您可以使用cUrl发送所需的 POST 数据,然后进行重定向。

在网上查找:“php curl”。

于 2013-10-10T15:21:16.280 回答