跳到主要內容

發表文章

目前顯示的是 12月, 2017的文章

xoops模組開發->吧陣列改成字串儲存資料庫及吧資料表讀取字串改成陣列的方法-教學撰寫:徐嘉裕Neil hsu

今天幫客戶開發模組時想嘗試看看能否吧PHP陣列數值直接存進資料表中,然後資料表欄位格式是設成varchar,結果還是GG,存進去的欄位數值只顯示一個Array如下圖: 按照老方法是要先吧陣列用foreach解出來在串成 , 變成字串後儲存,不過現在找到一個更方便的方法了,用php的serialize()函數就能直接吧陣列轉成字串然後存進資料表中,之後再用unserialize()吧資料表字串再轉成陣列,非常好用,實際測試看看!! 假設要儲存像這可以多選的checkbox欄位,取值為陣列$gifts[] 然後我們建一個phpconversion的function放在Xoops模組的function.php檔案裡面 //陣列轉字串or字串轉陣列 function phpconversion($conversion="",$type="") { if($type==' serialize '){ //陣列轉字串 $conversion=serialize($conversion); } if($type==' unserialize '){ //字串轉陣列 $conversion=unserialize($conversion); } return $conversion; } 再到要儲存資料表的地方呼叫函數吧$gifts陣列轉成字串 $gifts=phpconversion($conversion=$_POST['gifts'],$type=" serialize "); //紅字可以設為serialize為陣列轉字串 這樣$gifts存進資料表後就會是字串形式!!不會再顯示Array 接者如果要讀取資料表的gifts欄位值,然後轉成陣列的方法如下!! $giftsoid=phpconversion($conversion=$productlimt['gifts'],$type=" unserialize "); //紅字可以設為unserialize 為字串轉陣列 最後再用foreach的$val值就能取出$gi

xoops模組開發->使用遞回解階層資料表的方法-教學撰寫:徐嘉裕Neil hsu

最近在幫客戶開發模組需要寫一個分類功能,之前都是用while迴圈去解,每解一層分類資料就要加一個while迴圈,然後用陣列輸出,這方法雖然好用簡單,但如果分類層級到4級5級,那不就要while回圈4~5次,整個程式會很龐大而且不易維護,所以想說乾脆用遞回來解算了,寫了一個範例請大家參考看看,程式真的精簡很多了,看了也舒服。 假設要解這樣多階層的資料表 方法如下: 1、先在模組的function.php中增加$xoopsDB ->fetchArray($result)迴圈程式,這樣輸入值就能以陣列方式吧全部資料都打包出來。 //查詢資料表while全部數值 function databasetablewhile($dbneme="",$where=""){ global $xoopsDB; $sql = "select * from " . $xoopsDB->prefix($dbneme) . " ".$where.""; $result = $xoopsDB -> query($sql); $i=1; while($keyword= $xoopsDB ->fetchArray($result)){ $keywordArr[$i]=$keyword; $i++; }; return $keywordArr; } 2、在需要顯示內容的php檔案呼叫databasetablewhile函數並給予值參 $dbneme="neilshopsort";  //資料表名稱 $where="  where `of_sortid` = '0' order by  sortidsort  DESC";  //where數值 $sort=databasetablewhile($dbneme,$where); 3、以下為遞回程式,以遞回方法解出neilshopsort資料表中並按照階層排列 //遞回開始 function retorted($dbneme="",$sortid="&qu

xoops模組開發->用while迴圈解$xoopsDB ->fetchArray($result)中資料的方法-教學撰寫:徐嘉裕Neil hsu

fetchArray($result)是個很好用的解迴圈Xoops內建函數,可以直接吧資料表的欄位名稱變成陣列的name值,例如像下面這樣的資料表,要抓紅框中數值。 如果用fetchArray($result)來解只需要 $Array= $xoopsDB ->fetchArray($result) ." where ` nsn  ` = '26'"; echo  $Array[' keywordid ']; 輸出結果就是紅框中的欄位資料數值tad_discuss 但這樣一次只能解一筆資料,如果要吧全部的資料都打包成一個陣列呢,基本上也是可以的,方法如下: //查詢資料表while全部數值 function databasetablewhile($dbneme="",$where=""){ global $xoopsDB; $sql = "select * from " . $xoopsDB->prefix($dbneme) . " ".$where.""; $result = $xoopsDB -> query($sql); $i=1; while($keyword= $xoopsDB ->fetchArray($result)){ $keywordArr[$i]=$keyword; $i++; }; return $keywordArr; } 使用while吧$xoopsDB ->fetchArray($result)包起來跑回圈撈出資料,再用$i值來區分陣列,這樣就能吧整個資料表都打包成一個$keywordArr陣列。 接下來就是解出陣列資料,方法也很簡單,只要用foreach即可 //引入 databasetablewhile函數 $dbneme="neothemeskeyword"; //資料表名稱 $where=" order by nsn DESC"; //where內容 $keyword=databasetablewhile($dbn