超链接工作 - 带提交按钮的Html表单不工作

Abs*_*Abs 0 php forms download hyperlink http-headers

我有一个PHP脚本,可以推送标题以允许下载文件.当通过超链接或通过浏览器使用链接调用时,此脚本可以正常工作.这是它的样子:

<a href="download.php?file=test.mp3&properFilename=Testing File">Download</a>
Run Code Online (Sandbox Code Playgroud)

我希望这是一个按钮(sbumit),所以我这样做:

<form action="download.php?file=test.mp3&properFilename=Testing File" method="get">
<input type="submit" value="Download Audio" name="download"/>
</form>
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.当我点击它.它启动下载对话框但文件名为空.它将文件名显示为".mp3"(不带引号)!通过超链接的相同链接显示确切的文件名"测试文件".为什么是这样??以下是有关的PHP代码段:

$filename = '../'.$_GET['file'];
$properFilename = $_GET['properFilename'].'.mp3';

header("Content-Disposition: attachment; filename=\"".basename($properFilename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();   
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.这让我整日疯狂!

CMS*_*CMS 5

我认为动作网址是urlencoded,并且不会发送硬编码的GET参数.

你可以尝试将action url设置为download.php,并有两个包含"file"和"properFilename"参数的隐藏字段,如下所示:

<form action="download.php" method="GET">
  <input type="submit" value="Download Audio" name="download"/>
  <input type="hidden" name="file" value="test.mp3" />
  <input type="hidden" name="properFilename" value="Testing File" />
</form>
Run Code Online (Sandbox Code Playgroud)

或者您可以使用输入类型="按钮",即使没有表单:

<input type="button" 
      onclick="location.href='download.php?file=test.mp3&properFilename=Testing File';" 
      value="Download"/>
Run Code Online (Sandbox Code Playgroud)

或图像按钮:

<a href="download.php?file=test.mp3&properFilename=Testing File">
   <img src="IMAGE_BUTTON_HERE" />
</a>
Run Code Online (Sandbox Code Playgroud)