LENDIEN聯電 冷暖 清淨 除溼 移動式空調 9000BTU任天堂-Switch-NS-公司貨主機-豪華全配組LG樂金 WIFI遠控雙眼小精靈掃地清潔機器人變頻版

2011年4月28日 星期四

廁所小常識

所謂廁所小常識,不是上廁所的常識喔!是把一些哩哩扣扣的常識貼在廁所裡,上廁所無聊的時候看一下可以排解無聊。不知道這是誰想到的,公司竟然有這種東西。貼一張小紙條在每間廁所,還定期更換,最近這一次換提供笑話,很老梗但是滿好笑,給大家笑笑。


羽球拍

我朋友告訴我一件發生在他家的笑話
她讀國小的弟弟隔天有羽球課,所以她媽就幫他弟把羽球拍放在袋子裡,
結果他上體育課拿出來時才發現媽媽幫他帶的是電蚊拍
哈哈~~他說超丟臉的全班都快笑死了

 ----------------------
專業顧門口

一個專業財務顧問拿到新印名片, 氣急敗壞的打電話到廠商抗議:「你們把我的名片印成專業顧門,少了一個口,請更正!」。隔了數日,收到更正的名片,上面職務頭銜印著專業顧門口



講到羽球拍,讓我想到之前一次運動會打羽球,不知道跟哪位仁兄借了一把拍拍來用,比賽正驚險刺激,對方送上一顆高飛球,我看他們站位不佳,準備要給他們一個強勁殺球,球來了,我正中紅心用力的給他殺下去,那球快的看不到影子,對手站在網子的那邊傻愣愣,只是這個時候我也傻愣愣,因為球就這樣給他隱形了,然後我舉起拍子,恩……我捕獲一枚羽球,它就卡在我的羽球拍上,還把網子刺破一個洞。。。。。。重點是這害我丟一分

2011年4月21日 星期四

mysql取前後各n筆資料

這問題常常會遇到,因為大家都喜歡在網頁上加上「上一筆」、「下一筆」的按鈕
簡單的做法是把連結加個標記,告訴下一個網頁現在是哪一筆,你要抓上一筆還是下一筆,這樣單頁就可以只執行一次query,可是在大家注重SEO的時代,這個做法可以說不太聰明。
於是乎,程式人員只好在一頁裡多下幾次query把上一筆跟下一筆都先抓出來,不過程式人員的特性就是懶!想到要一直下query就不開心,所以呢,網路上就出現了很多類似的討論主題,不過最快速的方式也就是下。兩。次。。。是的,還是不能一次搞定。

簡單的說明下兩次的做法:
假設要找編號228的前後一筆資料,而且編號欄位的值在資料庫裡可能會有跳號狀況,因此絕對不能用+1,-1的做法處理,所以要分別下
SELECT * FROM 資料表 WHERE 編號>=228 ORDER BY 編號 LIMIT 2
SELECT * FROM 資料表 WHERE 編號<228 ORDER BY 編號 DESC LIMIT 1

可是呢,這個是單純的狀況
如果要從a,b兩個資料表抓資料出來編號228前後一筆資料,而且裡面一個類別的欄位值要跟編號228的一樣,但是下sql語法之前還不知道編號228的類別是什麼,如果一樣下
SELECT 編號,a.類別,b.類別名稱 FROM a,b WHERE 編號>=228 AND a.類別=b.類別ORDER BY 編號 LIMIT 2
SELECT 編號,a.類別,b.類別名稱 FROM a,b WHERE 編號<228 AND a.類別=b.類別 ORDER BY 編號 DESC LIMIT 1
就會發現抓出來的資料會擁有不同的類別值……

為了要先得到編號228的類別,就要先下一次
SELECT 編號,類別  FROM a WHERE 編號=228

當然,其實不一定要把這句獨立,可以把他併到上面那個例子裡當一個subquery,就也是2次搞定,不過有可能會得到一句落落長的sql語法,光看就頭昏眼花……
知道228的類別後,再來抓他同類的前後一筆,可是這個時候再下2次就很笨了,因為如果一開始就決定要下3次 ,還上網找答案做什麼呢?
於是我用了UNION
(SELECT '前' as tmp,編號 FROM a WHERE 編號>228 AND 類別=x ORDER BY 編號 LIMIT 1)

UNION
(SELECT '後' as tmp,編號 FROM a WHERE 編號<228 AND 類別=x ORDER BY 編號 DESC LIMIT 1)
tmp欄位只是標一下前後各是哪一筆,萬一228的前後剛好有一邊沒資料,就會比較好判斷

說穿了還是subquery的概念,只是因為前後一筆我們只需要知道部份資料,如果跟228一起搜出來,mysql回傳回來的一大堆資料其實都用不到,這樣就浪費了server資源
而用UNION把兩邊的資料一起抓出來,也會比分2次進資料庫抓資料來的省時間

目前看來好像就只有這幾種方式比較省力了,為什麼他們不出一個nearby的函數,專門用來處理這種狀況呢...............................

2011年4月19日 星期二

姓名電話身分證號跟email產生器

因為嗶--(自動消音),找了幾個好用的產生器
雖然已經退出江湖好多……天,這種西還是常備在身邊的好
俗話說小心駛得萬年船,就分享給大家用用(啥鬼?)
各有優缺,不過都算好用,是嗶--(又消音)必備好物

Email產生器
10minutemail
fakeinbox
Mailinator
Guerrillamail

姓名身分證字號產生器

電話號碼產生器



((((((((((((((((這也算一則KM?!

2011年4月15日 星期五

用php mail函數寄有附件的email

簡單的講起來,就是寄送一個信件內容很長的mail,長的原因不奇怪,就是把要夾的檔讀出來塞在mailbody裡,分解動作開始。

1.subject設法照舊,跳過。

2.取一個獨一無二的boundary(其實我也不懂為什麼要多獨一無二):
$boundary = "==".md5(time())
其中前面的兩個等於「==」是因為信件中固定要用到的,所以先組上去。

3.設定header,告訴大家我有附件:
$header="Content-Type: multipart/mixed; boundary=\"{$boundary}\"\r\nFrom: =?utf-8?B?".base64_encode("寄件人姓名")."?= ";

4.開始組mailbody:
$message = "This is a multi-part message in MIME format.\n\n" ."--{$boundary}\n" . "Content-Type: text/html; charset=\"utf-8\"\n" . "Content-Transfer-Encoding: 8bit\n\n" . $html_mail_body . "\n\n";
$message .= "--{$boundary}\n";

5.先幫每個附件設定好檔名、mime type、收到時看到的附件檔名
$files[]=array("12345.xls","application/vnd.ms-excel","商品們.xls");
$files[]=array("67890.xls","application/vnd.ms-excel","訂購單.xls");

6.開始把附件組進mailbody裡:
for($x=0;$x < count($files);$x++){
    $file = fopen($files[$x][0],"r");
    //把要夾的檔案讀出來
    $data = fread($file,filesize($files[$x][0]));
    fclose($file);
    //編碼後以固定長度斷行
    $data = chunk_split(base64_encode($data));
    $message .= "Content-Type: \"".$files[$x][1]."\";\r\n" . " name=\"=?utf-8?B?".base64_encode($files[$x][2])."?=\"\r\n" .
    "Content-Disposition: attachment;". " filename=\"=?utf-8?B?".base64_encode($files[$x][2])."?=\"\r\n" .
    "Content-Transfer-Encoding: base64\r\n\r\n" . $data . "\r\n\r\n";
     //↑告知檔案資訊後把檔案加進去
     //一個附件夾完塞一個boundary當尾巴切斷
    $message .= "--{$boundary}\n";   
}
加粗的base64_encode是要說,如果要在信件中顯示中文檔名,最好就是用這種方式,不然會發現你設的檔名跟在outlook裡看的檔名總是不一樣,這問題讓我困擾了好一會,後來是抓outlook裡的原始檔出來看才發現=..=

7.然後就可以開心的寄出去了:
mail("reciver@you.net.tw",$subject,$message,$header)

2011年4月13日 星期三

apache轉址:RedirectMatch跟RewriteRule

前幾天找了一下apache轉址的方法,一開始找到RedirectMatch
使用方式很簡單,改httpd.conf,把要改的那個VirtualHost tag裡加上RedirectMatch 規則 目的就好了
像是固定要把/12345/abcde轉到/my.php?i=12345&n=abcde
設定裡就要下RedirectMatch ^/(\d{5})/([a-z]{5,10}) /my.php?i=$1&n=$2
規則可以用標準表示式設定,小括是重點,影嚮到後面$1,$2的使用,前面有括後面才能用$n的方式叫回來

改好後重新啟動apache服務就行了,很順利的一次搞定。

可是後來發現用這種方式導過去後,頁面上方的網址會是my.php?i=xxooxxoo這樣,不美麗
後來又找到RewriteRule,使用上跟RedirectMatch很相似,但是用法更靈活,只要把上面的RedirectMatch改成RewriteRule,然後在這一行的上面加一條Rewriteengine on,一樣重啟apache後基本上就可以了
用這種方式導到正確頁面後,網址不會被改掉,相當完美相當滿意

但是!!Rewrite要注意的是,因為網址不會被改掉,所以有時候會發生頁面上有些圖片、css、javascript、超連結等呼喚其他檔案的地方都中邪貌失效了,原因就是本來程式裡用相對路徑的寫法這時候會找不到啊!所以如果一開始沒用絕對路徑,這時候改起來就會很痛苦

雖然很開心的找到我要的rewriterule,不過我終究因為上面說的「改起來很痛苦」而改回redirectmatch……對於rewriterule的語法就沒有再深入去研究了,有興趣的人可以看看rewriterule的介紹