上篇已建立 ResumeDB 及 Resume 表(含 LONGBLOB 欄位儲存 Word 檔)。本篇實作前端上傳表單、後端存入資料庫、前端下載讀取。
<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" 缺一不可,否則檔案無法上傳。
<?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);
?>
getimagesize 等)。php.ini upload_max_filesize、post_max_size)。<?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)、模板分離、分頁與安全過濾。