2016年11月23日 星期三

【Jquery】抽獎轉盤、輪盤

這次要做轉盤抽獎,像是這樣:
於是我在網路上找範例,找到了這個網站:
http://www.js-css.cn/a/jscode/award/2015/0211/1452.html
備份檔案:檔案下載

範例是純js製作,因為要發送折價券給會員及安全性考量,
所以需要改成 ajax 與 php 配合,
原理很簡單就是每格給予一個號碼,再用號碼算出要轉的角度,
再利用awardRotate.js指定要停在哪一格,

例如:
指定好每格號碼後,算出每格角度,
用php的 rand(0,6) 隨機找出一個數字,
每格角度:360 / 7
再用這個數字算出角度,
如今天抽到數字 2 公式:
(360 / 7 ) * 2 + (+-20)


因為不想每次都停在正中間,
所以我再給他加一個正負值 360 / 7 大約等於 51 一半是25,
所以我抓+-20
簡易程式說明JS:
PHP:

2016年11月22日 星期二

【HTML】網頁訊息用手機分享訊息 LINE 、 簡訊sms 、 Email

網頁要用手機分享LINE訊息、簡訊與Email

LINE:
<a href="http://line.naver.jp/R/msg/text/?分享內容">分享到Line</a>
※ 斷行要用:%0D%0A

簡訊:
<a href="sms:號碼(可留空)?body=簡訊內容">簡訊分享</a>
※ 簡訊分享在IOS不同版本要用不語法:
iOS < 7 <a href="sms:0412345678;body=text">send sms</a>
iOS > 7 <a href="sms:0412345678&body=text">send sms</a>
可以用 navigator.userAgent.match(/iPhone/i) 找出目前的系統再去換連結
※ 斷行要用:%0a

Email:
<a href="mailto:寄給誰(可留空)?subject=信件標題&body=信件內容">Email</a>
※ 斷行要用:%0D%0A

2016年11月17日 星期四

【PHP】rand 配合資料庫隨機不重複

如果有一批折價券,折價券編號為 2130001 ~ 2130500,
要隨機挑出一張發給使用者,發過的下次就不能再發,
作法:
1.先抓總數量還有多少張可以發 (要扣掉已發過的)
2.用 rand(1,500) 抓出一個數字
3.如找到321,去資料庫找第321筆是哪個折價券編號
4.因為發出一張,下次就會變成 rand(1,499)

2016年11月16日 星期三

【PHP】字串只取數字

今天一串字串要只取中的數字,
原理:用正規表示法做取代,取代除了數字以外的都取代成空白
Example:
$str = "單價:750"; // 只要取750
preg_replace('/[^\d]/','',$str);

【Jquery】twzipcode 臺灣 3 碼郵遞區

twzipcode 快速建立郵遞區號及縣市,
以前都是自己做,把對應縣市及郵遞區號放在資料庫裡,
之後每次都要到資料抓,用了twzipcode真的快多了,
簡易用法:

2016年11月15日 星期二

【PHP】單數&複數 位元運算子

今天在查資料時突然看到單複數的範例,
一般網站都是直接%2看有沒有餘數,
但他是用位元運算子 (Bitwise Operators),
挖這是讀書時才聽過的東西,這邊記錄一下,
網站真的比較少用:
function odd($var)
{
    return($var & 1);
}

function even($var)
{
    return(!($var & 1));
}

2016年11月14日 星期一

【PHP】把 table 的寬變成空白,preg_replace取代某部分

本來覺得很簡單的問題,結果試了好久,這邊紀錄一下,
今天有一段字串,
例如:<table class="mytable" width="200" height="300">
目的把是把 width="" 變成:
<table class="mytable" width="" height="300">
作法:

【PHP、MySQL】SQL搜尋分段LOG

今天要抓出半年內每個商品被點擊次數,在存入 PROD_CLICK
因為 LOG 量太大,所以每個月都會產生新的表單來儲存
類似:PROD_LOG_1606 ~ PROD_LOG_1612
所以要搜尋半年就會有6個資料表
步驟:
1.依目前日期及指定幾個月算出有幾個資料表
方法很多,可以直接用月份去減,但為了比較活我這邊是用天數去減,
$prod_click_day = $SS->getData('prod_click_day'); // 抓出設定天數
$day = strtotime("-$prod_click_day day"); // 用時間戳記來算差別的日期
$difMonth = date("m",time() - $day); // 算出與面前相差的月份

2016年11月9日 星期三

【PHP】PChome 廣告刊登-免費刊登廣告,製作匯入ZIP檔

這次要將公司商品放在PChome免費廣告中,
在廣告刊登中有一項多筆匯入的功能,
我要寫程式匯出商品後直接匯入PChome,
有點麻煩所以做成筆記,
匯入的限制:要上傳ZIP並裡面附圖片且圖要超過400*400,每張圖不能超過200K。


製作步驟
1.首先第一步當然是將公司上架商品從資料庫撈出來
因為有檔案大小限制10MB,所以要做分頁上傳,一張圖片抓100kb,
一次只能上傳100筆,結果5000多品就要上傳50幾次..

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目錄下試試看

2016年4月26日 星期二

「努力工作」是最該被丟棄的職場建議

別期望用「苦勞」贏取別人的肯定,通常的結果都是讓人失望的。新聞網站Business Insider的專欄作家法諾許.布洛克(Farnoosh Brock)列出了必須破除的超時工作3大迷思。

◎「努力工作」是最該被丟棄的職場建議:真正有升遷機會的人,不會整天埋首於工作,他們會把時間拿來塑造「公司不能沒有他」的形象。他們會跳脫自己的日常工作範圍,了解公司的整體運作、觀察關鍵人士並學習、找到志同道合的夥伴建立關係、擴大自己的影響力。

◎超時工作並不會得到老闆的肯定:老闆只會對你更加不放心,擔心你是否無法承擔現在的工作責任,未來就更不可能將更重大的工作責任交到你手上。

◎超時工作只會讓你失去升遷機會:不要被工作牽著鼻子走,如果你無法從容應付現在的工作,就很難說服老闆,把升遷機會留給你。當然,總會有緊急時刻,必須加班趕在期限內完成工作,但不該變成常態。