1

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

假设我有一个文件:form.html,它有一个 post 表单 现在我将它提交给 form.php。

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

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

4

3 回答 3

3

您可以在 switch 或 if 块中简单地 require_once。如果您确实需要实际重定向(即您希望用户知道他们被重定向到哪里),您可能需要发送一个“假”中间页面,其中包含一个充满隐藏输入的自动提交(通过 javascript)表单。

原因在HTTP 规范中是正确的:

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

于 2012-07-06T03:09:17.673 回答
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>
       ';
    }
?>

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

希望有帮助

于 2012-07-06T03:28:46.920 回答
0

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

表单.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 的顶部)

于 2012-07-06T04:23:59.287 回答