使用相同的表单/请求值重定向(POST)

时间:2012-07-06 03:01:42

标签: php http

是否可以重定向到另一个页面,例如add.php,其中包含发送到原始页面的请求。

说我有一个文件:form.html有一个帖子表格 现在我将其提交给form.php。

我希望form.php将请求重定向到add.php,以便add接收与form.php相同的POST参数

这样做是为了使form.php可以分析一个名为action的隐藏字段,并根据其值重定向到add.php或edit.php。我知道这可以通过更改form.action属性在javascript中完成。我想知道它是否可以在服务器端

3 个答案:

答案 0 :(得分:3)

你可以在switch或if块中简单地require_once。 如果您确实需要实际重定向(即您希望用户知道它们被重定向到的位置),您可能需要发送一个'假'中间页,带有一个自动-submitting(通过javascript)形式充满隐藏的输入。

原因是the HTTP spec

  

如果收到302状态代码以响应GET或HEAD以外的请求,则除非用户可以确认,否则用户代理不得自动重定向请求,因为这可能会改变请求的条件。发出的。

答案 1 :(得分:1)

在你的form.php中为form.html中的每个表单值声明隐藏字段,并从发布数据中分配值

//form.php
<form name="newform" action="add.php" method="POST">
    <input type="hidden" name="field1" value="<?php echo(@$_POST['field1']); ?>" />
    ... declare other hidden fields like above
    ... field1 represent post value from the previous page form.html

</form>

<?php
    if(editConditionSatisfied)
    {
       echo '
          <script type="text/javascript">
             document.forms["newform"].action = "edit.php";
             document.forms["newform"].submit();
          </script>
       ';
    }
    else
    {
       echo '
          <script type="text/javascript">
             document.forms["newform"].action = "add.php";
             document.forms["newform"].submit();
          </script>
       ';
    }
?>

您可以在编写脚本之前确保所有条件和流程都已发生。在您将其写出并将数据重新提交到您想要的位置之前,该脚本不会生效

希望有所帮助

答案 2 :(得分:0)

您还可以使用cURL根据您的逻辑从form.php发出对edit.php或add.php的POST请求。

form.php的

$value1 = $_POST["field1"];
//assuming your field names are field1 etc..
//assign variables for all fields.

$body = "field1=".value1."&field2=".value2;
//etc for all field/value pairs
//to transmit same names to edit.php or add.php

//pseudo code for condition based on $_POST["action"]
if(condition TRUE for add.php){
    $url = "example2.com/add.php";
} elseif((condition TRUE for edit.php){
     $url = "example3.com/edit.php";
}

if(isset($url)){     //most probably true, but just for safe-guard
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, 1);            //we are making POST request
    curl_setopt($ch, CURLOPT_POSTFIELDS, $body);  //setting the POST fields
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
}

//do something based on $response
//like doing a simple header redirect to $url

现在,您的add.php或edit.php将会看到他们正在收到POST表单请求。

让他们两个发送200(成功)或404(失败)的响应,以便您可以在$ response中捕获它并按需要继续。

请注意,我假设用户输入已经过清理。 (在将任何内容分配给$ value1之前,你应该在form.php的顶部)