引用檔案 Include

Download Report

Transcript 引用檔案 Include

PHP的由來
在古早古早的時候,也就是1994年。當時有個叫Rasmus Lerdorf的人,
他用Perl寫了一些後端的程式,記錄有哪些人看過他的線上履歷表。慢慢
地,一些網友對他所寫的程式碼產生興趣。於是,Rasmus Lerdorf就整理
這些程式碼,包裝成一個叫作 ”Personal Home Page”的工具。基於個人的
興趣,Rasmus Lerdorf又寫了一個腳本語言的核心引擎。然後,又加上了
能處理HTML表單輸入的工具,稱作 “Form Interpreter”簡稱FI。在1995年
完成的這個版本,當時稱作 “PHP FI”,也有人稱之為 ”PHP2”。
PHP/FI開發出來之後,受到網站開發者的極大的回響,使用PHP/FI來開發
網站程式的人越來越多。在1997年中的時候,PHP從Rasmus Lerdorf個人維
護的開發專案,轉變成一個重要的網站開發技術。PHP的開發與維護也轉由
一個由Rasmus Lerdorf本人和Andi Gutmans、Zeev Suraski、Stig Bakken、
Shane Cavaveo、以及Jim Winstead等人所組成的團隊來負責。在1998年6月
的時候,Zeev Suraski和Andi Gutmans改寫了PHP語言的解析器,並公佈這新
的版本,稱之為PHP3。
PHP簡介



PHP代表:超文本預處理器(PHP:
Hypertext Preprocessor)。
PHP是開放源碼的通用腳本語言,特別適
合用來開發網站程式,可以內嵌在HTML
碼。
PHP程式的原始碼是純文字,所以可以用
任何可處理純文字檔的文字編輯器,如:
記事本、vi、emac等,來撰寫PHP程式。
PHP基本語法




內嵌在HTML標籤中,使用
<?php php程式 ?> 或
<? php程式 ?> 或
<% php程式 %> 或
<script language=“php”>php程式</script>
標示 (ex6-2)
需要經由Apache Server轉譯後才可以動作
副檔名為 .php或 .php3
每個命令結尾需要加上;
PHP基本語法

程式註解,使用
// 表示單行註解
/* 中間文字是註解 */ 表示多行註解
PHP基本語法

輸出指令
echo() 與 print() (ex 6-4)
使用echo會比print略有效率。

PHP與HTML
嵌入HTML標籤中
在HTML標籤外
獨立存在
PHP資料型態





在PHP中,變數之前必需加$的符號
PHP的大小寫是有差別的,所以在使用變
數時,須注意大小寫是否一致
變數使用前不需要事先宣告
使用變數時被指定的值的型態就是變數的
型態
PHP共有 8 種資料型態
變數與常數
內定變數
在 PHP 執行時,有部份預設的變數可用,您可以執行
phpinfo( ) 以查看這些變數。例如:
SERVER_NAME:chensh.loxa.edu.tw
HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE
6.0; Windows NT 5.1; .NET CLR 1.1.4322)
SCRIPT_FILENAME:/home/chensh/php/A_4.php
變數與常數
• 如果 php.ini 中 register_globals 被設定為 on 的話,
上述的變數直接在前頭加上 $ 符號即可使用,例如:
$SERVER_NAME。
• 倘若 register_globals 被設定為 off(預設值)的話,
上述變數的讀取方法就不一樣了,它們被當作是
$_SERVER 陣列的一個元素,請用 $_SERVER['變數
名稱'] 的方式來讀取它,例如:
$_SERVER['SERVER_NAME']。
變數影響範圍
• 變數的影響範圍通常是 global,自啟用起,至該程式結束均
有效
• 在自定的函數中,變數的影響範圍是 local,只侷限在函數內
部。例: <?
$a = 1;
$b = 2;
function sum_test( ) {
return $a + $b;
}
echo sum_test( );
?>
執行結果為 0,因為 $a 與 $b 的影響範圍無法達到
sum_test( ) 內部。
變數影響範圍
• 若希望在自定函數內引用外部的變數,則使用關鍵字 global 宣告,或是
使用 global 變數陣列 $GLOBALS[ ]。
例:<?
$a = 1;
$b = 2;
function sum_test_1( ) {
global $a, $b;
return $a + $b;
}
function sum_test_2( ) {
return $GLOBALS[“a”] + $GLOBALS[“b”];
}
echo sum_test_1( );
echo sum_test_2( );
?>
sum_test_1( ) 與 sum_test_2( ) 的執行結果均為 3。
以變數為名的變數(Variable Variables)
在 PHP 中,變數的名稱也可以是變數,例如:
<?
$a = "hello";
$$a = "world";
echo $a . " " . $$a; // 輸出結果:hello world
echo $a . " " . ${$a}; // 輸出結果:hello world
echo $a . " " . $hello; // 輸出結果:hello world
?>
常數
在PHP中,常數的名稱一樣有大小寫之別,
但是前頭不必加上「$」字元,因此,若
將常數置於字串裡頭的話,將不會被系統
所辨識出來。
可以使用 define( ) 函數來自定常數。
__FILE__:/home/chensh/php/A_4.php
PHP_OS:FreeBSD
PHP_VERSION:4.3.3
PHP資料型態
名稱
型態
範例
Boolean
布林型態
$a=True;
Integer
Float
整數型態
浮點數型態
$a=10;
$a=1.2345;
String
Array
Object
字串型態
陣列型態
物件型態
$a=“Hello !!”
$a[0]=20;
$a=new Objectclass
Resource
外部資源
$a=mysql_connect();
Null
Null型態
$a=NULL;
Boolean布林型態



只有真(True)與假(False)兩種值
可以直接設定
$a=True;
$b=False;
其他型態轉換成布林型態
p.7-4
Integer整數型態
10進制,8進制(0)與16進制(0x)三種
 表示方法
[+|-] [0|0x] 數值
$a=123;(10進制)
$b=-456;(10進制)
$c=0123;(8進制相當於10進制的83)
$d=0x45;(16進制相當於10進制的69)
(ex7-1)

String型態
string 為字串型別。在 PHP 中有三種指定
字串的方法:雙引號(“)、單引號
(‘),以及所謂 heredoc 語法(<<<)。
String型態-雙引號




包含在雙引號裡頭的可以是一般文字字串,可以含有單引號
如果含有變數的話,會以該變數的值代入。
與 C、Perl 一樣,PHP 也允許以「\」代表跳脫(escape)字元,
在雙引號中加入具有特殊用途的符號,如:
\n:換行(newline)
\r:送出 CR(carriage)
\t:跳位(Tab)
\\:反斜線(backslash)
\$:錢字號(dollar sign)
\“:雙引號(double-quote)
\[0-7]{1,3}:八進位表示法的 regular expression
\x[0-9A-Fa-f]{1,2}:十六進位表示法的 regular expression
例:<?
$str_1 = ”I am here!“;
$str_2 = ”str_1 : $str_1“;
echo $str_2;
?>
輸出的結果將是:str_1 : I am here!,原先被包含在雙引號中的
變數($str_1)以其值代入了。
String型態-單引號




使用單引號要注意的是,在單引號中的變數不會
以變數值代入。
另外,可以被 escape 的字元只有兩個:\‘ 與 \\。
例:<?
$str_1 = 'I am here!';
$str_2 = 'str_1 : $str_1';
echo $str_2;
?>
輸出的結果將是:str_1 : $str_1,原先被包含在單
引號中的變數($str_1)不會被其值所取代。
String型態-heredoc synex



這種設定字串的方法只在 PHP4 提供,主要用於引用一整
段文字,如: <?
$a = “abc”;
$str = <<< CHENSH
中文“測試”有雙引號<br>
中文‘測試’ $a 有單引號與變數
CHENSH;
echo $str;
?>
輸出的 HTML 碼:
中文“測試”有雙引號<br>
中文‘測試’ abc 有單引號與變數
上述的 CHENSH 是用來標示文字段落起迄位置的
identifier,可自行命名。另外,結束的 identifier 一定要放
在該行的行首,否則將導致錯誤。
Array型態




array為陣列型別。
可以是二維、三維或者多維陣列,其中的元素也
很自由,可以是 string、integer 或者 double,甚至
是 array。
陣列由第 0 個元素開始配置。
例:
<?
$a[0] = 1234;
$b[0][] = 567.8;
$c = array(9, 10, 'A');
?>
Object型態
object 為物件型別。
 物件的使用上就比較麻煩了,要先宣告類別,甚至必須先
要有方法,方可使用物件。
 例:
<?
class foo {
function do_foo () {
echo "Doing foo.";
}
}
$bar = new foo;
$bar -> do_foo ();
?>
執行結果:
Doing foo.

型態轉換



您可以強迫將變數的型態轉換,例如:
<?
$a = 10; // $a is an integer
$b = (double)$a; // $b is an double
?>
當字串被轉換成值數值資料時,原則上是:
1. 如果字串含有 .、e 或 E,則當成是 double 型態,否則視為 integer。
2. 以字串的開頭字元能否辨識為準,無法辨識的均轉為數值 0。
例: <?
$foo = 1 + "10.5";
// $foo is float (11.5)
$foo = 1 + "-1.3e3";
// $foo is float (-1299)
$foo = 1 + "bob-1.3e3";
// $foo is integer (1)
$foo = 1 + "bob3";
// $foo is integer (1)
$foo = 1 + "10 Small Pigs"; // $foo is integer (11)
$foo = 1 + "10 Little Piggies"; // $foo is integer (11)
$foo = "10.0 pigs " + 1;
// $foo is integer (11)
$foo = "10.0 pigs " + 1.0;
// $foo is float (11)
?>
運算元
數值運算元(Arithmetic Operators)
運算元
用法
說明
+
$a + $b
加法運算
-
$a - $b
減法運算
*
$a * $b
乘法運算
/
$a / $b
除法運算
%
$a % $b
模數運算(取餘數)
運算元
• 字串運算元(String Operators)
字串運算元只有一個,就是「.」,用來將字串
連接起來,合併成為新字串。
• 指定運算元(Assignment Operators)
運算元
用法
說明
=
$a = 5
$a 為 5
.=
$a .= "abc"
$a 字串末尾再串接 abc
+=
$a += 3
$a 等於 $a 加上 3 之和
-=
$a -= 3
$a 等於 $a 減去 3 之差
*=
$a *= 3
$a 等於 $a 乘以 3 之積
/=
$a /= 3
$a 等於 $a 除以 3 之商
%=
$a %= 3
$a 等於 $a 除以 3 之餘數
運算元
• 位元運算元(Bitwise Operators)
運算元
&
|
^
~
>>
<<
用法
$a & $b
$a | $b
$a ^ $b
~$a
$a >> $b
$a << $b
說明
且(AND)
或(OR)
互斥(XOR)
否(NOT)
向右移位
向左移位
運算元
• 位元運算元(Bitwise Operators)
運算元
&
|
^
~
>>
<<
用法
$a & $b
$a | $b
$a ^ $b
~$a
$a >> $b
$a << $b
說明
且(AND)
或(OR)
互斥(XOR)
否(NOT)
向右移位
向左移位
運算元
• 比較運算元(Comparison Operators)
運算元
用法
說明
==
$a = = $b
等於
===
$a = = = $b
Identical(值與型態均相等,PHP4 only)
!==
$a ! = = $b
Not Identical(值或型態不相等,PHP4 only)
!= 或 <>
$a != $b
不等於
<
$a < $b
小於
>
$a > $b
大於
<=
$a <= $b
小於等於
>=
$a >= $b
大於等於
運算元
條件運算元(Conditional Operator)
與許多程式語言一樣,PHP 也可以使用 A ?
B : C 形式(A True 則 B 否則 C),其中的
A, B, C 是 expression 形式。實際上這種寫
法也可以用 if...else 來取代,但程式就沒那
麼精簡了。例:
<?
$a = 6;
$b = ( $a > 0 ) ? 5 : 10;
echo $b; // $b 值為 5
// 另一種寫法:
$a = 6;
( $a > 0 ) ? $b = 5 : $b = 10;
echo $b; // $b 值為 5
// if ... else 寫法:
$a = 6;
if ( $a > 0 )
$b = 5;
else
$b = 10;
echo $b; // $b 值為 5
?>
運算元
錯誤控制運算元(Error Control Operators)
PHP 提供一個錯誤控制運算元「@」,
在運算式中如果含有它,則所有的錯誤
訊息均會被忽略。
運算元
執行運算元(Execution Operators)
PHP 支援 backticks(``)(倒單引號,在鍵盤上「數字 1」的左側)的執行運算,
在裡頭的字串將被視為 shell command 來執行,而執行的輸出就是「值」,
可以設定給其他變數。例:
<?
// 列出 example 目錄下的檔案與目錄
$output = `ls -al example`;
echo "<pre>$output</pre>";
?>
執行結果:
Warning: shell_exec(): Cannot execute using backquotes in Safe Mode in
/home/chensh/php/A_7.php on line 249
註:由於 backticks 的執行運算,在 PHP 的 Safe Mode 為 ON 時是無用的;若
上述的範例呈現錯誤的話,代表本站所在的伺服器已將 Safe Mode 設定為
ON 了。
運算元
遞增/遞減運算元(Incrementing/Decrementing Operators)
運算元
用法
說明
++$a
Pre-increment(先加 1 再傳回值)
$a++
Post-increment(先傳回值再加 1)
- -$a
Pre-decrement(先減 1 再傳回值)
$a- -
Post-decrement(先傳回值再減 1)
++
--
運算元
邏輯運算元(Logical Operators)
運算元
用法
說明
and
$a and $b
且(AND)
&&
$a && $b
且(AND)
or
$a or $b
或(OR)
||
$a || $b
或(OR)
xor
$a xor $b
互斥(XOR)
!
!$a
否(NOT)
運算元
結合規則
,
left
or
left
運算元
xor
and
left
left
print
right
= += -= *= /= .= %= &= |= ^= ~= <<= >>=
left
?:
left
||
&&
|
^
&
= = !=
優先等級
left
left
在 PHP 的運算優先順序可以參考下面的表格,在多
left
種運算元混合使用的情形下,愈往下表示優先權愈
left
高。不過,在複雜的運算式最好能加上
left ( ) 以避免
= = = != =
non-associative
出錯。
< <= > >=
non-associative
<< >>
left
+ - .
left
* / %
left
! ~ ++ -- (int) (double) (string) (array) (object) @
right
[
right
new
non-associative
session概述





session就好象你和你女友(或妻子)之間的感情似
的,session是你和網站之間的感情。
我們可以透過session記錄用戶的有關資訊
一個session開始於用戶輸入一個站點的網址時,
結束於他離開這個站點時。
session最早出現在動態腳本語言Active Server
Pages中,它的功能之強大,是一句話無法說清
楚的。
當php還在3.0版本時,session是它永遠的痛,
php4的出現讓php在session問題上有了翻身的機
會。
session概述



在一頁頁面中的變數(在本章都指伺服器
端變數,下同)是不能在下一頁中用的 。
session中註冊的變數可以作為總體變數使
用。
最主要的用於用戶身份認證,程式狀態記
錄,頁面之間參數傳遞。
PHP程式控制結構


分為條件式與迴圈兩種
提供程式設計決定判斷的基本能力
條件式- if

語法:
if (條件式)
{敘述}

範例︰
if ($a > $b)
print "a is bigger than b";

當$a>$b則顯示a is bigger than b。
條件式- if

也可以配合else和else if 來加強if的功能,舉類
如下︰
if ($a > $b) {
print "a is bigger than b";
}
elseif ($a == $b) {
print "a is equal to b";
}
else {
print "a is smaller than b";
}
條件式- switch


switch 是多重判斷的流程控制指令
語法:
switch ($i) {
case 0:
print "i equals 0";
break;
case 1:
print "i equals 1";
break;
case 2:
print "i equals 2";
break;
default:
print "i is not equal to 0, 1 or 2";
}
迴圈- while



語法:
while (條件式)
{敘述}
當符合條件式的條件,則進行動作否則就跳過
while迴圈的動作
範例︰
$i = 1;
while ($i <= 10) {
print $i++;
}
迴圈- do while



語法:
do{動作}
while(條件式)
do..while是先動作然後在檢查條件式條件,直到不符合條件才跳出迴圈
範例︰
do {
if ($i < 5) {
print "i is not big enough";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
print "i is ok";
...process i...
} while(0);
迴圈- For



語法:
for (expr1; expr2; expr3)敘述
expr1是for迴圈起始值設定,只有第一次被執行。
expr2 是for迴圈條件判斷式,條件為真則執行敘述。
expr3 當for迴圈執行完expr2的敘述時,將值都依此加以運
算
範例:
for ($i = 1; $i <= 10; $i++) {
print $i;
}
此範例輸出1~10的值。
其他- break


break指令是可以從正在執行的迴圈中跳出
範例:
$i = 0;
while ($i < 10) {
if ($arr[$i] == "stop") {
break;
}
$i++;
}
其他- continue


被使用在一迴圈結構之中,它可以跳到迴圈
其他部分並加以執行迴圈,或重複迴圈運作
等等的功能
範例:
while (list($key,$value) = each($arr)) {
if ($key % 2) { // 從設定的數字中跳脫
continue;
}
do_something_odd ($value);
}
其他- return


數值可以返回使用return的語法將數值
return,任何類型都可以return包含lists、
objects
範例:
function square ($num) {
return $num * $num;
}
echo square (4); // outputs '16'.
引用檔案 Include


把常用到的程式,獨立寫在一個檔案中,
以後要使用時,再把就檔案載入,不需要
全部重寫過。(程式更加模組化)
引用的方法:
include "PLlib.php" ; 或
require “PLlib.php” ; (php3之前使用)

注意:不可以多次載入同一檔案,否則會
出現錯誤。
處理表單所傳遞過來的資料


表單所傳遞過來的資料,會按照HTML表單物件
的名稱,成為PHP可以讀取的變數。
如 :<INPUT TYPE="text" NAME="account"> 這
個文字欄位,NAME屬性的值是account。所以,
要讀取這個欄位的值,只要使用$account這個變
數即可。
練



習
把 Form Method=Post 改為
Form Method=Get,並觀察網址列的變化。
寫一個PHP程式, 讓網友輸入圓的半徑, 然
後輸出周長及面積 (解答)
寫一個PHP程式, 讓網友輸入三角形的三個
邊, 然後輸出三角型的周長, 須判斷此三個
值是否可構成三角形 (解答)
MySQL 連線權限簡介
安裝 phpMyAdmin
phpMyAdmin 修改部份 config.inc.php
$cfgServers[1]['host'] = 'localhost'; // MySQL hostname
$cfgServers[1]['port'] = ''; // MySQL port - leave blank for default port
$cfgServers[1]['adv_auth'] = true; // Use advanced authentication?
$cfgServers[1]['stduser'] = 'root'; // MySQL standard user (only needed
with advanced auth)
$cfgServers[1]['stdpass'] = '123456'; // MySQL standard password (only
needed with advanced auth)
$cfgServers[1]['user'] = 'root'; // MySQL user (only needed with basic auth)
$cfgServers[1]['password'] = '123456'; // MySQL password (only needed
with basic auth)
require "chinese_big5.inc.php" ; //中文訊息
SQL
• SQL (讀音:“ess-que-el”) 是一種結構查詢語法。
• SQL 使用於資料庫交流傳遞。是一套標準的關
聯式資料庫語言。
• SQL 語言是執行更新或從資料系統獲取資料。
如"Select", "Insert", "Update", "Delete", "Create",
and "Drop"