麻辣家族討論版版's Archiver

小誌 發表於 2010-5-14 17:35

(PHP+IIS+MsSQL教學第15篇) 資料的讀取與輸出 中篇

[color=DarkOrange][size=5][b]資料輸出[/b][/size][/color]
在前面章節中,要輸出資料到網頁畫面中,筆者使用了echo()函數,可是筆者又使用了很多不同的格式,您可能弄得一團霧水,所以本章節將說明一下,又,除了echo()函數可輸出資料到網頁畫面中外,還有幾個函數也有資料輸出的功能,這些函數我們也要認識一下。


[color=Green][size=4][b]echo()函數[/b][/size][/color]
echo()函數負責將字串資訊輸出至使用者端,也可與HTML標示混合使用,標準格式如下:
標準echo()函數格式[code]echo ( string arg1 [, string argn...]); [/code]例如:[code]<?
echo (“這是由PHP輸出的文字”);
?>[/code]看到了吧!標準的echo()函數用法是將字串內容用一組括號包起來,而要輸出的字串再用一對雙引號括起來,因為echo()函數是用來輸出字串資料的。

好累喔!又是括號又是雙引號的,嫌麻煩ㄚ,那好,我們把最外面的括號拿掉,這樣也行:[code]<?
echo “這是由PHP輸出的文字”;
?>[/code]可是,我有特定的變數值要跟字串一起輸出耶!沒關係!我們用「.」小黑點把它連起來,「.」小黑點前後要加空格(space)喔!您不用擔心這個空格,echo()函數在輸出資料時會忽略掉這些空格:[code]<?
$x="PHP";
echo "這是由" . $x . "輸出的文字";
?>[/code]您又嫌麻煩了喔!沒關係!把「.」小黑點拿掉吧!將變數跟字串全部放在雙引號中就好:[code]<?
$x="PHP";
echo "這是由$x 輸出的文字";
?>[/code]在上例中,變數的$字元前可以不加空格,但是變數名稱後要加個空格,不然PHP會把「$x輸出的文字」當成是一個變數,而造成程式錯誤,不過,這個空格echo()函數在輸出資料時不會忽略掉,會拔它當成是字串的內容。

那我要同時印出變數名稱跟變數值時該如何做?要印出變數名稱則必須於變數的「$」之前加上反斜線「\」,原因在於「$」為一個脫逸字元,用來識別變數:[code]<?
$x="PHP";
echo " $x ";   //印出變數值”PHP”
echo " \$x ";  //印出變數名稱”$x”
?>[/code]若要將HTML標籤加入echo()函數的輸出資料時,因為HTML標籤的屬性設定值多會以雙引號括起來,而這個雙引號又是PHP的脫逸字元之一,所以,千萬別忘了在「”」之前加上反斜線「\」:[code]<html>
<head>
<title>ex05_07</title>
</head>
<body>
大家來學PHP
<hr>
今天是:
<?echo "<font color=\"#FF0000\">" . date("Y年m月j日");?>
</body>
</html>[/code]上例執行結果如下圖所示,我們可以很清楚的看到PHP網頁執行後的畫面,我們利用『echo()』方法輸出了一個日期資料,而這個這個日期字串我們還加上了HTML標籤「<font color="#FF0000">」來設定它的文字顏色,問題是標籤內使用了雙引號,在「”」之前加上再加上反斜線「\」。
[attach]407[/attach]

如果我喜歡將不會變動的網頁資料也利用echo()函數來編寫,可不可以呢?當然也可以!但是,這樣就變成編寫一支完整的PHP程式了,所以全部的敘述都必須放在 『<? 』與『?>』之中,同時,所有的HTML標籤都必須寫在雙引號 『 " 』之中:[code]<?
echo "<html>";
echo "<head>";
echo "<title>ex05_08</title>";
echo "</head>";
echo "<body>";
echo "大家來學PHP";
echo "<hr>";
echo "今天是:";
echo "<font color=\"#FF0000\">" . date("Y年m月j日");
echo "</body>";
echo "</html>";
?>[/code]上兩個範例的寫法,其結果是相同的,筆者個人比較喜歡第一種HTML標籤資料混合寫的方式,至少不用打那麼多字,不過,有前輩指出,HTML標籤資料混合寫的方式在執行效率上較差,因為系統會在HTML解析與PHP Engine持續切換,如何在開發時間與系統執行效率間取捨就看您囉!



[color=Sienna]簡化echo()函數敘述[/color]
在前面幾個章節,筆者都沒有使用簡化的輸出敘述,它的用法類似ASP的「<%=XXX%>」敘述寫法,例如:[code]<?echo date("Y年m月j日");?>
<?=date("Y年m月j日")?>[/code]上例的兩行程式敘述執行結果都是一樣地,後者似乎比較簡明對吧!但是,簡化的「<?=XXX?>」 敘述只能在單行敘述能用喔!在敘述區塊中是不能用的,例如下例:[code]<?
echo "大家來學PHP";
echo "<hr>";
="今天是:"
echo "<font color=\"#FF0000\">" . date("Y年m月j日");
?>[/code]如果將「="今天是:"」這行敘述獨立用一組「<? ?>」括起來就可以了:[code]<?
echo "大家來學PHP";
echo "<hr>";
?>
<?="今天是:"?>
<?
echo "<font color=\"#FF0000\">" . date("Y年m月j日");
?>[/code]哈!這樣好像有點畫蛇添足!筆者建議:在程式區塊中作輸出就使用完整的echo()函數敘述,若是在與HTML標籤資料混合的場合才使用「<?=XXX?>」的敘述寫法。

小誌 發表於 2010-5-14 17:39

[color=green][size=4][b]print() 函數[/b][/size][/color]
print():也是用來輸出資料的,用法也如同echo()一般:[code]<?
print "大家來學PHP";
print "<hr>";
?>
<?="今天是:"?>
<?
print "<font color=\"#FF0000\">" . date("Y年m月j日");
?>[/code]print()雖然可以將資料輸出到網頁畫面中,但echo()可以利用「,」逗號來合併列印多項資料,print()卻做不到:[code]<?
$x="我愛";
$y="PHP";
echo $x . $y; //印出'我愛php'
echo $x,"PHP"; //印出'我愛php'
print $x . $y; //印出'我愛php'
print $x,$y;  //錯誤,print()不認識','逗號
?>[/code]以上例來看,print()似乎不如echo()有用,事實不然,print()有它特別的作用,echo()只管將資料做輸出的動作,資料有沒有正確的輸出,echo()並不會告訴您,而print()在做資料輸出的動作後,會有回傳值,通知我們資料是否已正確的輸出:[code]<?
$x="我愛";
$y="PHP";
$test=print $x . $y; //印出'我愛php'
print $test; //資料輸出成功回傳1
?>[/code][color=green][size=4][b]printf()函數[/b][/size][/color]
printf()函數可根據我們的格式設定來輸出格式化的字串,printf()函數跟print()函數不同,資料輸出後不會有回傳值:
printf()函數格式[code]void printf ( string format [, mixed args])[/code]上式中:「format」為格式設定,例如:[code]<?
$age="20 歲";
printf("%d" ,"$age"); //輸出20
?>[/code]上例中,我們的格式設定為「%d」乃是將字串「"20 歲"」格式化為十進制資料而輸出「20」。
例如:輸出小數點後3位小數的浮點指數[code]<?
$age="20 歲";
printf("%.3e" ,"$age"); //輸出2.00e+1
?>[/code]格式化的字串中也可以包含我們要顯示的文字,例如:[code]<?
$age="20 歲";
printf("我%.3e歲" ,"$age"); //我2.00e+1歲  
?>[/code]下表為格式化的可用資料類型:
[table]
[tr][td=1,1,73][p=30, 2, center][color=#000000][size=2][font=細明體]類型[/font][/size][/color][/p][/td][td=1,1,408][p=30, 2, center][color=#000000][size=2][font=細明體]說明[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,73][p=30, 2, center][font=Courier New][color=#000000][size=2]%[/size][/color][/font][/p][/td][td=1,1,408][p=30, 2, left][color=#000000][size=2][font=細明體]格式化的前置符號[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,73][p=30, 2, center][font=Courier New][color=#000000][size=2]c[/size][/color][/font][/p][/td][td=1,1,408][p=30, 2, left][color=#000000][size=2][font=細明體]字元[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,73][p=30, 2, center][font=Courier New][color=#000000][size=2]s[/size][/color][/font][/p][/td][td=1,1,408][p=30, 2, left][color=#000000][size=2][font=細明體]字串[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,73][p=30, 2, center][font=Courier New][color=#000000][size=2]d[/size][/color][/font][/p][/td][td=1,1,408][p=30, 2, left][color=#000000][size=2][font=細明體]十進制整數[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,73][p=30, 2, center][font=Courier New][color=#000000][size=2]b[/size][/color][/font][/p][/td][td=1,1,408][p=30, 2, left][color=#000000][size=2][font=細明體]二進制整數[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,73][p=30, 2, center][font=Courier New][color=#000000][size=2]o[/size][/color][/font][/p][/td][td=1,1,408][p=30, 2, left][color=#000000][size=2][font=細明體]八二進制整數[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,73][p=30, 2, center][font=Courier New][color=#000000][size=2]x[/size][/color][/font][/p][/td][td=1,1,408][p=30, 2, left][color=#000000][size=2][font=細明體]小寫的十六進制整數[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,73][p=30, 2, center][font=Courier New][color=#000000][size=2]X[/size][/color][/font][/p][/td][td=1,1,408][p=30, 2, left][color=#000000][size=2][font=細明體]大寫的十六進制整數[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,73][p=30, 2, center][font=Courier New][color=#000000][size=2]f[/size][/color][/font][/p][/td][td=1,1,408][p=30, 2, left][color=#000000][size=2][font=細明體]浮點數[/font][/size][/color][/p][/td][/tr]
[tr][td=1,1,73][p=30, 2, center][font=Courier New][color=#000000][size=2]e[/size][/color][/font][/p][/td][td=1,1,408][p=30, 2, left][font=細明體][size=2][color=#000000]指數[/color][/size][/font][/p][/td][/tr]
[/table]
printf()函數亦可用於置換同時格式化,例如:[code]<?
$name="居易";
$tall="170";
$me="我的名字是 %s ,身高 %X 公分";
printf($me , $name , $tall);
//輸出:我的名字是 居易,身高 AA 公分  
?>[/code]

小誌 發表於 2010-5-14 17:44

[color=DarkOrange][size=5][b]檔頭資訊[/b][/size][/color]
檔頭資訊:網頁文件中被<HEAD>…</HEAD>標籤包括起來的文件資訊,常見的有文件抬頭(被<TITLE>…</TITLE>標籤包括起來)以及文件的類型、所使用的編碼字集等:[code]<html>
<head>
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<title>新增網頁1</title>
</head>
<body>
網頁的顯示內容
</body>
</html>[/code]這些檔頭資訊我們都可以透過PHP的「header()」函數來做輸出:
header()函數格式[code]int header ( string string [, bool replace [, int http_response_code]]) [/code]也就是:[code]header(“網頁資訊名稱: 資訊內容”);[/code][color=Green][size=4][b]網頁轉向[/b][/size][/color]
網頁資訊「Location」可轉向其他網頁或網址,這個方法也就所謂的『自動鏈結』:[code]header(“Locatiom: 欲前往的網址”);[/code]例如:[code]<?
//載入網頁後,自動轉接鍊結至與主網頁同一目錄中的message.htm網頁
header("Location: message.htm");
//載入主網頁後,自動轉接鍊結至主網頁上一層目錄中的ex04_01.asp網頁
header("Location: ../ch4/ex04_01.php");
//載入主網頁後,自動轉接鍊結至與另一網址中的網頁
header("Location: http://www.twbts.com");
?>[/code]header()函數只可用在尚未有任何資料輸出至瀏覽器之前才可呼叫。尚未有任何資料輸出至瀏覽器之前才可呼叫?這是什麼意思?就是在程式開端符號『<?』之前都不能有任何資料啦!如下例:[code]<html><body>
<%
Response.Redirect "message.htm"
%>
</body>
</html>[/code]上例結果將會獲得下圖的錯誤訊息:
[attach]409[/attach]


[color=Green][size=4][b]網頁的時效[/b][/size][/color]
網頁資訊「Expires」可用來設定網頁的有效期限,當我們網頁會常常更新,擔心瀏覽者會讀到Proxy或cache的舊網頁資料時,我們就可以設定「Expires」:[code]<?
header("Expires: " . date("D, d M Y H:i:s") . "GMT");
?>
<html><body>
歡迎光臨!!
</body>
</html>[/code]當我們檢視瀏覽器的暫存目錄時,您可以發現範例網頁已被設定了有效期限:
[attach]410[/attach]

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供