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。我怎樣才能調整我的代碼按鈕來觸發文件的下載?
你能否詳細說明「沒有任何反應」?完全沒有HTTP請求?如果沒有,這個按鈕是否是一種形式?什麼是處理按鈕的點擊事件?如果提出請求,它是如何失敗的?查詢字符串值是否存在?數據庫查詢是否以某種方式失敗?還有別的嗎? – David
**你的代碼很容易被利用**。 1. SQL注入是一件非常糟糕的事情:*?loanid = 1或drop table loans *,2.我可以上傳一個php文件並在您的服務器上運行任何我想要的文件。 3.遊戲結束。如果您不知道如何避免這些SQL注入,請不要讓用戶聲明文件名並使用準備好的語句。 –