PHP腳本數(shù)據(jù)庫技巧詳細(xì)說明(中)
發(fā)表時間:2024-02-15 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]利用PHP將文件保存到數(shù)據(jù)庫 數(shù)據(jù)庫是數(shù)據(jù)組織、存儲的中心。將要處理的也可能是各種數(shù)據(jù),包括程序、文件、報表,甚至音頻、視頻數(shù)據(jù)。由于通過瀏覽器,個人用戶只能填寫少部分的個人簡歷。因此,我們這里示范用戶個人簡歷上載的功能。其他類型的數(shù)據(jù)可以模仿此例進行操作。 首先是信息收集頁面。讓用戶選擇...
利用PHP將文件保存到數(shù)據(jù)庫
數(shù)據(jù)庫是數(shù)據(jù)組織、存儲的中心。將要處理的也可能是各種數(shù)據(jù),包括程序、文件、報表,甚至音頻、視頻數(shù)據(jù)。由于通過瀏覽器,個人用戶只能填寫少部分的個人簡歷。因此,我們這里示范用戶個人簡歷上載的功能。其他類型的數(shù)據(jù)可以模仿此例進行操作。
首先是信息收集頁面。讓用戶選擇要上載的文件。此頁面的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關(guān)鍵字一定不能省,否則文件無法正確上載。
這里,我們再把向數(shù)據(jù)庫插入記錄的代碼重新設(shè)計:
〈?
//begin of file insert.php
if($ResuFile != "none")
//確定用戶選擇了文件
{
$Size = filesize($ResuFile);
//確定文件大小
$mFileData = addslashes(fread(fopen($ResuFile, "r"), $Size));
//讀取文件,對內(nèi)容進行處理
unlink($ResuFile);
//刪除上載臨時文件
}
$LinkID=@mysql_connect("localhost", "root" , "") or die("不能連接到數(shù)據(jù)庫服務(wù)器!可能是數(shù)據(jù)庫服務(wù)器沒有啟動,或者用戶名密碼有誤!");
$DBID = @mysql_select_db("ResumeDB",$LinkID) or die("選擇數(shù)據(jù)庫出錯,可能是您指定的數(shù)據(jù)庫不存在!");
$query = "insert into Resume(Name,Intro,ResuFile) values('$Name', '$Intro', '$mFileData')";
$result = @mysql_query("$query",$LinkID); //執(zhí)行查詢,插入文件到數(shù)據(jù)庫
if(! $result)
echo "數(shù)據(jù)插入失!";
else
echo "文件上載成功!";
@mysql_close($LinkID);
//end of file insert.php
?〉
有了上面的基礎(chǔ),寫出從數(shù)據(jù)庫讀數(shù)據(jù)的程序應(yīng)該很簡單了。需要注意的是文件向客戶發(fā)送的方法。服務(wù)器必須向瀏覽器發(fā)送頭信息,說明將要發(fā)送的數(shù)據(jù)為word文檔。如果用戶計算機裝有MSWord,瀏覽器將自動調(diào)用word進行文檔顯示。
我們可以設(shè)置一個超級鏈接,來下載這個Word文件:
〈?
//begin of file show.php
$LinkID=@mysql_connect("localhost", "root" , "") or die("不能連接到數(shù)據(jù)庫服務(wù)器!可能是數(shù)據(jù)庫服務(wù)器沒有啟動,或者用戶名密碼有誤!");
$DBID = @mysql_select_db("ResumeDB",$LinkID) or die("選擇數(shù)據(jù)庫出錯,可能是您指定的數(shù)據(jù)庫不存在!");
$query = "insert into Resume(Name,Intro,ResuFile) values('$Name', '$Intro', '$mFileData')";
$result = @mysql_query("$query",$LinkID);
//執(zhí)行查詢,插入文件到數(shù)據(jù)庫
$query= "select ID,Name,Intro from Resume";
//生成SQL語句
$result = mysql_query($query,$LinkID); //執(zhí)行,結(jié)果集保存到變量$result中
$num= mysql_num_rows($result); //取得查詢返回的記錄行數(shù)
if($num == 0)
{
echo "沒有找到任何記錄";
exit();
}
while($row=mysql_fetch_array($result)) //取結(jié)果集的下一行數(shù)據(jù)到數(shù)組$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文檔”,即可看到對應(yīng)成員詳細(xì)的個人簡歷。
Word文檔的顯示是用下面的文件:
〈?
// begin of file download.php
$LinkID=@mysql_connect("localhost", "root" , "") or die("不能連接到數(shù)據(jù)庫服務(wù)器!可能是數(shù)據(jù)庫服務(wù)器沒有啟動,或者用戶名密碼有誤!");
$DBID = @mysql_select_db("ResumeDB",$LinkID) or die("選擇數(shù)據(jù)庫出錯,可能是您指定的數(shù)據(jù)庫不存在!");
$query = "select ResuFile from Resume where ID=$ID";
//$ID為調(diào)用傳遞的變量
$result = @mysql_query("$query",$LinkID);
//執(zhí)行查詢,從數(shù)據(jù)庫讀取文件內(nèi)容
if(mysql_num_rows($result) 〈 1 )
{
echo "沒有找到相應(yīng)的文件!";
exit();
}
$row = mysql_fetch_array($result);
$mFileData = $row["ResuFile"];
//讀取個人簡歷的內(nèi)容(Word文件格式的數(shù)據(jù))
header("Content-type: application/msword");
//發(fā)送頭信息,說明將要發(fā)送的數(shù)據(jù)為word文檔
echo $mFileData;
//發(fā)送文檔數(shù)據(jù)
//end of file download.php
?〉
至此,我們已經(jīng)實現(xiàn)了個人簡歷的提交、數(shù)據(jù)庫存儲、信息瀏覽等功能,基本完成了“人才信息交流”的框架功能。
需要說明的是,通過PHP進行文件上載及數(shù)據(jù)庫存儲是個較突出的技術(shù)難題。很多關(guān)于PHP的網(wǎng)站都不斷出現(xiàn)這類問題。這些操作,對平臺、環(huán)境設(shè)置依賴性較大。不同的平臺配置,都可能導(dǎo)致操作的失敗。本文后面附了上述程序的運行平臺、編譯參數(shù),以供參考。