2010/1/15

[php] 將 csv 檔轉入 mysql 去

再來便是要讓使用者自行可以將打在 csv 檔內的資料轉入到 mysql table 去

這便麻煩許多了

因為中文編碼方式到底是 big5 還是 utf-8 ? 恐怕 user 自己也不知道吧 !

此外, 第一行有沒有標題列 ? 這也得考慮到

當然了格式到底對不對呢 ? 這也是一大問題

基於以上的不確定性, 所以我便開放攔位讓 user 自行決定

且當一轉入時, 我並不急著就存到 table 去, 先把前十筆資料再次的顯示在營幕上

讓 user 自己判斷要不要轉進去, 沒問題時在確定就好

若 user 要亂轉進去的話, 各人造的業各人自己去擔吧,

因為到時真正要的資料埋在一堆垃圾,而致找不到自己要的資料時, 別人也是愛莫能助呀.,....

不多廢話了, 以下便是我的步驟

1. 這裏提供 user 自行來決定是否有標題列 ? 以及中文的格式是那一種 !!!!
當然了還提供了檔案上傳的欄位, 也 作了必需要真的上傳檔案的檢查...




2. 當 user 按下 上傳以後, 執行權限便轉移到 quest_import_exe.php 去




說明如下:
* $first_rec
==> 小弟用此變數來判定是不是第一列,
當 csv 檔有標題列時, 用這變數來將標題列惕除不要轉入

* if ( $_FILES['CSVfile']['size'] ) {
==> 當轉入的 csv 檔, 不能是空檔, size 要有時, 才可以開始轉檔

* $sql = "select max(uid) uid from quest_file where cno = '".$cno."'";
$res2 = @$mdb2->query($sql);
$row2 = $res2->fetchAll();
$uid = intval($row2[0]['uid']) + 1;
==> 這一段是將原有序號抓出來加 1 , 做為此次轉入來賓的起始序號

* if ( $china == "BIG5" ){
setlocale(LC_ALL, 'zh_TW.BIG5');
}else{
setlocale(LC_ALL, 'en_US.UTF-8');
}
==> 針對 user 選擇 big5 or utf-8 來作 csv 檔的編碼方式設定

* 接下來一大段, 直接用文字來介紹了
( 先說明, 這段的寫法有點笨, 應該有更好的寫法才是 )

小弟特別在此將前 10 筆的 data 顯示出來, 讓 user 在行確認一遍
當畫面上的標題列或是中文沒問題時,再點選"轉換正確"
正式開始轉檔

3 開始轉檔

1 則留言:

  1. 可以解釋一下第三段程式碼嗎?

    勞煩了 謝謝!!

    回覆刪除