2016年7月25日 星期一

【PHP】會員層級 遞迴運用

今天有個case要做會員層級的階層圖
畫面如下:
HTML:
<ul id="org" style="display:none">
    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
        <ul>
            <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
                <ul>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                </ul>
            </li>
            <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
                <ul>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                </ul>
            </li>
            <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
                <ul>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                </ul>
            </li>
            <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美
                <ul>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                    <li><span class="icon"><img src="/images/icon_man.png" alt=""></span>林筱美</li>
                </ul>
            </li>
        </ul>
    </li>
</ul>
<link rel="stylesheet" href="/css/jquery.jOrgChart.css">
<script type="text/javascript" src="/js/jquery.jOrgChart.js"></script>
<script>
$(document).ready(function() {
    $("#org").jOrgChart({
        chartElement: '#chart'
    });
});
</script>

2016年7月13日 星期三

【PHP】json 相關 中文亂碼、解碼後為陣列

解決PHP json_encode 中文是亂碼問題
雖然編碼後中文是亂碼,decode之後又會變回正常
但如果存入資料庫要是中文就要用:
PHP 5.4 以下:
function jsonRemoveUnicodeSequences($struct) {
   return preg_replace("/\\\\u([a-f0-9]{4})/e", 
   "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode($struct));
}
PHP 5.4 以上:
json_encode($str,JSON_UNESCAPED_UNICODE);
解碼要變成陣列:
json_decode($str,true);

2016年7月6日 星期三

【PHP】header 中加入Authorization token驗證

今天再串某家商成的API,要使用Authorization token驗證,
這邊記錄一下步驟:
1.依照API手冊先取得連線的token
2.用curl方式將token加入header中
加入方式:
Code 部分:
// 取得token
$token = get_token();

$url = THIS_API_URL.$url;

// 將token加入header中
$API->http_header = array();
$API->http_header[] = 'Content-type: application/json';
$API->http_header[] = 'Authorization: basic '.$token;
 
$API->send_method = $send_method;

// 執行
$return = $API->curl_file_get_contents($url,$array);
$return = json_decode($return,true);
Class 部分:
 
class API
{
        // POST 資料
 public $send_method = 'post', // 傳送方式
        $http_header = array('Content-Type: text/plain')
        ;
 public function curl_file_get_contents($url,$request=array())
 {
  $useragent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36";
  $curl = curl_init(); // 啟動一個CURL會話
  curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址
  curl_setopt($curl, CURLOPT_REFERER, $url);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證證書來源的檢查
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從證書中檢查SSL加密算法是否存在
  curl_setopt($curl, CURLOPT_USERAGENT, $useragent); // 模擬用戶使用的瀏覽器
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉
  curl_setopt($curl, CURLOPT_ENCODING, "UTF-8"); // 編碼
  curl_setopt($curl, CURLOPT_COOKIE, "cookieLangId=zh_tw;"); // 傳送cookie
  curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設置Referer
  if ($this->send_method == 'post')
  {
   curl_setopt($curl, CURLOPT_POST, count($request)); // 發送一個常規的Post請求
   curl_setopt($curl, CURLOPT_POSTFIELDS, $request); // Post提交的數據包
  }
  curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 連線時間
  curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設置超時限制防止死循環
  curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區域內容
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回
  curl_setopt($curl, CURLOPT_HTTPHEADER, $this->http_header);
  $r = curl_exec($curl); // 執行操作
  if (curl_errno($curl)) {
     echo 'Errno'.curl_error($curl);//捕抓異常
  }
  curl_close($curl); // 關閉CURL會話
 
  return $r;
 }
}
php 要讀取 Authorization 要在 .htaccess 加上:
RewriteEngine on
RewriteRule .? - [E=Authorization:%{HTTP:Authorization}]
print_r($GLOBALS);

2016年6月22日 星期三

【Jquery】position:fixed 可左右拉動

今天遇到一件奇怪的需求,

在使用 CSS position:fixed 使區塊固定時,

當拉動左右的卷軸時這個區塊也要跟著動,

這時只能用javascript來解決:

$(window).scroll(function(){
  $(".nav").css({ // 要移動的class或div
    'left': 0 - $(this).scrollLeft()
  });
  $(".footer").css({
    'left': 0 - $(this).scrollLeft()
  });
});

2016年5月17日 星期二

【ASP】基本語法 & 查詢

工作需要不得不去碰 ASP

這邊記錄一下有用到的功能

之後遇到能快速記憶


2016年5月16日 星期一

【Excel】算欄位字數

有時匯入xls檔案欄位有字數限制

這時可以用Excel計算字數的函數:LEN 與 LENB

LEN:不分全形半形都算一個字

LENB:全形字元視為2個字,半形字元視為1個字

用法:

LENB(C2) :C2欄位的字元 (注意欄位屬性為通用格式)

2016年5月12日 星期四

【PHP】AES 128 編碼

API需要用到AES 128 編碼 + base64編碼,特別記下來。

// 編碼
function encrypt($str, $key){
 $str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$str,MCRYPT_MODE_ECB);
 $str = base64_encode($str);
 return $str;
}

// 解碼
function decrypt($str, $key){
 $str = base64_decode($str);
 $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,$str,MCRYPT_MODE_ECB);
 return $str;
}

2016年5月10日 星期二

【MSSQL】DECLARE 宣告

DECLARE @k nvarchar(255)
SET @k = 'ABC'
SELECT *  FROM table WHERE name LIKE '%'+@k+'%'

2016年5月6日 星期五

【PHP】無法 load mcrype

OS : Windows 2003
Apache 2.2.27
PHP 5.2.16

於php.ini 裡,將 ;extension=php_mcrypt.dll uncomment,並重新啟動 apache 後,發現 load mcrypt 出現問題,且該模組也沒有成功的 load。

後來發現原因為 PHP Server 找不到 php_mcrypt.dll 相依的 libmcrypt.dll檔案,即使 path 內有設定相關路徑,也是有錯誤。

解決方法:
將 php 裡的 libmcrypt.dll copy 到 C:\WINDOWS\ 下,然後重新啟動 apache,即可成功載入模組。
都不成功可將 php_mcrypt.dll 及 libmcrypt.dll 放到WINDOWS和SYSTEM32目錄下試試看