如何创建其操作URL与当前URL匹配(并保留GET参数)的表单?

时间:2013-04-22 06:50:34

标签: php post get

特别是,我有一个带有POST参数的表单提交给自己,但我希望在提交表单时保留GET参数。

例如,如果原始网址为http://mydomain.com/download.php?fname=foobar.bin,我希望在制作POST时将其作为网址。但是,网址的foobar.bin部分可能会发生变化。

这是一个最低限度的工作示例

<?php

$pass = $_POST['pass'];

$filename = $_GET['p'];

$file = "../../cgi-secret/$filename";

if($pass == "foobar")
{
    header('Content-type: application/octet-stream');
    header("Content-Disposition: attachment; filename=\"$filename\"");
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    // The PDF source is in original.pdf
    readfile($file);
}
if(isset($_POST))
{?>
    <form method="POST" action="download.php?p=$file">
        Password <input type="password" name="pass"></input>
        <input type="submit" name="submit" value="Get File" ></input>
        </form>
<?}
?>

在这一行,我想发布到当前的URL,无论发生什么

    <form method="POST" action="download.php?p=$filename">

为了给出一些背景信息,我试图修改我的问题的答案 How can I password protect a binary file download?以便我可以将文件名作为GET参数传递。

1 个答案:

答案 0 :(得分:0)

你见过$_SERVER['QUERY_STRING']吗?在渲染表单时,如果没有循环现有的$_GET数组,那么它可能是最简单的方法。

一个例子:

<form method="POST" 
      action="download.php?p=$filename&<?php echo $_SERVER['QUERY_STRING']; ?>">

如果您无权访问$_SERVER['QUERY_STRING'],则可以使用:

    <form method="POST" 
          action="download.php?p=$filename&<?php foreach($_GET as $key => $val) echo $key.'='.urlencode($val).'&'; ?>">