是否可以重定向到另一个页面,例如add.php,其中包含发送到原始页面的请求。
说我有一个文件:form.html有一个帖子表格 现在我将其提交给form.php。
我希望form.php将请求重定向到add.php,以便add接收与form.php相同的POST参数
这样做是为了使form.php可以分析一个名为action的隐藏字段,并根据其值重定向到add.php或edit.php。我知道这可以通过更改form.action属性在javascript中完成。我想知道它是否可以在服务器端
答案 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的顶部)