2016-11-15 102 views
0

我試圖用一個按鈕從我的數據庫中下載一個文件。從數據庫上按下按鈕的php下載文件

我用下面的代碼文件上傳到我的數據庫:

$loanform = $_FILES['loanform']['name']; 
$uploadfile = "loanforms/$loanform"; 
move_uploaded_file($_FILES['loanform']['tmp_name'],$uploadfile); 

數據庫存儲的文件名和實際的文件存儲在loanforms在Web服務器上目錄中。

當我然後點擊查看特定用戶的記錄時,我的數據庫中的所有數據都會顯示一個按鈕以下載文件。然而,當按鈕被點擊時,沒有任何反應。

要獲取用戶的信息,我使用下面的代碼;

$loanid=$_GET['loanid']; 

$my_query="select * from loans where loanid=$loanid"; 
$result= mysqli_query($connection, $my_query); 

while ($myrow = mysqli_fetch_array($result)): 

    $username = $myrow["username"]; 
    $emailaddress = $myrow["emailaddress"]; 
    $product = $myrow["product"]; 
    $product_desc = $myrow["product_desc"]; 
    $serial = $myrow["serial"]; 
    $date_collected=$myrow["date_collected"]; 
    $date_return=$myrow["date_return"]; 
    $loanform=$myrow["loanform"]; 
    $returned=$myrow["returned"]; 

endwhile; 

if (file_exists($loanform)) { 
     header('Content-Description: File Transfer'); 
     header('Content-Type: application/octet-stream'); 
     header('Content-Disposition: attachment; filename="'.basename($loanform).'"'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate'); 
     header('Pragma: public'); 
     header('Content-Length: ' . filesize($file)); 
     readfile($loanform); 
     exit; 
    } 

該按鈕的HTML是:

<label class="labelform">Loan Form:</label><input class="inputtextlarge" type="button" name="loanform" autocomplete="off" size="30" value="Download Loan Form"> 

基本上爲的LoanID = 1文件名存儲的是loanform.pdf。我怎樣才能調整我的代碼按鈕來觸發文件的下載?

+1

你能否詳細說明「沒有任何反應」?完全沒有HTTP請求?如果沒有,這個按鈕是否是一種形式?什麼是處理按鈕的點擊事件?如果提出請求,它是如何失敗的?查詢字符串值是否存在?數據庫查詢是否以某種方式失敗?還有別的嗎? – David

+0

**你的代碼很容易被利用**。 1. SQL注入是一件非常糟糕的事情:*?loanid = 1或drop table loans *,2.我可以上傳一個php文件並在您的服務器上運行任何我想要的文件。 3.遊戲結束。如果您不知道如何避免這些SQL注入,請不要讓用戶聲明文件名並使用準備好的語句。 –

回答

0

你的按鈕什麼都不做,因爲它只是按鈕。它使鏈接:

<label class="labelform"> 
    Loan Form: 
</label> 
<a href="getLaon.php?loanid=<?= $loanId; ?>" class="inputtextlarge">Download Loan Form</a> 

而且上應注意的有關安全性的評論你的問題下。