首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 與 MySQL 實戰教程(中):檔案上傳存入資料庫與讀取下載

     編輯:PHP 相關知識

前情回顧

上篇已建立 ResumeDB 及 Resume 表(含 LONGBLOB 欄位儲存 Word 檔)。本篇實作前端上傳表單、後端存入資料庫、前端下載讀取。

1. 前端上傳表單

<form method="POST" action="insert.php" enctype="multipart/form-data">
  <p>姓名:<br><input type="text" name="Name" size="20"></p>
  <p>簡介:<br><textarea name="Intro" rows="2" cols="20"></textarea></p>
  <p>簡歷檔:<br><input type="file" name="ResuFile"></p>
  <p><input type="submit" value="提交" name="B1"></p>
</form>

關鍵:enctype="multipart/form-data" 缺一不可,否則檔案無法上傳。

2. 後端處理與存入資料庫

<?php
// insert.php
if ($ResuFile != 'none') {
    $size = filesize($ResuFile);
    $fileData = addslashes(fread(fopen($ResuFile, 'r'), $size));
    unlink($ResuFile); // 刪除暫存檔
}

$link = mysqli_connect('localhost', 'root', '', 'ResumeDB') or die('資料庫連線失敗');

$query = "INSERT INTO Resume (Name, Intro, ResuFile) VALUES ('$Name', '$Intro', '$fileData')";
$result = mysqli_query($link, $query);

if (!$result) {
    echo '資料插入失敗!';
} else {
    echo '檔案上傳成功!';
}
mysqli_close($link);
?>

安全性補強(現代寫法)

  • 使用 預處理語句 防止 SQL 注入。
  • 檔案型態驗證(MIME、副檔名、getimagesize 等)。
  • 限制上傳大小(php.ini upload_max_filesize、post_max_size)。
  • 檔案儲存建議放檔案系統,資料庫僅存路徑,避免資料庫膨脹。

3. 讀取檔案供下載

<?php
// show.php
$link = mysqli_connect('localhost', 'root', '', 'ResumeDB') or die('連線失敗');
$id = (int)$_GET['ID'];
$query = "SELECT ResuFile, Name FROM Resume WHERE ID=$id";
$result = mysqli_query($link, $query);
$row = mysqli_fetch_assoc($result);

if ($row) {
    header('Content-Type: application/msword');
    header('Content-Disposition: attachment; filename="' . $row['Name'] . '.doc"');
    echo $row['ResuFile'];
}
mysqli_close($link);
?>

瀏覽器收到 application/msword 標頭且裝有 Word 會自動開啟,否則提示下載。

下集預告

最終篇將介紹:資料庫類別封裝(採用 PHPLib/PDO)、模板分離、分頁與安全過濾。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved