[資料庫] 如何轉換 Mysql varchar type 到 int type

先來說明為什麼有時候需要用到轉換 varchar 到 int 型態,就是因為 order by 的問題,幫學校修改 Mysql 錯誤排序,前人設計全部都用 varchar 型態去存資料,當然包含了學生入學年度,以前不會遇到這問題,但是到了民國100年,就會發生排序錯誤,底下來講個例子,這樣大家就可以瞭解了。 建立 test 資料表,並且先增兩個欄位分別是 a(varchar) 跟 b(int),個別輸入 100, 90 兩列資料

mysql> select * from test;
+------+------+
| a    | b    |
+------+------+
| 100  |  100 |
| 90   |   90 |
+------+------+
先針對 varchar 排序 order by a DESC
mysql> select * from test order by a desc;
+------+------+
| a    | b    |
+------+------+
| 90   |   90 |
| 100  |  100 |
+------+------+
再來針對 int 排序 order by b DESC
mysql> select * from test order by b desc;
+------+------+
| a    | b    |
+------+------+
| 100  |  100 |
| 90   |   90 |
+------+------+
[Read More]

[C/C++] 判斷檔案是否存在 file_exists

在 PHP 函式裡面,有直接 file_exists 可以使用,相當方便: 1 2 3 4 5 <?php if(file_exists("files/appleboy.c")) { echo "File found!"; } ?> 在 C 裡面該如何實做?有兩種方式如下: 1. 直接開檔 1 2 3 4 5 6 7 8 9 bool file_exists(const char * filename) { if (FILE * file = fopen(filename, "r")) { fclose(file); return true; } return false; } C++ 寫法 1 2 3 4 5 6 7 8 std::fstream foo; foo.open("bar"); if(foo.is_open() == true) std::cout << "Exist"; else std::cout << "Doesn't Exist"; 2. [Read More]

[新聞] PHP Framework Codeigniter 1.7.3 釋出 Release

CodeIgniter
剛出爐的新聞:

CodeIgniter 1.7.3 Released,1.7.3 版本的出來,最主要是修正了 Upload class 的安全性,在上一次公告就有 Upload Class Patch,只是 1.7.3 就把它納入進來,還有修正在某些情況下可能出現所有檔案,除此之外沒有其他重大修正了,看起來是為了過不久的 2.0 所準備,目前團隊都朝 2.0 發展了。 原文:

Version 1.7.3 is a security maintenance release, including a previously patched file Upload class, and a new security fix to prevent possible directory traversal in certain circumstances (back ported from a fix made to CodeIgniter 2.0 at BitBucket). There are no other significant changes. 搶先版: 下載 Codeigniter 1.7.3

[Linux] VirtualBox + Ubuntu 10.10 編譯嵌入式系統

vbox_logo2_gradient (by appleboy46)
最近使用

Ubuntu 來編譯嵌入式的環境,由於個人比較不喜歡 Fedora 的系統,所以自己用了 VirtualBox 來搭配 10.10 的 Ubuntu 系統,在這裡提醒一下,請安裝最新版的 VirtualBox 3.2.12 for Windows hosts,否則在安裝 Ubuntu 之後,繼續安裝 Guest Addition 的時候會當機喔,重開機之後可以看到桌面多出一個光碟,是要您繼續安裝 Additions VirtualBox + Ubuntu 切換到該光碟目錄

cd /media/VBOXADDITIONS_3.2.12_68302/
直接執行
sh VBoxLinuxAdditions-x86.run
重新開機就完成了,可以直接切換視窗大小...等,編譯 gcc 必須要一些 Cross tool,利用 apt-get 方式安裝:
apt-get install build-essential
安裝額外 USB 裝置: 視窗上面 Devices -> USB Devices 選擇你要的外接硬碟,會跳出 Windows 安裝額外 Driver

VirtualBox + Ubuntu 10.10 直接按 Continue Anyway VirtualBox + Ubuntu 10.10 完成 VirtualBox + Ubuntu 10.10 補上 Ubuntu 畫面 VirtualBox + Ubuntu 10.10

[Git] 版本控制: 如何使用標籤(Tag)

Git Tag 功能就如同 Cvs Tag 是一樣的,您可以在專案裡面隨意新增 Tag,方便您紀錄訊息,底下一些基本的操作來學習如何使用標籤(Tag)功能(新增標籤、以及各種不同類型標籤之間的差別)。

列出既有標籤

直接使用 git tag 即可

1
2
3
$ git tag -l
v0.1
v1.3

如果整個專案過多 Tag 也可以透過底下方式搜尋出來

1
2
3
4
5
$ git tag -l 'v1.4.2.*'
v1.4.2.1
v1.4.2.2
v1.4.2.3
v1.4.2.4
[Read More]

CodeIgniter 2.0 發展狀況(現在更棒了) 不再支援 PHP4

CodeIgniter 在官網正式公告了一篇 2.0 目前的狀況及改善 CodeIgniter 2.0 - Now with more Awesome,該篇重點莫過於 CI 2.0 將不再支援 PHP 4.0 版本了,這是一項重大改變,官方給目前版本取了一個名稱:CodeIgniterNoPhp4,看到這名字大概就可以知道官方要捨棄 PHP4 了。 自從 CodeIgniter 將所有程式碼搬到 Bitbucket 上面時,就已經宣稱不再 support PHP4,運行了好幾個月,現在以 PHP 5.1.6 來當作開發重點,底下是官方說明 CI 2.0 該注意的地方(其實還有很多地方要注意): 1. 所有類別將以 CI_ 當作前置符號 2. 因為不支援 PHP4 了,所以建構子一律改成 __construct 3. CI_Base 已經被移除,取而代之的是 CI_Controller 4. 之前有提供 Compatibility 輔助函數,目前已經支援 PHP5 了,故將此移除 開始支援 Email and Validation chaining,看一下範例: $this->email->from('your@example.com', 'Your Name') ->to('someone@example.com') ->cc('another@another-example.com') ->bcc('them@their-example.com') ->subject('Email Test') ->message('Testing the email class.') ->send(); 最後官方作者有提到一些事情:ExpressionEngine and CodeIgniter 將不再支援 PHP4,PHP4 從2000年出來,到 2007 年結束,重點來了,官方說 PHP 4 帶給您的困擾,就如同現在 Internet Explorer 6。 可以參考: What’s New in CodeIgniter 2. [Read More]

Upgrading to CodeIgniter 2.0 (升級 CI 到 2.0 版本)

2011.02.09 Update: 由於官方推出 2.0.0 的升級方式,請參考升級版本 1.7.3 到 2.0.0

CodeIgniter
在國外文章看到

Phil Sturgeon 已在今年三月發佈了一篇如何將目前 CodeIgniter 版本升級到 2.0 開發版本,轉移的經驗會在底下做介紹,PyroCMS 是該作者產品之一,也升級到 2.0 了,大家可以參考看看。

[Read More]

利用 jQuery 動態改變網站 CSS

繼前一篇所寫的『jQuery 偵測瀏覽器版本, 作業系統(OS detection)』,當我們遇到手機上網使用者,可以透過 javascript 來判斷目前使用者瀏覽器以及 OS,iPad user agent 如下: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10 我們必須分析上面字串來判斷是否用手機上網,手機網頁跟PC網頁大小一定有所不同,透過底下兩個方法來改變瀏覽器的畫面 自動導向手機網頁 動態改變 CSS 兩個方法都不錯,如果決定使用前者,建議在 Server side 那邊做判斷,底下先列出 javascript, PHP, .htaccess 判斷檢查 The JavaScript var isiPad = navigator.userAgent.match(/iPad/i) != null; The PHP $isiPad = (bool) strpos($_SERVER['HTTP_USER_AGENT'],'iPad'); The .htaccess RewriteCond %{HTTP_USER_AGENT} ^.*iPad.*$ RewriteRule ^(.*)$ http://ipad.yourdomain.com [R=301] 如果您在前端做判斷,那就使用 jQuery 方式: if(jQuery){ jQuery("body").addClass("jq"); } CSS 檔案: . [Read More]

jQuery 偵測瀏覽器版本, 作業系統(OS detection)

update: 簡易版的偵測 iphone/ipod time: 23:32 jQuery 真是一個相當方便的 javascript framework,最近在弄嵌入式系統時候需要去偵測瀏覽器 user agent,就類似下此訊息 “Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)",原本打算直接用 C 語言內建的 getenv(“HTTP_USER_AGENT”) 來做掉,不過後來想想,直接在 UI 那邊,利用 jQuery 來偵測瀏覽器版本、系統OS,這樣就解決了,上網找到有人寫了 jQuery browser and OS detection plugin,利用底下語法就可以知道一些 user agent 裡面的資料


    

[Read More]

CodeIgniter 2.0 的發展以及特性改變

在今年3月11日 EllisLab 發布了一則新訊息,信件內容大致上提到,他們將會改變程式的版本控制軟體,由原本的 Subversion 轉換到 Mercurial,CodeIgniter 也選擇了網路知名版本控制 BitBucket 網站來存放 CI 的程式碼,CI 團隊目前致力於 CodeIgniter 2.0 作開發,如果要取得程式碼,可以透過這裡,利用底下指令來取得: hg clone http://bitbucket.org/ellislab/codeigniter 這次我們來看看 CodeIgniter 2.0 跟 1.7.2 的版本差異性,雖然說這些不是官方公告的,可是也是改變蠻多的,也許有哪些沒有列到的,之後再慢慢補: 1. PHP4 正式掰掰 我想使用 CI 最方便的地方,就是支援 PHP5 & PHP4,方便使用者轉換網站到 CI 上面,現在 CI 2.0 之後將完全不支援 PHP4,一些舊有的函式會在 2.1 之後也不支援 PHP4 了,我想這樣整個 CI 的架構會縮小許多,PHP4 也太多漏洞了,這樣跟 Kohana PHP Framwork(原本從 CI branch 出來的) 一樣只會支援 PHP5 了,效能應該可以增加不少 2. Scaffolding 正式移除 Scaffolding 對於沒有後台管理的網站,臨時可以修改新增或者是刪除資料庫,不過相當危險,所以 CI 正式移除它,可以看一下中文文件。 3. 重新命名核心資料夾 將 system/codeigniter/ 名稱變成 system/core/,核心程式 Router, Loader, Output 等,都可以用 application/core 之中去替換(參考) 4. [Read More]