2008年7月23日 星期三

sprintf 和 printf 之用法

sprintf只格式化不印出來

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初探(四)範例

程式碼

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日 星期五

按下submit出現確認視窗



input type="submit" value="送出" onclick="return confirm('yes or no');"

2008年5月21日 星期三

在PHP使用header

使用header("Location:");前

先去php.ini

把output_buffering改成On 即可

2008年4月29日 星期二

徹底解決phpmyadmin亂碼問題

UTF8的中文編碼是解決中文的最後一張王牌

所以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



再進入上面該資料表的管理界面,要更改資料表的編碼



進入管理



也是一樣把latin1_swedish_ci修改成utf8_general_ci

然後進入資料庫的資料表列表,要改資料庫的編碼



也是進入管理把改成default-character-set=UTF8



這樣一來!也可以用匯入的功能!也不會有亂碼出現囉!

記得匯入的文件也是要編成UTF8

2008年4月21日 星期一

表格中按tab的順序

< input type="text" tabindex="1">



在表格中關閉輸入法

< input type="text" style="ime-mode:disabled">

詭異的沒填 or 0

在PHP中在< input type="text" > 表單中要判斷0 or 沒填

要使用is_numeric($_POST['iii'])

is_numeric是判斷變數是否為數字或數字的字串

2008年4月17日 星期四

連動的下拉式選單

SQL 顯示結果不重複

SELECT DISTINCT A,B FROM dataname

A+B的排列不重複

2008年4月8日 星期二

解決該死的中文擷取亂碼問題

建議PHP版本4.3.0以上

使用mb_substr(字元,開始位置,擷取長度,中文編碼)

例如:
$str = "1236測試測試569dfdfd中文中文"
mb_substr($str,0,20,"big5");

開啟此函示,進入php.ini
找尋;extension=php_mbstring.dll
把前面分號去掉即可

2008年3月21日 星期五

2008年3月18日 星期二

按下按鈕的確定視窗

2008年3月13日 星期四

主視窗重新整理,子視窗關閉

setTimeout("self.close();",0)
可以設定自動執行javascript程式
例如setTimeout("winodw.open('index.html');",0)

表格鎖定、解開之用法

原始檔案