ctrl + shift + L 顯示按鍵輔助
alt + ↑ 上移
alt + ↓ 下移
-- 可以快速的移動一行或一個段落
alt + → 縮排
alt + ← 凸排
ctrl + / 單行註解
ctrl + D 單行刪除
shift + ctrl + F 文件格式化
-- 可以快速的整個文件縮排(phpEclipse)
ctrl + L 移至指定行
ctrl + shift + enter 在現行上加一行
shift + enter 在現行下加一行
ctrl + shift + X 換成大寫
ctrl + shift + Y 換成小寫
ctrl + shift + S 全部儲存
ctrl + alt + ↑ 向上複製選取行
ctrl + alt + ↓ 向下複製選取行
-- 可以快速的複製一行或一個段落
alt + / 內容輔助
ctrl + alt + / 單字完成
-- 與『內容輔助』一樣是可以補齊單字的功能,不過這些單字必須是已經在文件中出現的才行
ctrl + K 快速搜尋下一個
ctrl + shift + K 快速搜尋上一個
紅色的是我覺得蠻好用的快捷鍵,其他的在喜好設定裡有更多的清單
(喜好設定 → 一般 → 按鍵)
或者是快捷鍵(ctrl + shift + L)
2007-12-19
2007-11-26
利用 Trigger 做出 CHECK()
最近才發現 MySQL5 並沒有支援 CHECK 指令,但為了部分欄位的定義域檢查只好使用 Trigger 來代替了,改寫了之前用 CHECK 寫的規則。
範例:
參考文件:
MySQL 5.0-触发器
MySQL 5.1参考手册 :: 21. 触发程序
CREATE TRIGGER `觸發器名稱` -- 命名原則與資料表一樣
{ BEFORE | AFTER } -- 設置事件發生為前或後
{ INSERT | UPDATE | DELETE } -- 設定觸發的事件
ON `資料表名稱` -- 設定引起觸發的資料表
FOR EACH ROW -- 針對行為觸發單位
{觸發的SQL指令} -- 這裡可以是任何合法的指令與複合句(BEGIN/END)
範例:
DELIMITER $$ -- 變更結束符號為 $$
CREATE TABLE t25(
s1 INT,
s2 CHAR(5),
PRIMARY KEY (s1)
)ENGINE = INNODB $$
CREATE TRIGGER t25_bi BEFORE INSERT ON t25
FOR EACH ROW
IF LEFT(NEW.s2,1)<>'A' THEN
SET NEW.s1=0;
END IF;
$$
CREATE TRIGGER t25_bu BEFORE UPDATE ON t25
FOR EACH ROW
IF LEFT(NEW.s2,1)<>'A' THEN
SET NEW.s1=0;
END IF;
$$
DELIMITER ; -- 將結束符號改回 ;
參考文件:
MySQL 5.0-触发器
MySQL 5.1参考手册 :: 21. 触发程序
2007-11-19
初次使用 mootools.js
最近為了網頁的動態效果,從 prototype.js 改使用 mootools.js 做開發依據,雖然 mootools.js 很好用,也比 prototype.js 更簡化了許多,但也應為更簡化讓我有點不太能上手。
為了避免相容性的問題,使用其中很多的函數作媒介,雖然是個很好用的 Framework ,但效率確不如 prototype.js 快,當然不可能要馬兒跑得快,又要馬兒不吃草,mootools.js 在背後為了處理相容性的問題用掉不少時間,也簡化開發時架構的複雜度。
由於對 mootools.js 還不是熟,可能需要花點時間去瞭解,但還是一句老話:
要知道積木有那些,才能蓋出偉大的城堡
為了避免相容性的問題,使用其中很多的函數作媒介,雖然是個很好用的 Framework ,但效率確不如 prototype.js 快,當然不可能要馬兒跑得快,又要馬兒不吃草,mootools.js 在背後為了處理相容性的問題用掉不少時間,也簡化開發時架構的複雜度。
由於對 mootools.js 還不是熟,可能需要花點時間去瞭解,但還是一句老話:
要知道積木有那些,才能蓋出偉大的城堡
2007-11-16
用 mount 設置虛擬目錄
今天團隊在開發上出現了一個問題,在設計 Smarty 樣版時必須用到 CSS 的載入檔,造成在預覽上有很不方便的問題,為了這個問題必須在 ftp server 與 web server 上都開虛擬目錄,然後在網路上找到一個方便的指令:
mount --bind olddir newdir
olddiv :主要的連結目錄的路徑
newdir :目的地的連結目錄的路徑
這兩個目錄必須事先建立好,建議使用絕對路徑去下這個指令。
EX:mount --bind /home/test /home/test2/test3
利用掛載的方式做出虛擬目錄,就像一個捷徑將兩個目錄連在一起,這是系統上的支援,而且在 ftp server 與 web server 上都能正常操作。
mount --bind olddir newdir
olddiv :主要的連結目錄的路徑
newdir :目的地的連結目錄的路徑
這兩個目錄必須事先建立好,建議使用絕對路徑去下這個指令。
EX:mount --bind /home/test /home/test2/test3
利用掛載的方式做出虛擬目錄,就像一個捷徑將兩個目錄連在一起,這是系統上的支援,而且在 ftp server 與 web server 上都能正常操作。
2007-11-09
MySQL UNIQUE KEY 複合鍵
由於網路上說明這個語法的中文文章不多,所以想記錄一下
語法:
UNIQUE KEY `test` (`xref_key`,`xref_dbname`)
UNIQUE KEY `xref_key` (`xref_key`,`xref_dbname`)
這個語法會檢查 xref_key 與 xref_dbname 的組合是否為唯一值,當然不只有是兩個欄位的組合,你也可以設定一或多個欄位,test 是索引表的欄位名稱。
適合用來解決欄位相依時,必須滿足唯一性的處理,在時常新增或刪除的資料表中 AUTO_INCREMENT 的 PRIMARY KEY 會造成大量的斷層,這類容易變動的資料表使用 AUTO_INCREMENT 並不是一個很適合的索引值,所以可以採用 UNIQUE KEY 來處理這樣的問題。
參考文章:藍色小舖-請問關於UNIQUE敘述的疑問
語法:
UNIQUE KEY `test` (`xref_key`,`xref_dbname`)
UNIQUE KEY `xref_key` (`xref_key`,`xref_dbname`)
這個語法會檢查 xref_key 與 xref_dbname 的組合是否為唯一值,當然不只有是兩個欄位的組合,你也可以設定一或多個欄位,test 是索引表的欄位名稱。
適合用來解決欄位相依時,必須滿足唯一性的處理,在時常新增或刪除的資料表中 AUTO_INCREMENT 的 PRIMARY KEY 會造成大量的斷層,這類容易變動的資料表使用 AUTO_INCREMENT 並不是一個很適合的索引值,所以可以採用 UNIQUE KEY 來處理這樣的問題。
參考文章:藍色小舖-請問關於UNIQUE敘述的疑問
2007-11-07
[PHP] 驗證碼
最近在實做文章回復所需要的功能,這是一個既簡單又好用的認證碼,但是他有個缺點,就是單一用戶同時只能存取一次驗證碼,簡單的說就是一次只能寫一篇回應,當然還是可以用其他方式去加強這個缺點。
輸出結果:
參考文章:php確認碼圖片
<?php
header("Content-type:image/png");
header("Content-Disposition:filename=image_code.png");
//定義 header 的文件格式為 png,第二個定義其實沒什麼用
// 開啟 session
if (!isset($_SESSION)) { session_start(); }
// 設定亂數種子
mt_srand((double)microtime()*1000000);
// 驗證碼變數
$verification__session = '';
// 定義顯示在圖片上的文字,可以再加上大寫字母
$str = 'abcdefghijkmnpqrstuvwxyz1234567890';
$l = strlen($str); //取得字串長度
//隨機取出 6 個字
for($i=0; $i<6; $i++){
$num=rand(0,$l-1);
$verification__session.= $str[$num];
}
// 將驗證碼記錄在 session 中
$_SESSION["verification__session"] = $verification__session;
// 圖片的寬度與高度
$imageWidth = 160; $imageHeight = 50;
// 建立圖片物件
$im = @imagecreatetruecolor($imageWidth, $imageHeight)
or die("無法建立圖片!");
//主要色彩設定
// 圖片底色
$bgColor = imagecolorallocate($im, 255,239,239);
// 文字顏色
$Color = imagecolorallocate($im, 255,0,0);
// 干擾線條顏色
$gray1 = imagecolorallocate($im, 200,200,200);
// 干擾像素顏色
$gray2 = imagecolorallocate($im, 200,200,200);
//設定圖片底色
imagefill($im,0,0,$bgColor);
//底色干擾線條
for($i=0; $i<10; $i++){
imageline($im,rand(0,$imageWidth),rand(0,$imageHeight),
rand($imageHeight,$imageWidth),rand(0,$imageHeight),$gray1);
}
//利用true type字型來產生圖片
imagettftext($im, 20, 0, 25, 35, $Color,
"/var/lib/defoma/fontconfig.d/D/DejaVu-Serif-Bold.ttf",
$verification__session);
/*
imagettftext (int im, int size, int angle,
int x, int y, int col,
string fontfile, string text)
im 圖片物件
size 文字大小
angle 0度將會由左到右讀取文字,而更高的值表示逆時鐘旋轉
x y 文字起始座標
col 顏色物件
fontfile 字形路徑,為主機實體目錄的絕對路徑,
可自行設定想要的字型
text 寫入的文字字串
*/
// 干擾像素
for($i=0;$i<90;$i++){
imagesetpixel($im, rand()%$imageWidth ,
rand()%$imageHeight , $gray2);
}
imagepng($im);
imagedestroy($im);
輸出結果:
參考文章:php確認碼圖片
2007-11-06
MySQL 遠端連線
MySQL 預設是不允許遠端連線的
要在 my.ini 或 my.cnf 中將他開啟
找到下面兩行將他註解掉
當然使用者也必須設定為可以遠端的權限
skip-networking
bind-address=127.0.0.1
要在 my.ini 或 my.cnf 中將他開啟
找到下面兩行將他註解掉
當然使用者也必須設定為可以遠端的權限
skip-networking
bind-address=127.0.0.1
2007-11-01
MySQL5 Procedure For PHP5
今天在編寫 MySQL5 的預存程序,稍微研究了一下,功能蠻強大的,可以讓我用來將複雜的查詢指令包裝起來,就像寫函式一樣的好用。
範例:
執行方法 CALL getData(12,'jax');
由於 phpMyAdmin 沒有支援的工具,也不能匯入,所以只好使用指令模式匯入了,將上面的指令寫到 procedure.sql 文件中,就像寫資料庫建立文件是一樣的,再利用下面的方法將建立指令匯入。
mysql -u username -p < procedure.sql
PS:由於用這個方法匯入時,錯誤訊息的行數會以上一個結束符號為起點,所以在檢查時要看仔細一點,建議先確認程序內容是否正確,在建立預存程序。
預存程序參考文章:
樂多日誌
MySQL 5.0 Reference Manual
在 PHP5 中可以用 db_mysqli.dll 這個函示庫來存取 MySQL 預存程序,如果你也是習慣使用 Dreamweaver 來寫網頁的人,只要將所有的 mysql_xxxx() 都換成 mysqli_xxxx() 就可以了,不過還是要注意 MySQL 連線的參數方法。
PHP5 參考文章:
PHP 調用 MySQL 預存程序(MySql5.0)
範例:
DELIMITER $$ -- 變更結束符號為 $$
DROP PROCEDURE IF EXISTS `getData` $$ -- 將原本有的程序刪除
-- 建立程序並設定參數屬性
CREATE PROCEDURE `getData`(id INT, uid CHAR(30))
DETERMINISTIC
BEGIN -- 程序內容起始
SELECT A.FriendUser FROM
(SELECT A.fu, A.Pri FROM A WHERE A.myid = id) AS A1
INNER JOIN
(SELECT B.fu, B.Pri FROM B WHERE B.blid = uid) AS B1
ON A1.fu = B1.fu WHERE A1.Pri >= B1.Pri ;
END $$ -- 程序內容結尾
DELIMITER ; -- 將結束符號改回 ;
執行方法 CALL getData(12,'jax');
由於 phpMyAdmin 沒有支援的工具,也不能匯入,所以只好使用指令模式匯入了,將上面的指令寫到 procedure.sql 文件中,就像寫資料庫建立文件是一樣的,再利用下面的方法將建立指令匯入。
mysql -u username -p < procedure.sql
PS:由於用這個方法匯入時,錯誤訊息的行數會以上一個結束符號為起點,所以在檢查時要看仔細一點,建議先確認程序內容是否正確,在建立預存程序。
預存程序參考文章:
樂多日誌
MySQL 5.0 Reference Manual
在 PHP5 中可以用 db_mysqli.dll 這個函示庫來存取 MySQL 預存程序,如果你也是習慣使用 Dreamweaver 來寫網頁的人,只要將所有的 mysql_xxxx() 都換成 mysqli_xxxx() 就可以了,不過還是要注意 MySQL 連線的參數方法。
$link = mysqli_connect(
'localhost', /* The host to connect to */
'root', /* The user to connect as */
'root', /* The password to use */
'db_name' /* The default database to query */
);
mysqli_query($link, "CALL getData(12,'jax')");
PHP5 參考文章:
PHP 調用 MySQL 預存程序(MySql5.0)
2007-10-26
InnoDB 實現了 MySQL 的 Foreign Key
記得 MySQL 預設是不支援 Foreign Key 的功能,但其實 MySQL 中有相關的套件了,只是沒有開啟而已,InnoDB 是 MySQL 上第一個提供外鍵約束的表引擎。
如何啟動:請在 my.ini 中將 skip-innodb 這行用 # 號註解掉。
引用範例:
當關聯父資料表的主鍵紀錄行被刪除或修改時,InnoDB 對子資料表中紀錄行的處理方式:
CASCADE - 會將有所關聯的紀錄行也會進行刪除或修改。
SET NULL - 會將有所關聯的紀錄行設定成 NULL。
NO ACTION - 有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
RESTRICT - 與 NO ACTION 相同。
詳細的錯誤訊息可以在 MySQL 指令模式下輸入:
SHOW engine innodb status;
由於會列出很多資料,所以要找一下,在訊息中有一组【LATEST FOREIGN KEY ERROR】會有最近錯誤的詳細描述和解决辦法。
如何啟動:請在 my.ini 中將 skip-innodb 這行用 # 號註解掉。
引用範例:
CREATE TABLE parent(
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE = INNODB;
CREATE TABLE child(
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY(parent_id) REFERENCES parent(id) ON DELETE CASCADE
) ENGINE = INNODB;
-- 參數:
[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
當關聯父資料表的主鍵紀錄行被刪除或修改時,InnoDB 對子資料表中紀錄行的處理方式:
CASCADE - 會將有所關聯的紀錄行也會進行刪除或修改。
SET NULL - 會將有所關聯的紀錄行設定成 NULL。
NO ACTION - 有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
RESTRICT - 與 NO ACTION 相同。
詳細的錯誤訊息可以在 MySQL 指令模式下輸入:
SHOW engine innodb status;
由於會列出很多資料,所以要找一下,在訊息中有一组【LATEST FOREIGN KEY ERROR】會有最近錯誤的詳細描述和解决辦法。
phpMyAdmin 中文亂碼問題
因為 phpMyAdmin 就算編碼方式設定在 UTF-8,中文還是會出現亂碼的問題,真是奇怪的現象,上網找了些資料發現只要改個設定就好了,為了怕以後會忘記,在這裡記錄一下。
設定檔:phpMyAdmin\libraries\select_lang.lib.php
設定檔:phpMyAdmin\libraries\select_lang.lib.php
/* 找到下面的這個變數 */
$mysql_charset_map = array(
/* UTF-8 */
'utf-8' => 'utf8' 改成 'utf-8' => 'latin1'
/* Big5 */
'big5' => 'big5' 改成 'big5' => 'latin1'
2007-10-25
為了 Web Server 忙一天! [Linux]
今天又是做了很沒有效率的事,因為 Web Server 一直不能正常 Work,花了很多時間在找問題,原本是安裝系統選單中的 LAMP 套件,做了一些設定後,只有 Apache 運作是正常的,PHP 則是找不到相關 Lib,又是上網找了一堆資料,還到處求助同學,就因為效能的考量必須用到 Linux。
想說套裝的 Ubuntu Linux 應該安裝好就能 Work,但卻不是我想的那麼快樂,雖然是有學到東西,但花的時間實在太多了,真想利用自己的時間慢慢做,不過所花的時間是值得的,在效能上的確比 Windows 快,而且所耗費的資源也很低,今天的問題就是預設的程序中少安裝了幾個套件。
sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install mysql-server
sudo apt-get install php5-mysql
sudo apt-get install libapache2-mod-php5
sudo apt-get install libapache2-mod-auth-mysql
sudo a2enmod php5
藍色的指令是 LAMP 預設安裝的,紅色的指令是我自己後來裝上去的,安裝完後就可以正常 Work,真是給他卡到陰,出現了莫名其妙的怪問題,我還一直以為是我設定錯誤。
相關教學:LAMP伺服器的配置
想說套裝的 Ubuntu Linux 應該安裝好就能 Work,但卻不是我想的那麼快樂,雖然是有學到東西,但花的時間實在太多了,真想利用自己的時間慢慢做,不過所花的時間是值得的,在效能上的確比 Windows 快,而且所耗費的資源也很低,今天的問題就是預設的程序中少安裝了幾個套件。
sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install mysql-server
sudo apt-get install php5-mysql
sudo apt-get install libapache2-mod-php5
sudo apt-get install libapache2-mod-auth-mysql
sudo a2enmod php5
藍色的指令是 LAMP 預設安裝的,紅色的指令是我自己後來裝上去的,安裝完後就可以正常 Work,真是給他卡到陰,出現了莫名其妙的怪問題,我還一直以為是我設定錯誤。
相關教學:LAMP伺服器的配置
2007-10-24
初次使用 Ubuntu [Linux]
今天為了將 Server 架起來,花了不少時間,由於以前很少使用 Linux 的作業系統,所以上網找了很多資料來看,為了安裝 FTP Server 找了半天,結果原來光碟裡已經有套裝軟體了,就是這行
sudo apt-get install vsftpd
安裝指令,既簡單又快速,囧!我花了那麼多時間是在幹嘛!!快炸掉了!而且有很多不常用的指令,Ubuntu 預設都沒有裝,反正也不會用到,後來去了 Ubuntu 論壇看到不少有用的資料,看來我有點跟不上時代了,原來已經不用像以前那麼麻煩了,真是方便的說,明天就可以將 Web 的設定完成了,今天進度有點落後!
sudo apt-get install vsftpd
安裝指令,既簡單又快速,囧!我花了那麼多時間是在幹嘛!!快炸掉了!而且有很多不常用的指令,Ubuntu 預設都沒有裝,反正也不會用到,後來去了 Ubuntu 論壇看到不少有用的資料,看來我有點跟不上時代了,原來已經不用像以前那麼麻煩了,真是方便的說,明天就可以將 Web 的設定完成了,今天進度有點落後!
2007-10-17
三層 INNER JOIN 五層 SELECT
今天工作時在寫 MySQL 的查詢指令,為了算出一個複雜的結果,必須用到四個資料表,三個 INNER JOIN 及五個 SELECT,一共用了四個子查詢,再推關聯性時我已經昏了 @ @,想說用 IN() 去簡化查詢指令,可是會造成 MySQL 整個當掉,結果只好用原本的去做了。
第一次下那麼長的指令,而且第一個子查詢如果沒有將範圍縮小的話,後面所要的計算時間就會需要很久,原本想用預存程序的,但查詢條件卻設在最基本的子查詢裡面,頭很大!目前還找不到更快且簡潔的方法。
第一次下那麼長的指令,而且第一個子查詢如果沒有將範圍縮小的話,後面所要的計算時間就會需要很久,原本想用預存程序的,但查詢條件卻設在最基本的子查詢裡面,頭很大!目前還找不到更快且簡潔的方法。
2007-10-16
好用的 iGoogle
今天看硬是要學中寫了一篇有關 iGoogle 的介紹,心血來潮也將我的 iGoogle 分類了一下,而且發現到原來之前掛的書籤工具Google Bookmarks蠻人性化的,除了高度不能變長,且最多只顯示四個,也沒有捲軸,真是缺失阿!!
不過呢!在新增和修改的操作上很人性化,還具有分類的功能,你只要貼上網址,他自動會去抓那個網頁的標題,真的很方便的說,不知道以後會不會修得更好,期待一下吧!要是沒有的話,只好自己寫一個。
iGoogle 可以自訂喜歡的樣式,還可以增加頁籤,不用將一推工具都放在一起了,可以看起來更簡潔,Google 有很多服務都很好用,有興趣的人可以多嘗試一些沒用過的服務,或者去看看相關的介紹文章,別錯失了這些好用的工具。
教學連結:硬是要學
不過呢!在新增和修改的操作上很人性化,還具有分類的功能,你只要貼上網址,他自動會去抓那個網頁的標題,真的很方便的說,不知道以後會不會修得更好,期待一下吧!要是沒有的話,只好自己寫一個。
iGoogle 可以自訂喜歡的樣式,還可以增加頁籤,不用將一推工具都放在一起了,可以看起來更簡潔,Google 有很多服務都很好用,有興趣的人可以多嘗試一些沒用過的服務,或者去看看相關的介紹文章,別錯失了這些好用的工具。
教學連結:硬是要學
UltraEdit-32 關鍵字色彩
為了讓寫 SQL 指令可以更容易,我修改了 UltraEdit-32 中的 WORDFILE.TXT 檔,可是關鍵字實在太多了,所以上網找了一些定義好的來用,但是只有支援小寫,所以只好自己再加上大寫的部分,也順便加了 PHP 及 JavaScript2.0 的色彩樣式。
在新增樣式時要注意樣式編號要改一下,在每個樣式的第一行都有一個 /L? 的編號,而且必須延續上一個編號,用 UltraEdit-32 那麼久,他真的是一個不錯的文字編輯器,可以在很多語言上都用得到,還有非常方便的編碼轉換及許多功能。
官方下載 FTP
資料列表:山区程序员
在新增樣式時要注意樣式編號要改一下,在每個樣式的第一行都有一個 /L? 的編號,而且必須延續上一個編號,用 UltraEdit-32 那麼久,他真的是一個不錯的文字編輯器,可以在很多語言上都用得到,還有非常方便的編碼轉換及許多功能。
官方下載 FTP
資料列表:山区程序员
2007-10-13
Blogger 排版方式
這是 blogger 的排版方式,雖然不是每個樣式都一樣,但主要都會有這些區塊,在這裡可以讓大家有個參考,如果想知道更明確的排版方式可以用 Firefox 的 DOM 觀察器去瞭解詳細的內容。
2007-10-11
浮動的需求文件
自從在虎尾上過劉景秋老師的課以後,我就在也沒有寫過完整的需求分析書了,當初沒有好好去學真是個錯誤,後悔也來不及了,由於那麼課並沒有課本,只好從新把上課的投影片那來看吧!
說實在的這次的需求分析書並不是寫得很好,雖然把該定義的需求都寫上了,但整體的架構上並沒有定義的很清楚,連自己看了都有點灰掉。
而且我們的需求目前並沒有定案,在三天的上班日都有去討論需求,並且做一些變動,整個需求都在浮動中,正所謂牽一髮而動全身,所以這樣的計畫也不能進入開發階段,要不然只會做白工,我要效率!快想點有效率的辦法,但當下也只能用正規的方法,讓系統的需求定義能更完整。
因為專案的問題,開始想研究如何用 Ajax 做分散式運算,好讓使用者去分擔屬於自己的運算。
說實在的這次的需求分析書並不是寫得很好,雖然把該定義的需求都寫上了,但整體的架構上並沒有定義的很清楚,連自己看了都有點灰掉。
而且我們的需求目前並沒有定案,在三天的上班日都有去討論需求,並且做一些變動,整個需求都在浮動中,正所謂牽一髮而動全身,所以這樣的計畫也不能進入開發階段,要不然只會做白工,我要效率!快想點有效率的辦法,但當下也只能用正規的方法,讓系統的需求定義能更完整。
因為專案的問題,開始想研究如何用 Ajax 做分散式運算,好讓使用者去分擔屬於自己的運算。
2007-10-10
PHP Smarty 樣版引擎
這是今天下午兩點才買的書,剛剛將這本書前半段語法說明的部分看完了,原來 Smarty 樣版引擎並沒有想像中的困難,而且書中用了一些簡單的範例作說明。
至於使用樣版的好處我就不多做說明了,已經有多位前輩寫過很多了,他也有很多成功的例子背書了。
這真是一本好書,這也已經有很多人說過了,但我想說的是, 感謝 Jace Ju 寫了這本好書。
2007-10-05
最新 JavaScript 完整語法參考辭典
這本書是我最常用到的一本工具書,裡面收錄了常用且共通性高的語法,以簡單的範例教你如何使用這些語法。
目錄的編排很清楚,可以讓你快速且容易找到你想要的函數或功能,而且每個函數或物件都標示針對不同瀏覽器的支援,是一本實用的工具書,而且價格也不貴。
他是翻譯自日本的書籍,有部分較新的函數並沒有收錄進去,你可以查閱他的原始網站。
連結: OpenSpace 之 JavaScript 例文辭典
相關連結:
博碩文化股份有限公司
博客來書籍館
Findbook
Form 標籤在 IE6 中會有奇怪的段落現象
最近在練習使用 Div 標籤排版,也順便修改自己常用的網頁,那個頁面是以前用表格排版的,隔了很久的時間我已經快看不懂裡面寫什麼了!果然用表格排版是個錯誤,在練習的過程中真的省去許多不必要的大小和標籤,原始碼的可閱讀性也增加了,我也在裡面加上了一些註解,要養成寫註解的良好習慣。
正題:Form 中如果有隱藏欄位時,在 IE6 中總會多出空的一行,使的 Div 超出預設的大小,嘗試了很多方法之後,終於找到一個有效的辦法,就是在 Div 中設定 overflow:hidden; 這個樣式,可能是我對 CSS 還不是很瞭解才會花那麼多時間,但原先的排版在 Firefox 裡卻是和我想像中的設定一樣,不知道是不是 IE6 本身的問題。
正題:Form 中如果有隱藏欄位時,在 IE6 中總會多出空的一行,使的 Div 超出預設的大小,嘗試了很多方法之後,終於找到一個有效的辦法,就是在 Div 中設定 overflow:hidden; 這個樣式,可能是我對 CSS 還不是很瞭解才會花那麼多時間,但原先的排版在 Firefox 裡卻是和我想像中的設定一樣,不知道是不是 IE6 本身的問題。
2007-10-03
IE7 的 CSS 樣式
為了解決上次的版面問題,終於找到應對的語法了,看來以後查詢時要多試幾個關鍵字,這次很快的就找到相關的文章了。
參考文章:Ben's 部落不及格
#wrapper { color : #00ff00; } /* Moz */ *+html #wrapper { color : #0000ff; } /* IE7 */ * html #wrapper { color : #ff0000; } /* IE6 */
參考文章:Ben's 部落不及格
2007-10-02
可惡的 Microsoft IE
這是之前 Blog 在 IE6 中顯示的樣式狀況,很奇怪的多了一條線,在 HTML 中明明就沒有套用樣式,可是那個 div 卻自己套用了上一個父標籤的樣式。
在 Firefox 中沒有這個問題,能夠正常顯示我所設定的樣式。
為了能讓更多的瀏覽者能夠正確的顯示我的網頁,於是我只好另外設計對應 IE6 的樣式,選擇了替代方案。
可是呢?我找別人幫我測試我的網頁,在 IE7 中一樣出現了之前的問題,為了解決這個問題,在網路上找尋相對應的方法,但在胡思乱想的 Blog 中看到了這段話:
這讓我失去了為 IE7 修改錯誤的動力,就暫時先考量 IE6 和 Firefox 這兩大族群,對於其他不遵守標準的 IE 就暫時不理他吧!
在 Firefox 中沒有這個問題,能夠正常顯示我所設定的樣式。
為了能讓更多的瀏覽者能夠正確的顯示我的網頁,於是我只好另外設計對應 IE6 的樣式,選擇了替代方案。
可是呢?我找別人幫我測試我的網頁,在 IE7 中一樣出現了之前的問題,為了解決這個問題,在網路上找尋相對應的方法,但在胡思乱想的 Blog 中看到了這段話:
『話說回來,IE7 的出現,又給網頁設計師們出了個難題,拋開 IE345,以往僅僅要顧及 IE6 和 Firefox 的差異就夠令人鬱悶的了,這又出現了 IE7。一直呼喊著標準啊標準啊,強悍的微軟告訴我們,他們家的 IE 就是標準,什麼 W3C,滾一邊去。』
這讓我失去了為 IE7 修改錯誤的動力,就暫時先考量 IE6 和 Firefox 這兩大族群,對於其他不遵守標準的 IE 就暫時不理他吧!
2007-10-01
設定 Blogger 在 IE 的 CSS
由於我另一個 Blog 在 IE 中有了奇怪顯示錯誤,為了達到親和力信念,我無法忽視這討厭的錯誤。
原本是用 !important 的方法去做,但發現完全沒有用,真奇怪到底是那裡不行,原來 blogger 有自己的設定方式。
只要在給 IE 樣式名稱前加上 _ 就可以了,但如果也有給 Firefox 系列用的樣式,必須將Firefox 的樣式放在 IE 樣式的前面。
原本是用 !important 的方法去做,但發現完全沒有用,真奇怪到底是那裡不行,原來 blogger 有自己的設定方式。
只要在給 IE 樣式名稱前加上 _ 就可以了,但如果也有給 Firefox 系列用的樣式,必須將Firefox 的樣式放在 IE 樣式的前面。
.sidebar .widget {
border : 1px dotted #FFFFFF ; /*這是給 Firefox 的樣式*/
_border : 2px dotted #999999 ; /*這是給 IE 的樣式*/
}
2007-09-30
預設 AdSense for Search 的查詢條件
在看過 AdSense 的條規後,Google 並沒有看到有限制不可以預設查詢條件,我用亂數的方式去隨機顯示自訂的查詢條件,只要將下面的程式碼貼在 AdSense for Search 的程式碼後面就可以了,不過我只有處理一個查詢欄位,如果有兩個以上的查詢在同一個頁面下,我可不保證程式碼沒有問題。
<script language="JavaScript" type="text/javascript">
<!--
var search_random = new Array();
/* 加入預設的查詢條件 */
search_random[search_random.length] = "PHP";
search_random[search_random.length] = "ASP";
search_random[search_random.length] = "MYSQL";
search_random[search_random.length] = "AJAX";
search_random[search_random.length] = "JavaScript";
document.getElementById("sbi").value =
search_random[Math.floor(Math.random()*search_random.length)];
//-->
</script>
令人又愛又恨的『 推薦2.0 』
在 AdSense 中的推薦功能有一個討厭的問題,就是顯示的廣告時常會消失,在網路上看了許多文章後,還是沒有具體的解決方法,除了用舊版本的廣告程式碼沒有其他的辦法了,我加了四個推薦連結,只有一個偶爾會顯示,我也嘗試過其他語言的廣告,但是一樣沒有任何廣告顯示。
而且也沒有替代的廣告或圖片可以用,就整個空在那,使整個版面看起來怪怪的,在 Firefox 上到還好,只是少了個圖片而已,背景上並沒有什麼變化,但在 IE 上卻出顯了一個白底的方匡,整個版面的感覺就差很多。
但是 AdSense 的『推薦2.0』給瀏覽者的親和力很高,而且廣告的圖片給人有專業的感覺,蠻適合拿來裝飾 Blog,可是這個裝飾品常常會消失,這真是一件麻煩的事。
而且也沒有替代的廣告或圖片可以用,就整個空在那,使整個版面看起來怪怪的,在 Firefox 上到還好,只是少了個圖片而已,背景上並沒有什麼變化,但在 IE 上卻出顯了一個白底的方匡,整個版面的感覺就差很多。
但是 AdSense 的『推薦2.0』給瀏覽者的親和力很高,而且廣告的圖片給人有專業的感覺,蠻適合拿來裝飾 Blog,可是這個裝飾品常常會消失,這真是一件麻煩的事。
2007-09-29
重新啟動 Linux
今天把塵封已久的 Linux 系統啟動了,這台機器是使用 Intel Pentium 200MHz 的 CPU,主機板是 ASUS 的,這是我表哥給我的,不灌圖形介面的話其實他跑得還蠻順的,之前有灌過圖形介面,我光是開啟視窗就等很久,整台電腦只有慢而已。
他已經有一年半沒開機了,剛開機時一切正常所有的服務都很 OK,這真是令我驚訝的事,原本對他已經沒什麼好期望的,看來早期 ASUS 的電腦還蠻耐用的,然後重新設定防火牆,由於第一次沒做好重開時設定就跑掉了,這次又再找更多的資料來看,所以防火牆的部分也 OK 了。
開始上載之前寫的網頁,發生了 MySQL 無發連接的問題,在主機上連結沒什麼問題,SQL 指令也都正常,就是網頁連結無法執行,不知道是不是版本的問題,而且 PHP 載入的模組卻只有一個,之前在 Windows 也發生過版本的問題,那時候 Dreamweaver 8 就有顯示錯誤,但這次顯示正常連線,可是就是沒辦法連線,phpmyadmin 也無法正常連線,可以讀取資料庫的內容,但是其他的設定指令都不能運作,上網找了些方法都試過了,但還是不行,正在考慮要不要重灌。
他已經有一年半沒開機了,剛開機時一切正常所有的服務都很 OK,這真是令我驚訝的事,原本對他已經沒什麼好期望的,看來早期 ASUS 的電腦還蠻耐用的,然後重新設定防火牆,由於第一次沒做好重開時設定就跑掉了,這次又再找更多的資料來看,所以防火牆的部分也 OK 了。
開始上載之前寫的網頁,發生了 MySQL 無發連接的問題,在主機上連結沒什麼問題,SQL 指令也都正常,就是網頁連結無法執行,不知道是不是版本的問題,而且 PHP 載入的模組卻只有一個,之前在 Windows 也發生過版本的問題,那時候 Dreamweaver 8 就有顯示錯誤,但這次顯示正常連線,可是就是沒辦法連線,phpmyadmin 也無法正常連線,可以讀取資料庫的內容,但是其他的設定指令都不能運作,上網找了些方法都試過了,但還是不行,正在考慮要不要重灌。
2007-09-27
Google 廣告
這幾天在給 Blog 加上一些廣告,原本是使用 blogger 中的 AdSense 網頁元素工具去建立廣告,但每次在修改 HTML 模版後,AdSense 的設定總會跑掉,真是屢試不爽。
後來我就換成 HTML/JavaScript 網頁元素工具來建立廣告,雖然沒有圖形介面可以用,但是可以修改的空間變的比較大,在排版上的修改也比較容一些,不像之前都要去修改 HTML 模版中的樣式。
目前 Google 的廣告元素共有三種,每一種都蠻特別的,而且感覺 Google 的廣告計畫實驗性意義很重,就像在測試網路上的廣告市場,而且你稍微留意一下你所瀏覽的網頁,其實有很多都有刊登 Google 的廣告,甚至有些廣告你根本不覺得他是廣告,因為廣告的內容會與你的網站相互應,這也是他特別的地方。
後來我就換成 HTML/JavaScript 網頁元素工具來建立廣告,雖然沒有圖形介面可以用,但是可以修改的空間變的比較大,在排版上的修改也比較容一些,不像之前都要去修改 HTML 模版中的樣式。
目前 Google 的廣告元素共有三種,每一種都蠻特別的,而且感覺 Google 的廣告計畫實驗性意義很重,就像在測試網路上的廣告市場,而且你稍微留意一下你所瀏覽的網頁,其實有很多都有刊登 Google 的廣告,甚至有些廣告你根本不覺得他是廣告,因為廣告的內容會與你的網站相互應,這也是他特別的地方。
2007-09-23
利用 ASP 對 Access 資料庫重組
由於 Access 資料庫沒有支援的 SQL 指令可做重組
而且在做刪除資料時,還是不會將空間釋放出來
這種狀況只能從 Server 上做重組釋放的動作
但不是每個人都可以進入 Server 上做這個動作
所以另外的辦法就是從 ASP 網頁上執行
<% 'CompactDB 成功將回傳 true,失敗將回傳 false 'DBUrl 以主目錄開始的資料庫相對位址字串 'passwd 資料庫密碼,如果沒有請輸入空字串 Function CompactDB(DBUrl,passwd) Set fso = CreateObject("Scripting.FileSystemObject") Dim strDB strDB = server.MapPath(DBUrl) Dim strNewDB strNewDB = server.MapPath(DBUrl & ".tmp") Dim login If(passwd<>"") Then login = ";Jet OLEDB:Database Password=" & passwd & ";" Else login = "" End If If fso.FileExists(strDB) Then '壓縮資料庫 Set Engine = CreateObject("JRO.JetEngine") strPvd = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Engine.CompactDatabase strPvd&strDB&login,strPvd&strNewDB&login Set Engine = nothing '刪除舊的資料庫 fso.DeleteFile strDB fso.MoveFile strNewDB,strDB '回傳已成功的訊息 CompactDB = true Else '回傳失敗訊息 CompactDB = false End If Set fso = nothing End Function %>檔案連結
2007-09-22
PHP 中的 unescape 函式
由於 PHP 中並沒有支援 JavaScript 的 escape() 的反函式
所以除了尋找其他編碼方式,要不然就要自己寫一個解碼函數
但如果可以使用其他方式編碼會是比較好的
在 JavaScript 中還是有針對資料傳送用的編碼函數
例如:
decodeURL(str) 『解碼』
encodeURL(str) 『編碼』
decodeURLComponent(str) 『解碼』
encodeURLComponent(str) 『編碼』
以上的函數會將英文和數字以外的文字轉成 URL 的 16 進位編碼
而 decodeURL,encodeURL 不會轉換 [ ; / ? : @ & = + $ , ] 這些文字
但 decodeURLComponent,decodeURLComponent 則會
所以並非一定要用到 unescape 函式才可以處理編碼的問題
注意關於 PHP 中的 unescape 函式程式碼必須用到 iconv 函式庫
請確認 php.ini 中有載入此函式庫
參考網頁:
PHP实现Javascript的escape(),unescape()的方法
PHP5網管實驗室
所以除了尋找其他編碼方式,要不然就要自己寫一個解碼函數
但如果可以使用其他方式編碼會是比較好的
在 JavaScript 中還是有針對資料傳送用的編碼函數
例如:
decodeURL(str) 『解碼』
encodeURL(str) 『編碼』
decodeURLComponent(str) 『解碼』
encodeURLComponent(str) 『編碼』
以上的函數會將英文和數字以外的文字轉成 URL 的 16 進位編碼
而 decodeURL,encodeURL 不會轉換 [ ; / ? : @ & = + $ , ] 這些文字
但 decodeURLComponent,decodeURLComponent 則會
所以並非一定要用到 unescape 函式才可以處理編碼的問題
注意關於 PHP 中的 unescape 函式程式碼必須用到 iconv 函式庫
請確認 php.ini 中有載入此函式庫
<?php function unescape($str){ $str = rawurldecode($str); preg_match_all("/%u.{4}|&#x.{4};|&#\d+;|.+/U",$str,$r); $ar = $r[0]; foreach($ar as $k=>$v){ /* 下面的 UTF-8 可針對你的網頁編碼方式作變更 */ if(substr($v,0,2)=="%u"){ $ar[$k]=iconv("UCS-2","UTF-8",pack("H4",substr($v,-4)));} elseif(substr($v,0,3)=="&#x"){ $ar[$k]=iconv("UCS-2","UTF-8",pack("H4",substr($v,3,-1)));} elseif(substr($v,0,2)=="&#"){ $ar[$k]=iconv("UCS-2","UTF-8",pack("n",substr($v,2,-1)));} } return join("",$ar); } ?>
參考網頁:
PHP实现Javascript的escape(),unescape()的方法
PHP5網管實驗室
[PHP] 輸出資料至 Excel
經由設定 header 的文件格式達到輸出至 Excel 檔
這個方法我之前有用過,可惜他不支援 UTF-8 的編碼方式
有嘗試過使用 BIG5 的編碼方式,可以正常輸出文字
這個方法我之前有用過,可惜他不支援 UTF-8 的編碼方式
有嘗試過使用 BIG5 的編碼方式,可以正常輸出文字
<?php
/* 設定文件格式 */
header("Content-type:application/vnd.ms-excel");
/* 設定文件名稱 */
header("Content-Disposition:filename=to_excel.xls");
/* 輸出文件內容 */
for($i=1; $i<10; $i++){
/* 每個項目以( \t )分隔 */
echo "number".$i."\t";
echo "name".$i."\t";
echo "date".$i."\t";
echo "text".$i."\t";
/* 每一筆資料以( \n )分隔 */
echo "\n";
}
?>
Ajax 使用 POST 傳送
這篇文章是想要將所學到的 Ajax 做一個簡單的紀錄
這裡再次感謝小正正教室。
參考網頁:
小正正教室:Ajax 兩層連動選單
相關連結:
爪哇豆的秘密:AJAX深度歷險1(Getting Started)
Ajax内部交流文档
MoztwWiki:AJAX 上手篇
維基百科:AJAX
語言技術:Ajax Gossip
這裡再次感謝小正正教室。
/* 針對不同瀏覽器的前置處理宣告 */
if (typeof(XMLHttpRequest)=="undefined" && window.ActiveXObject) {
XMLHttpRequest=function(){
var arrSignatures = [
"MSXML2.XMLHTTP.5.0",
"MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP",
"Microsoft.XMLHTTP"];
for (var i = 0; i < arrSignatures.length; i++) {
try{
var oRequest = new ActiveXObject(arrSignatures[i]);
return oRequest;
}catch(oError){/*ignore*/}
}
throw new Error("MSXML is not installed on your system.");
};
}
/* 傳送連接 */
function convectionLink(){
/*建立傳送的資料 */
var postData = 'user=xxxx&pass=xxxx';
/*產生要求資料的 URL 位址*/
var sURL = "check_in.php";
/* 建立 XMLHttpRequest 物件,並且送要求 */
var oRequest = new XMLHttpRequest();
/* 設定(傳送的方式,要求的位址,是否非同步進行) */
oRequest.open("POST", sURL, true);
/* 使用 POST 傳送必須設定 MIME 型態 */
oRequest.setRequestHeader(
'Content-Type',
'application/x-www-form-urlencoded'
);
/* 建立接收資料的函數 */
oRequest.onreadystatechange = function(){
/* readyState 所有可能的傳送狀態值如下:
0 (還沒開始)
1 (讀取中)
2 (已讀取)
3 (資訊交換中)
4 (請求完成) */
if (oRequest.readyState == 4) {
/* (在此處加入開啟已停用選項的設置) */
/* 處理傳回為 200 的 HTTP 狀態碼 */
if (oRequest.status == 200) {
/* 接受資料成功 */
/*可以從responseText或responseXML取得傳回的資料*/
json = oRequest.responseText;
/* 處理其他錯誤 HTTP 狀態碼 */
}else{
/*接收資料失敗,可以從 statusText 取得錯誤狀態資訊*/
alert(oRequest.statusText);
}
}
}
/* (在此處可以加入一些網頁選項停用的設置,以防止重複送出) */
/* 送出 Ajax 要求 */
oRequest.send(postData);
/*以POST傳送時,這裡可以輸入(XML,串流,字串,JSON格式)*/
/*以GET傳送時,這裡只要輸入 null 或是空的 */
}
參考網頁:
小正正教室:Ajax 兩層連動選單
相關連結:
爪哇豆的秘密:AJAX深度歷險1(Getting Started)
Ajax内部交流文档
MoztwWiki:AJAX 上手篇
維基百科:AJAX
語言技術:Ajax Gossip
2007-09-21
為何使用表格排版是不明智的?
之前在小正正教室中發現了這篇文章的連結,雖然這個文章已經很舊了,但我是最近才瞭解的,以前在別人的網頁中就有發現大部分的網頁已經不是表格排版了。
你是不是跟我一樣還在用表格排版呢?那你需要好好的讀這篇簡報,裡面說明了表格排版的缺點,和使用結構性 HTML 排版的優點,現在已經是資訊的時代了,你的網頁是不是也跟上了腳步呢?
參考網頁:為何使用表格排版是不明智的
你是不是跟我一樣還在用表格排版呢?那你需要好好的讀這篇簡報,裡面說明了表格排版的缺點,和使用結構性 HTML 排版的優點,現在已經是資訊的時代了,你的網頁是不是也跟上了腳步呢?
參考網頁:為何使用表格排版是不明智的
2007-09-20
更具親和力的網站
這幾天無意間找到了一篇文章,『在 30 天內打造更具親和力的網站』,很好奇的把他看完了,你也很好奇吧!那為什麼網站需要親和力呢??
相信很多人也相同的經驗,就是在瀏覽他人的網頁時,會看不清楚他所寫的文字,或者是排版的順序很糟,根本找不到你想要的資訊,一般正常人都難以瀏覽的網頁,何況是一些具有障礙的人。
有很多人喜歡在網頁的背景上貼圖片,但不是每張圖片都適合當背景,往往這些背景會造成閱讀上的不便,有時候我也會因為這些背景所困擾,常常必須去除網頁中的 CSS,但沒有 CSS 的網頁又很單調,所以在美化網頁時必須考量到閱讀上的問題,是不是會影響文字的顯示或造成網頁的無法瀏覽。
還有一個重要的問題,就是瀏覽器的支援性,很多的網頁可能只針對某一特定的瀏覽器所撰寫的,往往在 IE 中可以正常顯示的網頁,在其他瀏覽器中可能就會完全走樣,每個瀏覽器都有不一樣的問題,但有些問題是比較重要的必須加以處理,才可以讓網頁更受到大家的歡迎。
參考網頁:在 30 天內打造更具親和力的網站
相信很多人也相同的經驗,就是在瀏覽他人的網頁時,會看不清楚他所寫的文字,或者是排版的順序很糟,根本找不到你想要的資訊,一般正常人都難以瀏覽的網頁,何況是一些具有障礙的人。
有很多人喜歡在網頁的背景上貼圖片,但不是每張圖片都適合當背景,往往這些背景會造成閱讀上的不便,有時候我也會因為這些背景所困擾,常常必須去除網頁中的 CSS,但沒有 CSS 的網頁又很單調,所以在美化網頁時必須考量到閱讀上的問題,是不是會影響文字的顯示或造成網頁的無法瀏覽。
還有一個重要的問題,就是瀏覽器的支援性,很多的網頁可能只針對某一特定的瀏覽器所撰寫的,往往在 IE 中可以正常顯示的網頁,在其他瀏覽器中可能就會完全走樣,每個瀏覽器都有不一樣的問題,但有些問題是比較重要的必須加以處理,才可以讓網頁更受到大家的歡迎。
參考網頁:在 30 天內打造更具親和力的網站
2007-09-19
利用物件的方式設定事件
這是我第一次使用物件的方式設定事件處理,以前都是用 HTML 去處理事件的呼叫,在利用 JavaScript 將表格模擬成按鈕中就是用這種模式去運作的,那麼用物件去設定有什麼好處呢?
第一用這個方法去處理的話,可以減少網頁檔案的大小,也減少 HTML 上的複雜度,讓網頁有更好的結構感,使 HTML 更容易閱讀,且更容易撰寫。
第二對於大量使用相同的事件有更好處理,重複使用性高,將程式碼獨立成個體的文件,只要在適當的位址中載入,就能重複使用相同的程式碼。
第三對於事件的新增及修改有更大的靈活度,不必在新增事件時要去改每個物件的 HTML,可以統一管理相同物件的新增及修改。
所以在大量使用相同程式碼時,這是一個不錯的選擇。
第一用這個方法去處理的話,可以減少網頁檔案的大小,也減少 HTML 上的複雜度,讓網頁有更好的結構感,使 HTML 更容易閱讀,且更容易撰寫。
第二對於大量使用相同的事件有更好處理,重複使用性高,將程式碼獨立成個體的文件,只要在適當的位址中載入,就能重複使用相同的程式碼。
第三對於事件的新增及修改有更大的靈活度,不必在新增事件時要去改每個物件的 HTML,可以統一管理相同物件的新增及修改。
所以在大量使用相同程式碼時,這是一個不錯的選擇。
/* 取得所有名稱為 s_but 的物件群組 */ var spanButtons = document.getElementsByName("s_but"); /* 設定群組中每一個物件的事件 */ for (var i = 0; i < spanButtons.length; i++) { /* 設定當滑鼠按下時的事件函數 */ spanButtons[i].onmousedown = downChange; /* 設定當滑鼠重疊時的事件函數 */ spanButtons[i].onmouseover = overChange; /* 設定當滑鼠離開時的事件函數 */ spanButtons[i].onmouseout = outChange; } /*Down Change*/ function downChange(){ this.style.borderStyle = "inset"; this.style.backgroundColor = "#EEDDDD"; } /*Out Change*/ function outChange(){ this.style.borderColor = ""; this.style.borderStyle = "outset"; this.style.backgroundColor = "#FFFFFF"; } /*Over Change*/ function overChange(){ this.style.borderColor = "#FF0000"; }檔案連結
2007-09-16
Access 資料庫連結字串
有設定密碼的連結字串
"Driver={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("/test.mdb")& ";User ID=xxxx;Password=xxxx;"
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("/test.mdb")& ";Jet OLEDB:Database Password=xxxx;"
沒有設定密碼的連結字串
"Driver={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("/test.mdb")
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("/test.mdb")
Server.MapPath 輸入以主目錄為參考的相對路徑,回傳一個網站的絕對路徑
User ID :資料庫使用者帳號
Password :資料庫使用者密碼
"Driver={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("/test.mdb")& ";User ID=xxxx;Password=xxxx;"
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("/test.mdb")& ";Jet OLEDB:Database Password=xxxx;"
沒有設定密碼的連結字串
"Driver={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("/test.mdb")
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("/test.mdb")
Server.MapPath 輸入以主目錄為參考的相對路徑,回傳一個網站的絕對路徑
User ID :資料庫使用者帳號
Password :資料庫使用者密碼
Google 的免費空間
今天為了找一個空間來放我寫的網頁,原本想用 Google 文件來放的,但對於 HTML 的格式還是有些限制,所以只好找其他的辦法了,於是我想我們的 Google 大神應該有辦法為我解決這個問題,果然讓我找到了,每個 Google 帳號都擁有 100MB 的免費空間,但目前只有英文版,而且空間並不大,還好我只有放一些純文字文件,所以已經很夠用了。
我找到一個相關的說明網頁
http://fecfec.googlepages.com/gpage.htm
Google 免費空間
Google page Creator
我找到一個相關的說明網頁
http://fecfec.googlepages.com/gpage.htm
Google 免費空間
Google page Creator
2007-09-07
2007-09-03
利用 Date() 檢查日期格式
這是利用 JavaScript 中現有的函數 Date() 作日期驗證
使用的原理是將輸入值轉成正規的文字字串
再用 Date() 新增一個日期物件
如果是正確日期將會和輸入是一樣的字串
利用這個原理做到日期格式的驗證
檔案連結
使用的原理是將輸入值轉成正規的文字字串
再用 Date() 新增一個日期物件
如果是正確日期將會和輸入是一樣的字串
利用這個原理做到日期格式的驗證
/*-- (判斷日期格式是否正確) -------------------------*/ function isDate(year, month, day){ var dateStr; if (!month || !day) { if (month == '') { dateStr = year + "/1/1" }else if (day == '') { dateStr = year + '/' + month + '/1'; }else { dateStr = year.replace(/[.-]/g, '/'); } }else { dateStr = year + '/' + month + '/' + day; } dateStr = dateStr.replace(/\/0+/g, '/'); var accDate = new Date(dateStr); var tempDate = accDate.getFullYear() + "/"; tempDate += (accDate.getMonth() + 1) + "/"; tempDate += accDate.getDate(); if (dateStr == tempDate) { return true; } return false; } /*檢查格式*/ isDate("2007/2/12") isDate("2007-2-12") isDate("2007.2.12") isDate("2007/02/02") isDate("2007", "2", "12") isDate("2007", "2", "") isDate(2007, 2, 12)
檔案連結
2007-08-27
CSS Diagrams
最近又找到一個有趣的東西
一個用 CSS 畫結構圖的教學
很好奇它事如何做到的吧??
整個繪圖都沒有用到任何圖片
完全是用 HTML 及 CSS 樣式組合出來的
參考網頁 :
CSS Diagrams
53 CSS-Techniques You Couldn’t Live Without
一個用 CSS 畫結構圖的教學
很好奇它事如何做到的吧??
整個繪圖都沒有用到任何圖片
完全是用 HTML 及 CSS 樣式組合出來的
參考網頁 :
CSS Diagrams
53 CSS-Techniques You Couldn’t Live Without
2007-08-26
初次使用 AJAX 技術
在無意間發現了這個技術名詞
於是上網查了一些相關的解說
在 google 的許多服務中都有使用這個技術
AJAX 的功能讓網頁更具有彈性且親切
最近在小正正的 blog 看到他寫的教學文章
他寫的教學讓我對 AJAX 有了初步的了解
AJAX 在使用上並沒有想像中的困難
而且是使用在我熟悉的 JavaScript 語言上
小正正所寫的 JavaScript 語法讓我很驚訝
有些用法是我以前不曾寫過的
他的教學讓我收穫很多
很感謝他寫的這篇文章
不過關於其他細節的設定及參數不是寫的很完整
於是又查到一篇介紹參數及設定的文章
[賴榮樞]的軟體資訊誌裡所寫的 Ajax不只舊調重彈(1)
他對於 AJAX 寫了許多詳細的介紹
在此也感謝他寫的了這麼好的解說
於是上網查了一些相關的解說
在 google 的許多服務中都有使用這個技術
AJAX 的功能讓網頁更具有彈性且親切
最近在小正正的 blog 看到他寫的教學文章
他寫的教學讓我對 AJAX 有了初步的了解
AJAX 在使用上並沒有想像中的困難
而且是使用在我熟悉的 JavaScript 語言上
小正正所寫的 JavaScript 語法讓我很驚訝
有些用法是我以前不曾寫過的
他的教學讓我收穫很多
很感謝他寫的這篇文章
不過關於其他細節的設定及參數不是寫的很完整
於是又查到一篇介紹參數及設定的文章
[賴榮樞]的軟體資訊誌裡所寫的 Ajax不只舊調重彈(1)
他對於 AJAX 寫了許多詳細的介紹
在此也感謝他寫的了這麼好的解說
2007-08-17
利用 !important 修正 IE 與 Firefox 的差異
有次在無意間瀏覽他人的CSS檔案時發現沒見過的指令,上網查詢了一些相關資料,發現這令我驚訝的語法。
相關網頁:important终级讲解
#pmenu{ color : red !important; /* Firefox 會採用這一行的樣式 */ color : blue ; /* 由於 IE 看不懂上一行的 !important 指令 */ /* 所以會採用這一行的樣式 */ }
相關網頁:important终级讲解
2007-08-15
2007-07-07
顯示物件的所有屬性
很多時候在寫 JavaScript 時,會因為無法確定變數的狀況,而找不到是那裡出現錯誤,最好的辦法就是顯示變數的所有屬性,以確認目前的狀況。
利用這個函數可以顯示傳入的物件或變數的狀況,會開啟新的頁面顯示所有的資訊。
利用這個函數可以顯示傳入的物件或變數的狀況,會開啟新的頁面顯示所有的資訊。
/*Show Object Element ( 顯示物件的元素 ) */
function SOE(Obj){
var i, outText = "", eName, eValue;
for (i in Obj) {
/* 加入例外處裡 */
try {
/* 設定元素名稱的樣式 */
eName = i.bold().fontcolor('#770077');
/* 設定元素數值的樣式 */
eValue=(Obj[i]+'').replace("function","function".bold());
eValue = eValue.fontcolor('#0000ff');
/* 將資料串接在一起 */
outText += eName + " = " + eValue + "<hr/>";
}catch (e) {
/* 處理例外事件的訊息 */
eName = (e + '').replace(/" /g, '"< br/>');
outText += eName.fontcolor('red') + "<hr/>";
}
}
/* 設定顯示的視窗 */
i=window.open("","","width=450,height=550,"
+"scrollbars=yes,resizable=yes");
/* 將資料加入視窗的文件中,並設定字體定寬及大小 */
i.document.body.innerHTML = outText.fixed().fontsize(2);
/* 設定顯示視窗的標題 */
i.document.title = 'Show Object Element';
/* 讓顯示視窗取得焦點 */
i.focus();
}
2007-07-05
動態新增 select 的選項
Obj.options[number]=new Option(text,value);
Obj:select 的物件
number:選項的編號(第幾個選項),起始值為 0
text:選項所顯示的文字
value:選項的值
EX:
Obj.length=0; /* 先將選項的數目設定為 0 */
/* 再依序增加選項,當然也可以用迴圈處理 */
Obj.options[Obj.length]=new Option("中正區","100");
Obj.options[Obj.length]=new Option("大同區","103");
Obj.options[Obj.length]=new Option("中山區","104");
/* length 會因為選項的增加而改變,所以是一個可以善用的變數 */
利用 JavaScript 將表格模擬成按鈕
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=big5"/> <title>利用 JavaScript 將表格模擬成按鈕</title> <script language="JavaScript" type="text/javascript"> <!-- var mouseOverColor = "#CCEEEE"; var mouseOutColor = "#FFFFFF"; var mouseDownColor = "#99CCCC"; /* 滑鼠游標重疊時的顏色及滑鼠指標 */ function mOver(Obj){ Obj.style.backgroundColor = mouseOverColor; Obj.style.cursor = "hand"; } /* 滑鼠游標離開時的顏色 */ function mOut(Obj){ Obj.style.backgroundColor = mouseOutColor; } /* 滑鼠游標按下時的顏色 */ function mDown(Obj){ Obj.style.backgroundColor = mouseDownColor; } --> </script> </head> <body> <!-- 利用滑鼠事件去製造相對應的功能 onmousedown 當滑鼠按下時的事件 onmouseover 當滑鼠指標與物件重疊時的事件 onmouseout 當滑鼠指標離開物件時的事件 --> <table width="200" border="1"> <tr> <td onmousedown="mDown(this)" onmouseover="mOver(this)" onmouseout="mOut(this)"> </td> </tr> </table> </body> </html>
2007-07-03
ASP網頁設計
由於為了幫朋友寫一個人員管理程式,最近開始重新學習寫ASP了,為什麼要用ASP呢?ASP的系統哪麼不穩,而且又常當機,但是沒辦法的是架設的平台只有ASP而已,連 SQL Server 都沒有,只好透過 ODBC 去處理 Access 資料庫的問題了。
在開始幫朋友撰寫程式之前,我找了一個類似的題目做練習,”無線電修復記錄管理系統”這個系統雖然很小,但對於系統中的細節可是非常注重,而且為了分擔 Server 負擔我用了很多 JavaScript 去運算資料的處理,也再次複習了 JavaScript 的運用。
開發工具是用 Dreamweaver 8 ,這是一個很好用的工具,但就像朋友所說的,這個工具會讓自己感覺像一個不會寫網頁的麻瓜,到現在關於 ASP 的語法和架構我還是不是很了解,這真是糟糕的一件事,也就是說沒有 Dreamweaver 8 我就沒辦法寫ASP了,對於很多其他的功能要自己去寫也不知道該怎麼寫,但為了開發一個簡易的管理程式來說,這已經很夠了。
在開始幫朋友撰寫程式之前,我找了一個類似的題目做練習,”無線電修復記錄管理系統”這個系統雖然很小,但對於系統中的細節可是非常注重,而且為了分擔 Server 負擔我用了很多 JavaScript 去運算資料的處理,也再次複習了 JavaScript 的運用。
開發工具是用 Dreamweaver 8 ,這是一個很好用的工具,但就像朋友所說的,這個工具會讓自己感覺像一個不會寫網頁的麻瓜,到現在關於 ASP 的語法和架構我還是不是很了解,這真是糟糕的一件事,也就是說沒有 Dreamweaver 8 我就沒辦法寫ASP了,對於很多其他的功能要自己去寫也不知道該怎麼寫,但為了開發一個簡易的管理程式來說,這已經很夠了。
2007-06-06
數獨(sudoku)程式寫作
這幾天無修室裡有許多人都在解數獨,李昂、祐助、彥良當然還有我,以前去參加程式競賽時也有數獨的題目,當時沒有寫出來心中有點遺憾,所以又再次的想去寫程式了,也好久沒讓大腦動一動了。
只靠筆記本來撰寫JavaScript和Internet Explorer來除錯,林易泉老師常說,寫程式最好還是用筆記本,不要靠一些輔助工具,但還真是有難度的說,光是除錯就花了不少時間了,還好有做排版要不然根本不知道錯在那裡,排版上也是辛苦的很,tab的寬度又太大,只能一直按空白鍵來做排版了,html 的撰寫也只能靠自己慢慢寫了,要是有撰寫工具該有多好,以前只要專心去想流程就好了,剩下的排版和除錯電腦會輔助你完成,現在還要自己去找流程以外的錯誤,Internet Explorer給的錯誤訊息又那麼的不明確,訊息行數常常都落差幾百行,有等於沒有。
最後還是寫出來了,已經可以解出較困難的題目了,運算時間也很快,只是空間的使用還需要修改一下,要將部分的INT變數改為Boolean變數以節省空間和加快邏輯運算,花了快三天的時間才完成撰寫,這比我預計的時間要慢很多,這種運算型的題目頂多花一天就很夠了!看來少了工具真的差很多。
SUDOKU.html 2007.06.03
SUDOKU_2.html 2011.05.23
只靠筆記本來撰寫JavaScript和Internet Explorer來除錯,林易泉老師常說,寫程式最好還是用筆記本,不要靠一些輔助工具,但還真是有難度的說,光是除錯就花了不少時間了,還好有做排版要不然根本不知道錯在那裡,排版上也是辛苦的很,tab的寬度又太大,只能一直按空白鍵來做排版了,html 的撰寫也只能靠自己慢慢寫了,要是有撰寫工具該有多好,以前只要專心去想流程就好了,剩下的排版和除錯電腦會輔助你完成,現在還要自己去找流程以外的錯誤,Internet Explorer給的錯誤訊息又那麼的不明確,訊息行數常常都落差幾百行,有等於沒有。
最後還是寫出來了,已經可以解出較困難的題目了,運算時間也很快,只是空間的使用還需要修改一下,要將部分的INT變數改為Boolean變數以節省空間和加快邏輯運算,花了快三天的時間才完成撰寫,這比我預計的時間要慢很多,這種運算型的題目頂多花一天就很夠了!看來少了工具真的差很多。
SUDOKU.html 2007.06.03
SUDOKU_2.html 2011.05.23