標題:
[教學]
(PHP+IIS+MsSQL教學第15篇) 資料的讀取與輸出 中篇
[打印本頁]
作者:
小誌
時間:
2010-5-14 17:35
標題:
(PHP+IIS+MsSQL教學第15篇) 資料的讀取與輸出 中篇
資料輸出
在前面章節中,要輸出資料到網頁畫面中,筆者使用了echo()函數,可是筆者又使用了很多不同的格式,您可能弄得一團霧水,所以本章節將說明一下,又,除了echo()函數可輸出資料到網頁畫面中外,還有幾個函數也有資料輸出的功能,這些函數我們也要認識一下。
echo()函數
echo()函數負責將字串資訊輸出至使用者端,也可與HTML標示混合使用,標準格式如下:
標準echo()函數格式
echo ( string arg1 [, string argn...]);
複製代碼
例如:
<?
echo (“這是由PHP輸出的文字”);
?>
複製代碼
看到了吧!標準的echo()函數用法是將字串內容用一組括號包起來,而要輸出的字串再用一對雙引號括起來,因為echo()函數是用來輸出字串資料的。
好累喔!又是括號又是雙引號的,嫌麻煩ㄚ,那好,我們把最外面的括號拿掉,這樣也行:
<?
echo “這是由PHP輸出的文字”;
?>
複製代碼
可是,我有特定的變數值要跟字串一起輸出耶!沒關係!我們用「.」小黑點把它連起來,「.」小黑點前後要加空格(space)喔!您不用擔心這個空格,echo()函數在輸出資料時會忽略掉這些空格:
<?
$x="PHP";
echo "這是由" . $x . "輸出的文字";
?>
複製代碼
您又嫌麻煩了喔!沒關係!把「.」小黑點拿掉吧!將變數跟字串全部放在雙引號中就好:
<?
$x="PHP";
echo "這是由$x 輸出的文字";
?>
複製代碼
在上例中,變數的$字元前可以不加空格,但是變數名稱後要加個空格,不然PHP會把「$x輸出的文字」當成是一個變數,而造成程式錯誤,不過,這個空格echo()函數在輸出資料時不會忽略掉,會拔它當成是字串的內容。
那我要同時印出變數名稱跟變數值時該如何做?要印出變數名稱則必須於變數的「$」之前加上反斜線「\」,原因在於「$」為一個脫逸字元,用來識別變數:
<?
$x="PHP";
echo " $x "; //印出變數值”PHP”
echo " \$x "; //印出變數名稱”$x”
?>
複製代碼
若要將HTML標籤加入echo()函數的輸出資料時,因為HTML標籤的屬性設定值多會以雙引號括起來,而這個雙引號又是PHP的脫逸字元之一,所以,千萬別忘了在「”」之前加上反斜線「\」:
<html>
<head>
<title>ex05_07</title>
</head>
<body>
大家來學PHP
<hr>
今天是:
<?echo "<font color=\"#FF0000\">" . date("Y年m月j日");?>
</body>
</html>
複製代碼
上例執行結果如下圖所示,我們可以很清楚的看到PHP網頁執行後的畫面,我們利用『echo()』方法輸出了一個日期資料,而這個這個日期字串我們還加上了HTML標籤「<font color="#FF0000">」來設定它的文字顏色,問題是標籤內使用了雙引號,在「”」之前加上再加上反斜線「\」。
[attach]407[/attach]
如果我喜歡將不會變動的網頁資料也利用echo()函數來編寫,可不可以呢?當然也可以!但是,這樣就變成編寫一支完整的PHP程式了,所以全部的敘述都必須放在 『<? 』與『?>』之中,同時,所有的HTML標籤都必須寫在雙引號 『 " 』之中:
<?
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>";
?>
複製代碼
上兩個範例的寫法,其結果是相同的,筆者個人比較喜歡第一種HTML標籤資料混合寫的方式,至少不用打那麼多字,不過,有前輩指出,HTML標籤資料混合寫的方式在執行效率上較差,因為系統會在HTML解析與PHP Engine持續切換,如何在開發時間與系統執行效率間取捨就看您囉!
簡化echo()函數敘述
在前面幾個章節,筆者都沒有使用簡化的輸出敘述,它的用法類似ASP的「<%=XXX%>」敘述寫法,例如:
<?echo date("Y年m月j日");?>
<?=date("Y年m月j日")?>
複製代碼
上例的兩行程式敘述執行結果都是一樣地,後者似乎比較簡明對吧!但是,簡化的「<?=XXX?>」 敘述只能在單行敘述能用喔!在敘述區塊中是不能用的,例如下例:
<?
echo "大家來學PHP";
echo "<hr>";
="今天是:"
echo "<font color=\"#FF0000\">" . date("Y年m月j日");
?>
複製代碼
如果將「="今天是:"」這行敘述獨立用一組「<? ?>」括起來就可以了:
<?
echo "大家來學PHP";
echo "<hr>";
?>
<?="今天是:"?>
<?
echo "<font color=\"#FF0000\">" . date("Y年m月j日");
?>
複製代碼
哈!這樣好像有點畫蛇添足!筆者建議:在程式區塊中作輸出就使用完整的echo()函數敘述,若是在與HTML標籤資料混合的場合才使用「<?=XXX?>」的敘述寫法。
作者:
小誌
時間:
2010-5-14 17:39
print() 函數
print():也是用來輸出資料的,用法也如同echo()一般:
<?
print "大家來學PHP";
print "<hr>";
?>
<?="今天是:"?>
<?
print "<font color=\"#FF0000\">" . date("Y年m月j日");
?>
複製代碼
print()雖然可以將資料輸出到網頁畫面中,但echo()可以利用「,」逗號來合併列印多項資料,print()卻做不到:
<?
$x="我愛";
$y="PHP";
echo $x . $y; //印出'我愛php'
echo $x,"PHP"; //印出'我愛php'
print $x . $y; //印出'我愛php'
print $x,$y; //錯誤,print()不認識','逗號
?>
複製代碼
以上例來看,print()似乎不如echo()有用,事實不然,print()有它特別的作用,echo()只管將資料做輸出的動作,資料有沒有正確的輸出,echo()並不會告訴您,而print()在做資料輸出的動作後,會有回傳值,通知我們資料是否已正確的輸出:
<?
$x="我愛";
$y="PHP";
$test=print $x . $y; //印出'我愛php'
print $test; //資料輸出成功回傳1
?>
複製代碼
printf()函數
printf()函數可根據我們的格式設定來輸出格式化的字串,printf()函數跟print()函數不同,資料輸出後不會有回傳值:
printf()函數格式
void printf ( string format [, mixed args])
複製代碼
上式中:「format」為格式設定,例如:
<?
$age="20 歲";
printf("%d" ,"$age"); //輸出20
?>
複製代碼
上例中,我們的格式設定為「%d」乃是將字串「"20 歲"」格式化為十進制資料而輸出「20」。
例如:輸出小數點後3位小數的浮點指數
<?
$age="20 歲";
printf("%.3e" ,"$age"); //輸出2.00e+1
?>
複製代碼
格式化的字串中也可以包含我們要顯示的文字,例如:
<?
$age="20 歲";
printf("我%.3e歲" ,"$age"); //我2.00e+1歲
?>
複製代碼
下表為格式化的可用資料類型:
類型
說明
%
格式化的前置符號
c
字元
s
字串
d
十進制整數
b
二進制整數
o
八二進制整數
x
小寫的十六進制整數
X
大寫的十六進制整數
f
浮點數
e
指數
printf()函數亦可用於置換同時格式化,例如:
<?
$name="居易";
$tall="170";
$me="我的名字是 %s ,身高 %X 公分";
printf($me , $name , $tall);
//輸出:我的名字是 居易,身高 AA 公分
?>
複製代碼
作者:
小誌
時間:
2010-5-14 17:44
檔頭資訊
檔頭資訊:網頁文件中被<HEAD>…</HEAD>標籤包括起來的文件資訊,常見的有文件抬頭(被<TITLE>…</TITLE>標籤包括起來)以及文件的類型、所使用的編碼字集等:
<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>
複製代碼
這些檔頭資訊我們都可以透過PHP的「header()」函數來做輸出:
header()函數格式
int header ( string string [, bool replace [, int http_response_code]])
複製代碼
也就是:
header(“網頁資訊名稱: 資訊內容”);
複製代碼
網頁轉向
網頁資訊「Location」可轉向其他網頁或網址,這個方法也就所謂的『自動鏈結』:
header(“Locatiom: 欲前往的網址”);
複製代碼
例如:
<?
//載入網頁後,自動轉接鍊結至與主網頁同一目錄中的message.htm網頁
header("Location: message.htm");
//載入主網頁後,自動轉接鍊結至主網頁上一層目錄中的ex04_01.asp網頁
header("Location: ../ch4/ex04_01.php");
//載入主網頁後,自動轉接鍊結至與另一網址中的網頁
header("Location: http://www.twbts.com");
?>
複製代碼
header()函數只可用在尚未有任何資料輸出至瀏覽器之前才可呼叫。尚未有任何資料輸出至瀏覽器之前才可呼叫?這是什麼意思?就是在程式開端符號『<?』之前都不能有任何資料啦!如下例:
<html><body>
<%
Response.Redirect "message.htm"
%>
</body>
</html>
複製代碼
上例結果將會獲得下圖的錯誤訊息:
[attach]409[/attach]
網頁的時效
網頁資訊「Expires」可用來設定網頁的有效期限,當我們網頁會常常更新,擔心瀏覽者會讀到Proxy或cache的舊網頁資料時,我們就可以設定「Expires」:
<?
header("Expires: " . date("D, d M Y H:i:s") . "GMT");
?>
<html><body>
歡迎光臨!!
</body>
</html>
複製代碼
當我們檢視瀏覽器的暫存目錄時,您可以發現範例網頁已被設定了有效期限:
[attach]410[/attach]
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)