2008年7月23日 星期三
sprintf 和 printf 之用法
printf格式化後印出來
格式為printf("abcde%'a-20s fgh %01.2f ijk",$a,$b)
從%開始依序為
說明使用何種字元來填塞結果成為適當的字串長度,它可以是個空白字元或是 0(字元 0),
它預設上是使用空白來填塞。要替換填塞字元,可以在字首前面加上單引號( ' )來指定。
指定對齊方式,說明結果應該要靠左對齊還是靠右對齊,預設是靠右對齊,可以使用字元 "-" 來使它靠左對齊。
指定寬度,說明這個轉換要產生出多少(最少)字元。
指定精準度,說明要顯示到小數點第幾位,這個選項對於浮點數以外的型態沒有影響。
指定型態說明要將參數看待成何種型態,可能的型態有 :
% - 百分比字元,不需要參數
b - 將參數看待成整數,而且結果為二進制的值
c - 將參數看待成整數,而且結果為此ASCII值的字元
d - 將參數看待成整數,而且結果為十進位的數值
f - 將參數看待成浮點數,而且結果為浮點數
o - 將參數看待成整數,而且結果為八進制的數值
s - 將參數和結果都看待成字串
x - 將參數看待成整數,而且結果為十六進制的數值(小寫字母)
X - 將參數看待成整數,而且結果為十六進制的數值(大寫字母)
範例:
$a=13.1
printf("%010.2f",$a);
結果:0000000013.10
$b=abcd
printf("%'_-10s",$b);
結果:abcd______
備註:替代字元通常是空格,但列印出來卻無空格,是因為列印在網頁上會把空格省略
所以要加str_replace()函示,把空格轉成& nbsp;
以上面的範例改成str_replace(' ','& nbsp;',sprintf("%10s",$b));即可
2008年6月25日 星期三
XAJAX初探(三)執行
現在要進入重點了,就是該如何執行與發佈
就呼叫副程式一樣
function myFunction($i,$j....) {
但要先創建一個xajaxResponse物件,這就是發佈所需要的
$objResponse = new xajaxResponse();
}
前面提到有個函示可以把表格內的所有數值傳回來
xajax_myFunction(xajax.getFormValues('myForm'));
它是陣列的形式回傳
function myFunction($aFormValues) {
$step2 = $aFormValues['step2'];
來承接表格內所有的數值
}
其他就像寫一般的php程式一樣
等到要輸入、發佈的時候,XAJAX有提供幾個函示
這邊先提供基本的概念,函示的介紹等下一章節
因為XAJAX講求的是及時,所以當事件觸發的時候,就呼叫副程式做運算
然後及時把結果展現在現有的網頁上,所以得規定在展現網頁上的哪一個部位
就用id來設定
<div id="output">(展現結果)</div>
<span id="output">(展現結果)</span>
<div>和<span>的差別在於div會跳行span不會
然後在副程式用
function myFunction($aFormValues) {
$objResponse->addAssign("output","innerHTML",$val);
$objResponse->addAssign是一個函示就是把變數$val所帶的值,插入到表格裡面id叫做output的中間
回傳xajaxResponse物件
return $objResponse;
XAJAX初探(二)使用
雖然XAJAX已經盡力把複雜的AJAX改成熟悉PHP的寫法
但在即時處理上,還是得靠JAVASCRIPT來協助,就是著名的【觸發事件】
先舉各常常用到的事件
觸發事件像是踩到地雷就爆炸的情形一樣
只是在這邊,觸發事件有很多情況
以上面表格為例
當希望在step2的表格內,能立即做反應,就必須考慮到有幾種事件是會影響到step 2
第一種:直接用滑鼠點選step 2,所以就必須使用<input type="text" name="step2" onclick="">
第二種:先選step 1,然後用tab鍵移到step 2,就必須使用<input type="text" name="step2" onfocus="">
第三種:輸入完step2,使用tab鍵移到step 3或者用滑鼠點開,就必須使用<input type="text" name="step2" onblur="">
當然以下還有很多的觸發事件,例如:onchange=""
單看要在什麼時候呼叫程式立即做處理
決定好事件之後,就要開始呼叫副程式來處理,我們剛剛輸入的數值,語法是
<input type="text" name="step2" onclick="xajax_myFunction(xajax.getFormValues('myForm'));" >
我們拆開來看onclick=""是事件類別
xajax_myFunction()是呼叫剛剛註冊好的副程式($xajax->registerFunction("myFunction");)
當然可以取別的名字,只要前面註冊就OK
xajax.getFormValues('myForm')這個就是傳回表格(myForm)裡面所有值
所以記得在寫<form method="POST" action="" name="myForm">給它一個名字
xajax_myFunction(xajax.getFormValues('myForm')); 請把它看成呼叫一段副程式
當然也可以只傳變數xajax_myFunction($i,$j);
如果一個事件不過癮,可以多加幾個
<input type="text" name="step2" onclick="xajax_myFunction(xajax.getFormValues('myForm'));" onBlur="xajax_myFunction3($i,$j'');" onFocus="xajax_myFunction(xajax.getFormValues('myForm'),$i,$j);">
xajax初探(一)安裝
目前穩定版本為0.2.5
下載下來,解壓縮後,在程式所在目錄建立目錄,例如xajax
在程式開頭引入xajax函式
require_once( 'xajax/xajax.inc.php' );
———————————————————————————————————————————————
然後底下建立xajax物件
$xajax=new xajax();
———————————————————————————————————————————————
提供額外的除錯功能,決定是否要使用 xajax debug
$xajax->debugOn();
每一步驟,會用alert方式跳出來,可以省略
———————————————————————————————————————————————
註冊在php中所要呼叫的函式
$xajax->registerFunction("myFunction");
xajax就是省略javascript程式碼,看似直接用PHP的架構寫出AJAX
而這段語法就是呼叫PHP的副程式一般,所以底下會有
function myFunction() {
程式碼
}
可以註冊很多個$xajax->registerFunction("functionname1");
———————————————————————————————————————————————
處理呼叫
$xajax->processRequests();
———————————————————————————————————————————————
在<html><head>
中間填入
<!--產生xajax初始化所需的代碼-->
<?php $xajax->printJavascript('xajax/'); ?>
</head>
———————————————————————————————————————————————
所以綜合起來,如果要使用XAJAX的功能,必須有以下的步驟
require_once( 'xajax/xajax.inc.php' );
$xajax=new xajax();
$xajax->registerFunction("myFunction");
$xajax->processRequests();
<html><head>
<?php $xajax->printJavascript('xajax/'); ?>
</head>
額外一提,建議使用UTF-8,用big5會有意想不到的問題
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
2008年5月30日 星期五
2008年5月21日 星期三
2008年4月29日 星期二
徹底解決phpmyadmin亂碼問題
所以MYSQL跟PHP都以UTF8為主
但就出現一個問題,瀏覽phpmyadmin的時候就會出現亂碼
簡單的說phpmyadmin不管輸出、輸入、匯出、匯入都是以latin1為編碼原則
為什麼要以這個為主,我也不知道,但確實困擾我很久
所以,接下來的步驟總歸一句話就是把所有的latin1都改成UTF8
以windows環境,AppServ套件,是在/windows/my.ini 裡面
把default-character-set=latin1這行
改成default-character-set=UTF8 然後重開
接下來進入每個表單的結構,原本是latin1_swedish_ci修改成utf8_general_ci
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtsrDKFBJnrQIR6YfxJNneNTpSWwBjOrgGEW_eOKj_g-NTp_wSK29la9odYOZLDn17KEl4slmuWsHE-BYOD04CfxMtQ_sFkknydw5GcPS7UDf8Se_wzi5rFcZunl-llhWt4xnuJRX6vHY/s320/1.jpg)
再進入上面該資料表的管理界面,要更改資料表的編碼
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ5J0TWlhZ8mtzgTUpwfjjGlWhvICCCMr5uRQu1Mq-L7z4iCHGQFJOKzL7CVlAkxgMgLDaIE4K7CPguuueD9GtcQHh4OYt_9pwNq4uyZVYzgcBAY53I06ThKQXuAOy9u6J3CJjW7qoIkM/s320/4.jpg)
進入管理
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDX-ccoyGPd3zHiGCexHgUxS0B9PuHiFKB9MtbtiwjmZfap47VhdK3sL_Ek3ez_A7JAQIvy5pqk3ZNz6xIKzXv1a-8k5ypcHSb_rbc6fOJDWjeEn0M4iVdZKXLI2034FZwu6wgN9s22C8/s320/3.jpg)
也是一樣把latin1_swedish_ci修改成utf8_general_ci
然後進入資料庫的資料表列表,要改資料庫的編碼
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8q7FZEhBzN4nSuJZUxxJHG9Jvmr6jKtVupADuFSN1DwZzQHp-VtxFwU5O4xpgTA4AXc9ECdWB2fXuF6Vw1hE936y_DhQZ7rWWuSUfUjmlxfhRmNR6JSlKkS3bII3xgeMpcaPFpVNt9JQ/s320/5.jpg)
也是進入管理把改成default-character-set=UTF8
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHqZ9T2uIedmjdNluG_agcMrLR0sfWmERQDHKcW2_XusOU4-fPH9uxlGcVzqNPd8Ab2ADvWyWLK7f2PRTmodtPIF1rZwu3vFv3WC5qCZmYfwwvNp-CUoonVCiZApeB72slPWyVLRpXfUg/s320/2.jpg)
這樣一來!也可以用匯入的功能!也不會有亂碼出現囉!
記得匯入的文件也是要編成UTF8
2008年4月21日 星期一
詭異的沒填 or 0
要使用is_numeric($_POST['iii'])
is_numeric是判斷變數是否為數字或數字的字串
2008年4月17日 星期四
2008年4月8日 星期二
解決該死的中文擷取亂碼問題
使用mb_substr(字元,開始位置,擷取長度,中文編碼)
例如:
$str = "1236測試測試569dfdfd中文中文"
mb_substr($str,0,20,"big5");
開啟此函示,進入php.ini
找尋;extension=php_mbstring.dll
把前面分號去掉即可
2008年3月21日 星期五
2008年3月13日 星期四
主視窗重新整理,子視窗關閉
可以設定自動執行javascript程式
例如setTimeout("winodw.open('index.html');",0)