跳到主要內容

發表文章

用一層foreach解$_FILES['file']陣列(多檔上傳)存入資料表的方法->Xoops-教學撰寫:徐嘉裕Neil hsu

$_FILES['file']本身就是一個陣列,其底下包含了 $_FILES["file"]["name"]:上傳檔案的原始名稱。 $_FILES["file"]["type"]:上傳的檔案類型。 $_FILES["file"]["size"]:上傳的檔案原始大小。 $_FILES["file"]["tmp_name"]:上傳檔案後的暫存資料夾位置。 $_FILES["file"]["error"]:如果檔案上傳有錯誤,可以顯示錯誤代碼。 共有五個key值組成的,如果是單一檔案上傳用foreach可以解出陣列中的五個參數值,也就是上傳檔案的基本參數。 如果是多檔上傳,那$_FILES['file']就會是陣列格式,用一層foreach是解不出來的,因為第一層只會解出$_FILES['file']的五個屬性值但仍為陣列型態,還要再用第二層foreach去解每個屬性的參數值,不過有個更簡單的方法用一層foreach就能解出來了,方法如下: //html <input type='file' class=' form-control' multiple name='file[]' id='file' > //php //建立檔案 if(!empty($_FILES['file']['name'][0])){  foreach($_FILES['file']['name'] as $key=> $val){  //以$_FILES['file']['name']來開啟迴圈,如果上傳三個檔案就會迴圈三次 $_FILES["file"]["name"][$key]: //可以得到上傳檔案的原始名稱迴圈值。 $_FILES["file"]["type"][$key]: //可以得到上...

解決mouseenter及mouseleave執行物件動畫未完成又重複觸發的問題-教學撰寫:徐嘉裕Neil hsu

如果要用jQuery的mouseenter(滑鼠滑入)及mouseleave(滑鼠滑出)來執行物件動畫,會遇到一個問題,假使mouseenter時物件因該要跑到left:80px的位置才算動畫完成,mouseenter則回到left:0px的位置,但在動畫未執行完成user又快速的在執行區塊滑入滑出,就會變成動畫亂跳的情況!! 舉例來說,像下面這張圖三個物件是尚未mouseenter觸發前的狀態 滑鼠滑入其中一個按鈕會觸發mouseenter動畫事件,物件往左上移動 滑鼠滑出執行區會觸發mouseleave動畫事件,物件往右下移動,返回原本位置 js-code應該是這樣 //mouseenter $("body").on("mouseenter", "#indexblocksbox01", function (){ $(this).css("cursor", "pointer"); $(this).css({"animation-name":"indexbox1","animation-duration":"0.4s","left":"160px","top":"53px"}); $("#title01btn").css({"animation-name":"indexbox2","animation-duration":"0.4s","background-color":"#FFFFFF","color":"#E77C00"}); }) //mouseleave $("body").on("mouseleave", " #indexblocksbox01", function (){ $(this).css("cursor", "...

php遞迴刪除資料夾及資料夾內容function->Xoops-教學撰寫:徐嘉裕Neil hsu

如果用PHP函數刪除目錄若目錄中有檔案,則會刪除失敗,使用rmdir()也只能刪空目錄,有資料的目錄是無法刪除,所以必須要先用程式吧目錄內的檔案全部刪除,最後再刪除目錄,這裡分享一個好用的遞迴刪除目錄及目錄內容的function,另外還加上了若刪除失敗則更改目錄檔名的function,兩個一起使用就沒問題了,CODE如下: 1、吧以下兩個function貼到Xoops模組的function.php裡面 //變更資料夾檔名 function changedirectory($changedate) { $date=date("Ymd"); if(!empty(rename($changedate, $changedate."_bak_{$date}"))) return true; } //刪除目錄包含內容物件 function fileunlink_r($from) { if (!file_exists($from)) {return false;} $dir = opendir($from); while (false !== ($file = readdir($dir))) { if ($file == '.' OR $file == '..') {continue;} if (is_dir($from . DIRECTORY_SEPARATOR . $file)) { fileunlink_r($from . DIRECTORY_SEPARATOR . $file); } else { unlink($from . DIRECTORY_SEPARATOR . $file); } } if(!empty(rmdir($from))) $returnvar=true; closedir($dir); return $returnvar; } 2、在執行刪除的php上引入這兩支php函式 //刪除資料夾及底下資料($from為刪除檔案目錄的實體路徑) $Filevar=fileunlink_r($...

升級upload 0.34的方法class.upload.php-教學撰寫:徐嘉裕Neil hsu

class.upload.php是一套超好用的PHP上傳檔案套件程式,能上傳圖檔及檔案,也能多檔上傳,本次心得記錄主要以舊版的class.upload.php升級到class.upload.php0.34版的修改紀錄為主,若要查詢class.upload.php如何使用可以去Google一下有很多教學喔! 首先去verot官網下載class.upload.php套件回來,選擇最新的0.34版 網址: https://www.verot.net/home.htm 下載回來後解壓縮,吧class.upload.php-master\class.upload.php-master\ src   <- 資料夾裡面的 ->class.upload.php ->lang 複製起來,貼到您網站或模組原本放置class.upload.php檔案的目錄位置覆蓋舊檔 然後在網站或模組找到引入class.upload.php程式上傳檔案function的地方(上傳參數設定那),裡面有一個類別為 $pic = new Upload($_FILES['upfile'], 'zh_TW'); 全部替換為 $pic = new \Verot\Upload\Upload($_FILES['upfile']); 這樣就完成upload 0.34的升級了,經測試原本中文檔名會上傳失敗的問題在upload 0.34都排除了,而且支援php7.3,真的非常好用,有需要的朋友參考看看! 工作心得撰寫: 徐嘉裕 Neil hsu

Xoops免費佈景:neilambilight2.92正式版釋出-佈景設計開發:徐嘉裕Neil hsu

原本預計本次更新要翻新neilambilight佈景的前端介面,包括視差設計滾動設計等,但發現neothemesadmin模組仍有許多功能需要強化及升級,否則光改介面也沒什麼意義,所以本次發佈的neilambilight2.92仍以功能優化擴充與升級為主,包括表單防機器人AJAX機制做了強化處理(能100%阻絕機器人垃圾留言),PHP版本升級到PHP7.3.15,資料庫兼容升級到10.4.8-MariaDB嚴格模式,另外新增加了布景主選單及區塊選單的群組權限顯示功能(包含底層所有選單),以及對xlanguage多國語言模組兼容化工作,新增加一個關於我們圖文區塊,針對電腦版及手機版CSS及JS功能做優化調整處理,neilambilight2.92可以在最新版的Xoops2.5.10運行,也能兼容到Xoops2.5.8,包括tad最新釋出的模組全部都有做兼容測試,符合各種環境與不同版本的運行需求,歡迎下載安裝使用。 Xoops免費佈景-Neil佈景測試站 http://demoweb.neodw.com/themesdemo/ neilambilight2.92 更新內容 ============================== 1、修正neothemesadmin佈景管理模組PHP常數重複問題。 2、修正neothemesadmin佈景管理模組跑馬燈左右移動無法正常顯示問題。 3、修正neillibrary函數庫模組XOOPS_LICENSE_KEY定義錯誤問題。 4、會員註冊表單增加【AJAX選擇時間驗證】防機器人功能,可阻斷100%的機器人表單註冊。 5、neillibrary函數庫模組新增加刪除IP紀錄及封鎖天數自動化功能。 6、聯絡我們表單增加【AJAX選擇時間驗證】防機器人功能,可阻斷100%的機器人表單註冊。 7、聯絡我們區塊表單增加【AJAX選擇時間驗證】防機器人功能,可阻斷100%的機器人表單註冊。 8、修改資料表語法兼容10.4.8-MariaDB嚴格模式。 9、PHP7.3.15兼容升級。 10、onUpdate.php新增資料表增加10.4.8-MariaDB嚴格模式。 11、區塊選單管理後臺套用網站選單的階層樣式跟開啟效果。 12、優化佈景管理模組->網站選單跟區塊選單UI介面。 13、修改隨機小語ICON貼入格式。 14、neoth...

JQuery Tabs Generator頁籤修改範例(PHP端及JS優化修改)-教學撰寫:徐嘉裕Neil hsu

JQuery Tabs Generator是一個好用的頁籤生成器,輸入內容就能產生頁籤,大家可以點以下的網址自己試看看 https://www.html-code-generator.com/jquery/tabs-generator.php 不過如果要修改成用PHP迴圈輸出smarty樣板就還需要再做些修改,才能靈活實用美觀大方,像是下面這樣: 修改過後頁籤可隨資料自動增加跟刪減,如果只有一個頁籤也能正常顯示內容 以下為修改過的全部程式codo範例 php端-code $descriptionArr = array(); //建構陣列 $i=0; $descriptionArr[$i]['btntext']=_MD_SHOPWCASE20;  //按鈕文字 $descriptionArr[$i]['btncenter']=$productlimt['description'];  //頁籤內容 $descriptionArr[$i]['i']=$i;  //頁籤id $i++; $descriptionArr[$i]['btntext']=_MD_SHOPWCASE22;  //按鈕文字 $descriptionArr[$i]['btncenter']=$productlimt['specification'];  //頁籤內容 $descriptionArr[$i]['i']=$i;  //頁籤id $i++; $descriptionArr[$i]['btntext']=_MD_SHOPWCASE23;  //按鈕文字 $descriptionArr[$i]['btncenter']=$productlimt['productwarranty'];  //頁籤內容 $descriptionArr[$i]['i']=$i;  //頁籤id $shopwcase['descriptionbox']=$descriptionArr; 輸出smar...

Xoops模組開發->使用xlanguage3.1RC多國語言模組配合的程式修改-教學撰寫:徐嘉裕Neil hsu

xlanguage是一套可以切換Xoops語言的模組,也能透過語言標籤來切換語言內容,以達成網站多國語言的目的,xlanguage3.1RC可以完全兼容Xoops2.5.10,而且也已經被Xoops官網收錄於官方模組中,直接安裝起來用能使用了,我已經吧xlanguage模組中文化完成了,有需要的朋友可以點以下連結下載。 xlanguage3.1RC中文化下載 https://drive.google.com/file/d/1Wz8tcHLE-xtM8vwa0_NfVAyH8Xjewwv2/view?usp=sharing 雖然說安裝起來並設定好語言開啟區塊就能使用 但經過實際測試,還是有很多問題需要在其他模組寫程式套件來配合運作,才能達到100%完美應用,否則使用上還是很多不便利的地方,以下為修改模組紀錄彙整。 1、xlanguage的語言切換作用機制主要有兩段,一部分是吧user選擇的語言儲存到setcookie裡面在讀取對應的模組語言包,這部分可以切換UI的語言,另一部分則是資料字段的轉換,例如 [tw]這是中文標題[/tw][en]This is the Chinese title[/en] 所以如果選擇中文顯示 [tw]這是中文標題[/tw] 中字段,選擇英文則顯示 [en]This is the Chinese title[/en] ,語言標籤會被去掉,但這作用並不是在sql資料導出時做字段判斷,而是用伺服器頂層的Java吧所有PHP輸出的變數都掃過一次比對後擷取語言標籤內容,好處是不用在模組資料輸出去做字串擷取所有的模組都能使用,但會產生一個問題,如果不是輸出頁面的變數,像是幕後傳參寄發E-mail,就無法做語言判斷,反而會吧全部字串都給輸出,像是這樣 收到通知信的人大概也一頭霧水吧,什麼碗糕?解決辦法就是另外寫一個資料轉換function給幕後讀取資料時使用,code如下: ◎吧xlanguagePlugin()放到function.php裡面 //取得指定模組module資料表值 function modulesmidvar($modulesid="",$var=""){ $modulevar=empty($var) ? 'mid' :...