2009-01-10 63 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文件。