PHP指令碼資料庫功能詳解(中)

來源:互聯網
上載者:User

利用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的網站都不斷出現這類問題。這些操作,對平台、環境設定依賴性較大。不同的平台配置,都可能導致操作的失敗。本文後面附了上述程式的運行平台、編譯參數,以供參考。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.