(作者:王凱波) 利用PHP將文件保存到數據庫 數據庫是數據組織、存儲的中心。將要處理的也可能是各種數據,包括程序、文件、報表,甚至音頻、視頻數據。由於通過浏覽器,個人用戶只能填寫少部分的個人簡歷。因此,我們這裡示范用戶個人簡歷上載的功能。其他類型的數據可以模仿此例進行操作。 首先是信息收集頁面。讓用戶選擇要上載的文件。此頁面的html代碼如下: 〈!-- begin of post.htm--〉 〈p〉 〈/p〉 〈form method="POST" action="insert.php" ENCTYPE="multipart/form-data"〉 〈p〉〈b〉個人簡歷提交〈/b〉〈/p〉 〈p〉姓名:〈br〉 〈input type="text" name="Name" size="20"〉〈/p〉 〈p〉個人簡介:〈br〉 〈textarea rows="2" name="Intro" cols="20"〉〈/textarea〉〈/p〉 〈p〉簡歷文件:〈br〉 〈input type="file" name="ResuFile"〉〈/p〉 〈p〉〈input type="submit" value="提交" name="B1"〉〈/p〉 〈/form〉 〈!-End of post.htm--〉 注意,ENCTYPE關鍵字一定不能省,否則文件無法正確上載。 這裡,我們再把向數據庫插入記錄的代碼重新設計: 〈? //begin of file insert.php if($ResuFile != "none") //確定用戶選擇了文件 { $Size = filesize($ResuFile); //確定文件大小 $mFileData = addslashes(fread(fopen($ResuFile, "r"), $Size)); //讀取文件,對內容進行處理 unlink($ResuFile); //刪除上載臨時文件 } $LinkID=@mysql_connect("localhost", "root" , "") or die("不能連接到數據庫服務器!可能是數據庫服務器沒有啟動,或者用戶名密碼有誤!"); $DBID = @mysql_select_db("ResumeDB",$LinkID) or die("選擇數據庫出錯,可能是您指定的數據庫不存在!"); $query = "insert into Resume(Name,Intro,ResuFile) values($Name, $Intro, $mFileData)"; $result = @mysql_query("$query",$LinkID); //執行查詢,插入文件到數據庫 if(! $result) echo "數據插入失敗!"; else echo "文件上載成功!"; @mysql_close($LinkID); //end of file insert.php ?〉 有了上面的基礎,寫出從數據庫讀數據的程序應該很簡單了。需要注意的是文件向客戶發送的方法。服務器必須向浏覽器發送頭信息,說明將要發送的數據為word文檔。如果用戶計算機裝有MSWord,浏覽器將自動調用word進行文檔顯示。 我們可以設置一個超級鏈接,來下載這個Word文件: 〈? //begin of file show.php $LinkID=@mysql_connect("localhost", "root" , "") or die("不能連接到數據庫服務器!可能是數據庫服務器沒有啟動,或者用戶名密碼有誤!"); $DBID = @mysql_select_db("ResumeDB",$LinkID) or die("選擇數據庫出錯,可能是您指定的數據庫不存在!"); $query = "insert into Resume(Name,Intro,ResuFile) values($Name, $Intro, $mFileData)"; $result = @mysql_query("$query",$LinkID); //執行查詢,插入文件到數據庫 $query= "select ID,Name,Intro from Resume"; //生成SQL語句 $result = mysql_query($query,$LinkID); //執行,結果集保存到變量$result中 $num= mysql_num_rows($result); //取得查詢返回的記錄行數 if($num == 0) { echo "沒有找到任何記錄"; exit(); } while($row=mysql_fetch_array($result)) //取結果集的下一行數據到數組$row中 { echo $row["ID"]." ".$row["Name"]." ".$row["Intro"]." "; echo "〈a href= "download.php?ID=".$row["ID"].""〉查看Word文檔〈/a〉〈br〉"; } //end of file show.php ?〉 訪問文件show.php,用戶看到的是個人簡要信息的列表。點擊“查看Word文檔”,即可看到對應成員詳細的個人簡歷。 Word文檔的顯示是用下面的文件: 〈? // begin of file download.php $LinkID=@mysql_connect("localhost", "root" , "") or die("不能連接到數據庫服務器!可能是數據庫服務器沒有啟動,或者用戶名密碼有誤!"); $DBID = @mysql_select_db("ResumeDB",$LinkID) or die("選擇數據庫出錯,可能是您指定的數據庫不存在!"); $query = "select ResuFile from Resume where ID=$ID"; //$ID為調用傳遞的變量 $result = @mysql_query("$query",$LinkID); //執行查詢,從數據庫讀取文件內容 if(mysql_num_rows($result) 〈 1 ) { echo "沒有找到相應的文件!"; exit(); } $row = mysql_fetch_array($result); $mFileData = $row["ResuFile"]; //讀取個人簡歷的內容(Word文件格式的數據) header("Content-type: application/msword"); //發送頭信息,說明將要發送的數據為word文檔 echo $mFileData; //發送文檔數據 //end of file download.php ?〉 至此,我們已經實現了個人簡歷的提交、數據庫存儲、信息浏覽等功能,基本完成了“人才信息交流”的框架功能。 需要說明的是,通過PHP進行文件上載及數據庫存儲是個較突出的技術難題。很多關於PHP的網站都不斷出現這類問題。這些操作,對平台、環境設置依賴性較大。不同的平台配置,都可能導致操作的失敗。本文後面附了上述程序的運行平台、編譯參數,以供參考。