返回列表 上一主題 發帖

14-2 資料庫圖片存取

14-2 資料庫圖片存取

14-2   資料庫圖片存取
不知道為什麼,大家似乎對於如何將如片檔案塞到資料庫很感興趣!因為一旦將圖片檔放入資料庫後,不僅資料庫的負擔變的很重,而且,若要對圖片檔加以編修是很困難的。

既然大家想知道,筆者就介紹如何將圖片檔存入資料庫吧!

本範例將圖片檔資料建立於MyQL資料庫中,這個「圖片」資料庫我們定名為「pic」,而在資料庫中用來圖片檔案資料的資料表則定名為「myimage」。

在「myimage」資料表中,我們建立了五個欄位:idno、filename、filesize、filetype、filepic,其欄位設定說明如下:

欄位名稱

資料型態

資料長度

允許Null

說明

idno

tny

4

資料序號(自動遞增)

filename

varchar

50

檔案名稱

filesize

int

11

檔案大小

filetype

varchar

50

檔案類型

filepic

text

16

檔案內容




0.png
2011-4-24 19:34

圖14-6 「myimage」資料表欄位規劃。
放置圖片檔案內容的欄位「filepic」,其資料型別可以是BLOB或Text…等,只要可放置大型二進制資料的類型皆可,在本例中,筆者選擇使用Text資料型別。
心安,平安   為了論壇的永續經營,您不妨 贊 助 論 壇
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!
請詳閱 論壇版規愛惜帳號,一起創造美好的學習討論空間。

本範例資料庫名稱為「PIC」,在範例光碟\DataBase目錄中有一個MySQL資料庫「PIC」,檔案名稱為「PIC.sql」,請您將檔案複製到您的硬碟裡並使用phpMyAdmin將其載入到MySQL Server中,本範例所使用的資料表就放置其中,您可直接加以利用。
PIC.sql (769 Bytes)

以下是上傳圖片檔案的網頁內容,筆者應該不用多做解釋了吧!
upload_pic.php
  1. <HTML>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=big5">
  4. <title>圖片檔案上傳</title>
  5. </head>
  6. <BODY>
  7. <H3>圖片檔案上傳:(存入資料庫)<HR></H3>

  8. <Form Action="mygetfile_pic.php" Method="POST"
  9. Enctype="multipart/form-data">
  10. <Input Type="File" Name="upfile" ><br>
  11. <Input Type="Submit" value=" 開始上傳 ">
  12. </Form>

  13. </BODY></HTML>
複製代碼
0.png
2011-4-24 19:36

圖14-7  選定要存入資料庫的圖片檔。
心安,平安   為了論壇的永續經營,您不妨 贊 助 論 壇
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

處理上傳的圖片檔案:
上傳檔案的基礎處理大家的清楚了,第一個重點是如何讀取圖片檔案內的資料,要讀取圖片檔案資料,首先的使用檔案處理函數群:fopen()、fread()、filesize()、fclose()等函數:
  1. //開啟圖片檔
  2. $file = fopen($_FILES["upfile"]["tmp_name"], "rb");
  3. // 讀入圖片檔資料
  4. $fileContents = fread($file, filesize($_FILES["upfile"]["tmp_name"]));
  5. //關閉圖片檔
  6. fclose($file);
  7. 第二個重點是:讀取出來的圖片資料必須使用base64_encode()函數加以編碼:
  8. // 圖片檔案資料編碼
  9.   $fileContents = base64_encode($fileContents);
複製代碼
編碼的目的在確保圖片資料的正確性。
那如何將上傳檔案的資訊寫入資料庫?不需特別處理,依照我們之前學過的,利用Insert Into命令寫入即可:
  1. //連結MySQL Server
  2. $dbnum=mysql_connect("local","root","12345a");
  3. //選取資料庫
  4. mysql_select_db("pic");
  5. //組合查詢字串
  6.         $SQLSTR="Insert into myimage (filename,filesize,filetype,filepic) values('"
  7.                   . $_FILES["upfile"]["name"] . "',"
  8.                   . $_FILES["upfile"]["size"] . ",'"
  9.                   . $_FILES["upfile"]["type"] . "','"
  10.                   . $fileContents . "')";
複製代碼
別忘了還要檢查一下上傳的圖片檔案大小是否為0,不然可是會發生錯誤喔!
mygetfile_pic.php
  1. <HTML>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=big5">
  4. <title>圖片檔案上傳</title>
  5. </head><BODY><H3>圖檔存入相關資訊:<HR></H3>

  6. <?
  7.       echo "<BLOCKQUOTE>";
  8.       echo "檔案名稱:" . $_FILES["upfile"]["name"] . "<BR>";
  9.       echo "檔案大小:" . $_FILES["upfile"]["size"] . "<BR>";
  10.       echo "檔案類型:" . $_FILES["upfile"]["type"] . "<BR>";
  11.       echo "暫存檔名:" . $_FILES["upfile"]["tmp_name"] . "<BR>";
  12.       if ( $_FILES["upfile"]["size"] > 0 )
  13.         {
  14.          //開啟圖片檔
  15.          $file = fopen($_FILES["upfile"]["tmp_name"], "rb");
  16.          // 讀入圖片檔資料
  17.          $fileContents = fread($file, filesize($_FILES["upfile"]["tmp_name"]));
  18.          //關閉圖片檔
  19.          fclose($file);

  20.          // 圖片檔案資料編碼
  21.          $fileContents = base64_encode($fileContents);

  22.          //連結MySQL Server
  23.          $dbnum=mysql_connect("127.0.0.1","sa","12345");
  24.          //選取資料庫
  25.          mysql_select_db("pic");
  26.          //組合查詢字串
  27.          $SQLSTR="Insert into myimage (filename,filesize,filetype,filepic) values('"
  28.                   . $_FILES["upfile"]["name"] . "',"
  29.                   . $_FILES["upfile"]["size"] . ",'"
  30.                   . $_FILES["upfile"]["type"] . "','"
  31.                   . $fileContents . "')";
  32.          //將圖片檔案資料寫入資料庫
  33.          if(!mysql_query($SQLSTR)==0)
  34.            {
  35.             echo "您所上傳的檔案已儲存進入資料庫<a href=\"showpic.php?filename="
  36.                  . $_FILES["upfile"]["name"] . "\">"
  37.                  . $_FILES["upfile"]["name"] . "</a>";
  38.            }
  39.          else
  40.            {
  41.             echo "您所上傳的檔案無法儲存進入資料庫";
  42.            }
  43.         }
  44.       else
  45.         {
  46.          echo "圖片上傳失敗";
  47.         }
  48.       echo "</BLOCKQUOTE>";
  49. ?>

  50. <HR></BODY></HTML>
複製代碼
為了能讓使用者能看到自己上傳的圖片檔,我們還加了一個超連結連結到圖片顯示網頁去,程式碼38~40行,超鏈結的「filename」參數就是用來提取圖片的依據。
1.png
2011-4-24 19:39

圖14-8  顯示上傳的圖片檔案資訊。
心安,平安   為了論壇的永續經營,您不妨 贊 助 論 壇
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!
請詳閱 論壇版規愛惜帳號,一起創造美好的學習討論空間。

TOP

瀏覽資料庫的圖片檔案:
要顯示圖片第一重要的是設定網頁的MIME類型,也就是網頁顯示的資料格式為何,如我們上傳的圖片檔案為*.gif,則我們要設定網頁資料的格式類型為「image/gif」,要如何設定網頁資料的格式類型?使用header()就行了:
  1. //設定網頁資料格式
  2. header("Content-Type: 格式類型");
複製代碼
可是,我們怎知道要顯示出來的圖片資料是哪一種資料類型?別擔心!我們在將圖片檔案存入資料庫時不是有一個欄位「filetype」,其內容不是就是上傳檔案的資料類型($_FILES["upfile"]["type"])嗎?直接拿來用就是了!
第二個要注意的是:當我們將圖片檔案內容存入資料庫時,使用base64_encode()函數加以編碼,因此,在取出圖片檔資料後,顯示圖片檔之前,要先用base64_decode()函數將資料還原!
showpic.php
  1. <?
  2. $dbnum=mysql_connect("localhost","root","12345a");
  3. //選取資料庫
  4. mssql_select_db("pic");
  5. //組合查詢字串
  6. $SQLSTR="select filepic,filetype from myimage where filename='"
  7.          . $_REQUEST["filename"] . "'";
  8. //
  9. $cur=mysql_query($SQLSTR);
  10. //取出資料
  11. $data=mysql_fetch_array( $cur );

  12. //設定網頁資料格式
  13. header("Content-Type: $data[1]");
  14. // 輸出圖片資料
  15. echo base64_decode($data[0]);
  16. ?>
複製代碼
0.png
2011-4-24 19:40

圖14-9    輸出資料庫的圖片檔。
心安,平安   為了論壇的永續經營,您不妨 贊 助 論 壇
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!
請詳閱 論壇版規愛惜帳號,一起創造美好的學習討論空間。

TOP

請問一下
我參考了大大的程式碼 然後自己試試看
可是會出現這種錯誤(Undefined index: upfile)
錯誤是在mygetfile_pic 第9行到第12行
都是相同的錯誤
於是我有回去檢查upload_pic的第11行
看上去是沒有問題
不知道大大能不能幫我解決問題><
謝謝^^
請詳閱 論壇版規愛惜帳號,一起創造美好的學習討論空間。

TOP

        靜思自在 : 人事的艱難與琢磨,就是一種考驗。
返回列表 上一主題