2009-01-10 66 views
0

我有一个PHP脚本,它推送标题以允许文件下载。该脚本在通过超链接或通过浏览器使用链接进行调用时工作正常。这是它的样子:超链接作品 - 带提交按钮的Html表单不包含

<a href="download.php?file=test.mp3&properFilename=Testing File">Download</a> 

我想这是一个按钮(sbumit)代替,所以我这样做:

<form action="download.php?file=test.mp3&properFilename=Testing File" method="get"> 
<input type="submit" value="Download Audio" name="download"/> 
</form> 

但是,这是行不通的。当我点击它。它启动下载对话框,但文件名为空。它显示文件名称为“.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(); 

感谢您的帮助。这一直使我整日都在发狂!

回答

5

我认为这个动作url已被urlencoded,并且硬编码的GET参数不会被发送。

你可以尝试设置操作URL仅仅是为了和的download.php包含有“文件”和“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> 

或者你可以使用一个输入型= “键”,即使没有以下形式:

<input type="button" 
     onclick="location.href='download.php?file=test.mp3&properFilename=Testing File';" 
     value="Download"/> 

或图像按钮:

<a href="download.php?file=test.mp3&properFilename=Testing File"> 
    <img src="IMAGE_BUTTON_HERE" /> 
</a> 
+0

好的,我会按照你的建议尝试。中间解决方案:onclick - 我试过了,但它一直带我到另一个窗口/选项卡。我需要留在当前窗口/选项卡 - 它会像那样工作吗?非常感谢您的回复。 – Abs 2009-01-10 05:29:58

0

代替使用<输入类型=“按钮”>作为CMS建议,您也可以使用该按钮元素(这实际上是语义正确的在这里,因为你不是一个形式)

<button onclick="document.location = 'bla.php?f=vars'">Download</button> 

更妙的是偏离航向是将onclick事件移出按钮到一个单独的javascript文件。