跳到主要內容

發表文章

目前顯示的是 10月, 2018的文章

寫一個PHP高效率資料表交叉條件查詢方法!!-教學撰寫:徐嘉裕Neil hsu

在開發模組功能最怕遇到就是多條件的資料表交叉查詢,例如查詢資料表條件A+條件B,但又可單獨查詢條件A及條件B,如果只有1-2個查詢項目還好,但如果同時有5個或更多的查詢項目,有時候容易出錯,所以想出來一個高效率又方便的交叉查詢function寫法分享給大家!! 例如像下面這個介面圖有5項查詢功能,要能同時查詢單項及多項交叉查詢並將結果顯示右方的總表內容中!! 這樣必須設資料表的where查詢條件!如果一個一個判斷,5項查詢會產生5*5=25總組合!會寫到累死,所以乾脆直接function起來批次處理!! //資料交叉查詢組合 function crossquery($where=""){ foreach($where as $key=> $val){ $wherevar.=$val; } $wherevar=!empty($wherevar) ? "where ".$wherevar."" : ''; // get TRUE //去除最後字元 $wherevar=substr($wherevar,0,-4); return $wherevar; } 這樣就吧查詢條件全部交叉組合起來了,只需要在要讀取資料表的php檔中呼叫crossquery()函式並吧$where陣列直送入 //資料交叉查詢 $wherevar['0']=!empty($setuptime) ? "`setuptime` LIKE '%$setuptime%' and " : false; //時間有值 $wherevar['1']=!empty($enfunction) ? "`enfunction` = '".$enfunction."' and " : false; //功能有值 $wherevar['2']=!empty($basid) ? "`basid` = '".$basid."' and " : false; //單位有值 $wherevar[

Xoops吧多個資料表合併顯示按照建立日期排序在一個table中的方法-教學撰寫:徐嘉裕Neil hsu

之所謂關關難過關關過,遇到問題就要爆肝解決了阿?阿不然呢!! 講這麼多也是要抱怨一下,目前遇到一個問題就是客戶有4個資料表,分別是影片/相片/新聞/檔案,四個表都是獨立的,需要做一個總表吧4個表的內容按照建立時間排序顯示,之前一直卡在join的邏輯中解不出來,後來才想到join主要是做資料表欄位關連,而不是合併顯示,上網查了一下mysql操作手冊終於讓我找到一個可以解決問題方法,真是感動阿,用UNION ALL就可以解決了阿,方法如下。 //重點說明-很重要 使用UNION ALL查詢的多個資料表的欄位名稱都要相同才能抓地到數值,例如資料表table1中的name欄位那table2也必須要相同的name欄位名稱,欄位格式也都需相同,才能抓到兩個表的相同資料。 資料表 table1  ID TITLE TIMES NAME1 1 影片標題01 2018-10-18 AAA 2 影片標題02 2018-9-18 BBBBB 資料表 table2 ID TITLE TIMES NAME2 1 相片標題01 2018-10-17 AAA 2 相片標題02 2018-9-17 BBBBB 資料表 table3 ID TITLE TIMES NAME3 1 新聞標題01 2018-10-16 AAA 2 新聞標題02 2018-9-16 BBBBB 資料表 table4 ID TITLE TIMES NAME4 1 檔案標題01 2018-10-15 AAA 2 檔案標題02 2018-9-15 BBBBB 我們只需要取得ID,

Xoops做一個單頁資料上下頁切換功能-教學撰寫:徐嘉裕Neil hsu

之前在開發Xoops模組如果有遇到上下頁切換都是使用Xoops內建函數,但是為了美觀改用bootstrap3的上下頁按鈕,這樣整個mysql查詢語法都要自己寫了,本來邏輯一直被卡在Limit查詢上解不出來,後來靈光乍現想到一個更簡單的方法來解決,分享給好朋友參考。 1、先引入neillibrary模組的function.php 2、加上以下的上下頁查詢資料表語法 //接收變數 $dbid=isset($_REQUEST['dbid'])?$_REQUEST['dbid']:""; $dbneme=" 資料表名稱 "; //上下頁面控制 //下一頁 $where=" where dbid > '".$dbid."' order by dbid ASC "; $enshow['goahead']=moduledb($dbneme,$where); //上一頁 $where=" where  dbid < '".$dbid."' order by dbid DESC "; $enshow['retreatc']=moduledb($dbneme,$where); 備註說明:dbid為頁面的欄位id數值(PRIMARY KEY),這裡用dbid如要使用這個code可以改成自己頁面的id欄位名稱 3、然後輸出到smarty樣板 <nav > <ul class="pager"> <{if $enshow.retreatc.dbid}>  //如果有上一筆數值才出現按鈕判斷 <li><a href="<{xoAppUrl /}>modules/<{$xoops_dirname}>/moviecenter.php?op=page&dbid= <{$enshow.retreatc.dbid}> "><span aria-hidden=&qu

CentOS7->SELinux設定(防火牆)-教學撰寫:徐嘉裕Neil hsu

如果剛安裝好CentOS需要檢查一下SELinux設定,如為Enforcing則除了本地端以為其他外連都無法連入主機需要修改才行,方法如下! 先用SSH連線進入主機,輸入以下查詢指令觀看目前的SELinux設定狀態! # getenforce SELinux 共有三種模式如下: Enforcing:強制模式,依據設定來限制檔案資源存取。 Permissive:寬容模式,不限制檔案資源存取,但仍會依據設定檢查並記錄相關訊息。 Disabled:停用模式,SELinux 已被停用。 預設是Enforcing,要將其修改為Disabled 找到以下檔案/etc/selinux/config  打開編輯 # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. #SELINUXTYPE=targeted  //註解掉 修改紅字那一段,改成 disabled 然後再重新啟用CentOS,這樣外部連線就能進入網站主機了!! 重啟CentOS指令:#  reboot 要檢查 SELinux 的狀態, 執行 sestatus

寫了一個Xoops防止外部位置傳參寫入網站資料表的方法-教學撰寫:徐嘉裕Neil hsu

Xoops雖然有自己的表單驗證方式,但如果是用bootstrap框架寫的表單,就沒辦法套用Xoops的表單驗證功能,必須要自己寫一個驗證,否則像是非會員權限的聯絡我們表單,如果有別人吧form的action指向到您的網站,欄位都一樣是可以吧資料post過來寫入資料表的,所以必須要驗證傳入的網址是否為網站網址,如果相符才讓資料寫入,方法如下: 1、先在模組的function.php中加上以下的判斷函數 //檢查傳入網址 //網址合併 function urlpregmatch($var=""){ $url1= str_replace ("/","",$var); //去除/ $url2= str_replace ("http:","",$url1); //去除http: $url3= str_replace (".","",$url2); //去除. $url4= preg_replace("/[&?=.#]/", '',$url3); //去除&?=.# return $url4; } //比對網址(防外部傳參) function alignmenturl(){ //本地端網址合併 $url1=urlpregmatch($var=XOOPS_URL); //傳入端網址合併 $url2=urlpregmatch($var=$_SERVER['HTTP_REFERER']); //判斷傳入網址是否為相同網站 if (!empty(preg_match("/".$url1."/i", "".$url2.""))) { return true; } } 然後再php接收變數端加上以下判斷函數 //機器人檢查 if(empty( alignmenturl() )) redirect_header(XOOPS_URL,0 , _MD_NOTWELCOME); 備註_MD_NOTW

CK編輯器使用JS取值的方法-教學撰寫:徐嘉裕Neil hsu

CK編輯器相信大家一定不陌生,是一套非常好用的所見即所得編輯器(WYSIWYG),能編排HTML格式及上傳圖檔諸多功能,這裡就不再描述,重點是如何用js取得文字編輯框中的數值?如果是用PHP的form透過post是完全沒問題的,只要取的textarea的name值即可,但如果是吧ck編輯器包在ajax裡面,那就不能用form來傳值了,必須用js來取值,例如下面的ck編輯器 <textarea id=" CKcontent " name="CKcontent" > </textarea> 如果用 var  $CKcontent= $("#CKcontent").val(); 很抱歉,這樣是完全取不到值的,因為ck編輯器本身在內部又用js建構一層html的p元素來顯示內容,被這問題卡了好久,終於找到解決方法!! 就是用 var  $CKcontent=CKEDITOR.instances. CKcontent .getData(); 這樣就能用js抓取ck編輯器中編輯框的數值了, 紅字 的部分就是textarea的id值,有需要的朋友參考看看!! 教學撰寫: 徐嘉裕 Neil hsu

js使用each迴圈讀取val值以陣列型態儲存的方法-教學撰寫:徐嘉裕Neil hsu

在開發ajax的ui介面時需要寫一個排序功能,也就是像下面這樣可以輸入數字來排列順序的表格。 由於是全ajax的ui介面,所以取得input ->  var值得方法跟php不一樣,不能用php的邏輯來思考,希望當夠按下變更排序按鈕時,吧所有的input -> var及input -> name值全部以陣列方式打包再透過ajax.php來儲存,方法如下。 //html結構 <input type='text' class=' sorteach form-control' name='1' value='' placeholder=''> <input type='text' class=' sorteach form-control' name='2' value='' placeholder=''> <input type='text' class=' sorteach form-control' name='3' value='' placeholder=''> <input type='text' class=' sorteach form-control' name='4' value='' placeholder=''> <button type='submit' id='sortbtn' class='btn btn-primary btn-lg btn-block button'>變更排序</button> 紅字的 name值 為需要儲存的資料表的欄位id值, 藍字為each 所需要的class值 所以按下變更排序至少需要取得兩個陣列,一個是name值陣列一個是value值陣列。 //JS結構 $("#sort

修改bootstrap分頁選單使用jQuery新增及刪除class方法-教學撰寫:徐嘉裕Neil hsu

如果我們要使用bootstrap分頁選單做一個自動流程控制,像是下面這樣,當AJAX建立完成影片新增後自動切換到下一個頁籤,可以使用jQuery的removeClass()跟removeClass( )來達成這樣的功能需求。 bootstrap分頁選單是用 class="active"來定義當前顯示的頁籤按鈕及內容區塊,預設定義在是第一個頁籤及區塊的class裡面, <ul class="nav nav-tabs" role="tablist" id='movievar' name="1,<{$enshow.basid}>"> <li id='limoviebtn1' role="presentation" class="active" ><a id="moviebtnfunction1" href="#moviebtn1" aria-controls="moviebtn1" role="tab" data-toggle="tab"><{$smarty.const._MD_MOVIECENTERPHP02}></a></li> <li id='limoviebtn2' role="presentation"><a id="moviebtnfunction2" href="#moviebtn2" aria-controls="moviebtn2" role="tab" data-toggle="tab"><{$smarty.const._MD_MOVIECENTERPHP03}></a></li> </ul> <!-- Tab panes --> <div class=&qu

jQuery取type='radio'值的方法-教學撰寫:徐嘉裕Neil hsu

例如向下圖這樣的單選核取type='radio'按鈕 如果要用JS來取得Radio數值然後透過 $.ajax來儲存數值,方法如下: //結構 <div class='form-group'> <label class='col-sm-4'>狀態(啟用/關閉)</label> <div class='col-sm-8'> <label class='radio-inline'> <input type='radio' id='' name=' enable ' value=' 0 '>不啟用 </label><label class='radio-inline'> <input type='radio' id='' name=' enable ' checked=checked value=' 1 '>啟用 </label> <br /><br /><br /></div> </div> 藍字 為input的name值,我們就要利用name來取得value中 紅色 的數值 //JS $("body").on("click", " 按鈕id或class值 ", function (e){ $enable=$('input[name=enable]:checked').val() // alert($enable); }) 這樣當點擊按鈕時就會取得name=enable被核取中數值,之後再吧$enable變數值透過$.ajax存進資料庫即可!! 教學撰寫: 徐嘉裕 Neil hsu