【问题标题】:How do I create a form whose action URL matches the current URL (and preserves GET parameter)?如何创建其操作 URL 与当前 URL 匹配的表单(并保留 GET 参数)?
【发布时间】:2013-04-14 23:55:02
【问题描述】:

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

例如,如果原始 URL 是 http://mydomain.com/download.php?fname=foobar.bin,我希望它是我创建 POST 时的 URL。但是 URL 的 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 参数传递。

【问题讨论】:

    标签: php post get


    【解决方案1】:

    你见过$_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).'&'; ?>">
    

    【讨论】:

    • 我没看过,我试试看。
    • 我刚刚尝试了一个带有echo $_SERVER['QUERY_STRING']; 的简单页面,但它什么也没打印。如果PHP在cgi-bin下执行,这个变量是否存在?
    • 查看修改后的答案 - 您应该考虑预先计算该查询字符串而不是生成中间模板。
    • (我认为,)使用空操作属性提交到当前 URI,包括查询字符串。 &lt;form action="" method="post"&gt;
    • (我认为)你是对的,但我认为 @merlin2011 想要添加到现有的查询字符串,而不仅仅是发布到同一个查询字符串。
    猜你喜欢
    • 1970-01-01
    • 2020-10-23
    • 2011-05-03
    • 1970-01-01
    • 2023-03-22
    • 2020-12-16
    • 2015-03-14
    • 2019-07-13
    相关资源
    最近更新 更多