第一篇:一個(gè)自己學(xué)習(xí)總結(jié)的php類學(xué)習(xí)筆記
1,類:類是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象的集合,類是對象的抽象,他將一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作抽象封裝,類好比是一個(gè)對象模板,基于類就可以生成多個(gè)具有不同屬性值的對象。
2,創(chuàng)建類:
Class classname
{
}
3,為該類添加屬性和方法:只需要在類中聲明變量即可。聲明了屬性之后可以獲取該屬性的值。
⑴創(chuàng)建屬性:Class classname
{
Var $myName;
Var $myAge;
}
⑵創(chuàng)建方法:class classname
{
Var $myName;
Var $myAge;
Function getName()
{
}
Function getAget($arg1,$arg2)
{
}
}
注:以上創(chuàng)建了兩個(gè)類的方法,方法名稱分別為:getName,getAge
4,構(gòu)造函數(shù):大多數(shù)的類都有構(gòu)造函數(shù),當(dāng)一個(gè)類實(shí)例被調(diào)用時(shí),將調(diào)用構(gòu)造函數(shù),通常在構(gòu)造函數(shù)中將執(zhí)行一些初始化的操作。
⑴在類中聲明構(gòu)造函數(shù):同聲明其他函數(shù)一樣,但是構(gòu)造函數(shù)的名稱是固定的。即函數(shù)名必須為:__construct()
注:構(gòu)造函數(shù)可以由編程人員主動調(diào)用,但大部分時(shí)候,都是在創(chuàng)建類對象實(shí)例的時(shí)候自動調(diào)用。構(gòu)造函數(shù)也可以傳遞參數(shù),這些參數(shù)可以在調(diào)用類的時(shí)候傳遞。
聲明構(gòu)造函數(shù)的方法:
Class classname
{
Function __construct($param)
{
代碼
}}
⑵析構(gòu)函數(shù):是一種當(dāng)對象被銷毀時(shí),無論使用了unset()或簡單的脫離范圍,都會被自動調(diào)用的函數(shù)。
與構(gòu)造函數(shù)的名稱類似,一個(gè)類的析構(gòu)函數(shù)名稱必須是_destruct()
5,類的實(shí)例化:聲明了一個(gè)類之后,如果要使用該類,必須創(chuàng)建該類的一個(gè)實(shí)例,實(shí)際上也可以將該類作為一個(gè)變量,在使用之前必須手動定義。用關(guān)鍵字“new”來創(chuàng)建
一個(gè)類的實(shí)例。
Class classname
{
Function __construct($myName)
{echo(“我的名字是:$myName
”);}
}
$name1=new myName(“小豬”);
$name2=new myName(“小狗”);//創(chuàng)建了2個(gè)該類的實(shí)例
?>
注:new myName(“小豬”)中的參數(shù)“小豬”會被 自動傳遞到構(gòu)造函數(shù),然后構(gòu)造函數(shù)直接使用該參數(shù)。
6,使用類的屬性:
在一個(gè)類中訪問類成員變量有一個(gè)特殊的指針:$this通過該指針可能方便的訪問類屬性或是給類屬性賦值。
Class classname
{
Var $myattrib;//定義屬性
Function operate($myparam)//為類創(chuàng)建方法
{
$this->myattrib=$myparam;//設(shè)置屬性值為$myparam
Echo $this->myattrib;//輸出屬性值
}
}
⑴如果要在類的外部訪問一個(gè)類的屬性,需要確定該屬性能否被外部訪問。因?yàn)樵陬愔卸x的屬性可以設(shè)置外界訪問的權(quán)限。
以上對屬性$myarrtib進(jìn)行限制,外界可以直接訪問:
$newclass =new classname();//創(chuàng)建一個(gè)類classname實(shí)例
$newclass->myattrib=”小馬”;//給屬性賦值
Echo $newclass->myattrib;//輸出屬性
⑵從類的外部直接訪問類的屬性不是一個(gè)好的方法,面向?qū)ο蠓椒ǖ囊粋€(gè)優(yōu)點(diǎn)就是使用類的封裝??梢酝ㄟ^使用__get()和__set()函數(shù)來實(shí)現(xiàn)對該類屬性的訪問。
Class classname
{
Var $myattrib;//定義屬性
Function __get($attribName)//獲取屬性值的函數(shù)
{
Return $this->attribName;//返回該屬性的值
}
Function __set($arrtibName,$value)//設(shè)置屬性值的函數(shù)
{
$this->$attribName=$value;//設(shè)置屬性值
}
}
注:__get函數(shù)只有一個(gè)參數(shù),該參數(shù)用來傳遞屬性的名稱,__set函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)為屬性的名稱,第二個(gè)參數(shù)為要設(shè)置的屬性的值??梢酝ㄟ^這兩 個(gè)函數(shù)來檢查和設(shè)置任何屬性的值。
7,類的訪問控制:
Php5 支持的3 種控制符:
⑴public(默認(rèn)的)public表示該屬性和方法在類的內(nèi)部或外部都可以直接被訪問。
⑵private 表示該屬性和方法只能在類的內(nèi)部進(jìn)行訪問。如果沒有使用__get()和__set(),則可能對所有的屬性都使用這個(gè)關(guān)鍵字,也要選擇部分方法為私有,但私有的屬性和方法不能被繼承。
⑶Protected 表示被標(biāo)記的屬性或方法只能在類的內(nèi)部進(jìn)行訪問,他也存在于任何子類中。Class classname
{
Public $myattrib;
Public function __get($attribName)//獲取屬性值的函數(shù)
{
Return $this->$attribName;//返回該屬性值
}
Public function __set($attribName,$value)//設(shè)置屬性值的函數(shù)
{
This->$attribName=$value;//設(shè)置屬性值
}
}
8,類方法的調(diào)用:
Class classname
{
Var $myAttrib;
Function func_1($param)//函數(shù)func_1
{
代碼
}
Function func_2($param1$param2)
{
代碼
}
Function func_3($param1$param2)
{
代碼
Return backvalue;
}
}
調(diào)用以上類的3個(gè)函數(shù):
$newclass->func_1(“123”);
$newclass->func_2(“123”,”abc”);
$myvalue=$newclass->func_3(“123”,”abc”);//調(diào)用func_3并獲取返回值。
9,有關(guān)類的代碼:
$this通過該指針可能方便的訪問類屬性或是給類屬性賦值。class Employee//創(chuàng)建一個(gè)類“Employee”
{
var $empno;// 員工人數(shù)//定義類的屬性
var $empnm;// 員工姓名
function add_employee($in_num, $in_name)//創(chuàng)建類的方法為“add_employee”
{
$this->empno = $in_num;//給類的屬性賦值
$this->empnm = $in_name;
}
function show()//創(chuàng)建類的方法為“show”
{
echo “$this->empno, $this->empnm”;//輸出屬性值
return;
}
function changenm($in_name)
{
$this->empnm = $in_name;}
}
$sbabu = new Employee;
$sbabu->add_employee(10,“sbabu”);$sbabu->changenm(“babu”);$sbabu->show();
第二篇:php學(xué)習(xí)總結(jié)
調(diào)試/*………*/ //…….#..........插入時(shí)考慮清楚字段類型避免插入后出現(xiàn)缺值,亂碼
@ 屏蔽錯(cuò)誤or die 條件顯示
以前學(xué)習(xí)php類的總結(jié):
1.php中不能重載,但是能用子類覆蓋父類的方法名稱來實(shí)現(xiàn)新的重載
1.1 在子類中調(diào)用父類的覆蓋部分可以使用 父類名稱::方法名稱();
2.final 只能定義類和方法,不能使用final定義成員屬性,因?yàn)閒inal是常量的意思,在php里定義常量使用的是define函數(shù)
2.1 final關(guān)鍵字標(biāo)記的類不能被繼承
2.2 final關(guān)鍵字標(biāo)記的方法不能被子類重寫
3.const是一個(gè)定義常量的關(guān)鍵字,在php中定義常量使用的是define()函數(shù),但是在類里定義常量使用的是“const” 這個(gè)關(guān)鍵字
3.1在程序中不能修改它的值。
3.2 訪問const 修飾的成員屬性要使用類名,在本類的方法里使用“self”關(guān)鍵字,但不使用“$”符號,也不能使用對象來訪問。
4.static關(guān)鍵字可以描述類中的成員屬性和成員方法
4.1 static 的成員屬于類,而不屬于任何對象,4.2 static的成員是在類第一次被加載的時(shí)候分配的空間,其他類無法訪問的,只對類的實(shí)例共享,能一定程度對類該成員形成保護(hù)
4.3 靜態(tài)成員放到了“初始化靜態(tài)段”,在類第一次加載的時(shí)候放入的,可以讓堆內(nèi)存里的每個(gè)對象共享。所以在靜態(tài)方法里,可以使用這個(gè)方法所在的類的“類名”,也可以使用“self”來訪問其他靜態(tài)成員。“self”代表這個(gè)靜態(tài)方法所在的類。
4.3.1 在類里的靜態(tài)方法是不能訪問類的非靜態(tài)成員的。
4.3.2 在類的非靜態(tài)方法里可以訪問靜態(tài)成員:”self:成員屬性“;
4.4類的靜態(tài)變量,非常類似全局變量,能夠被所有類的實(shí)例共享,類的靜態(tài)方法也是一樣,類似于全局函數(shù)。
4.5 在類內(nèi)函數(shù)訪問靜態(tài)變量時(shí)前面加self::靜態(tài)函數(shù)
4.6 靜態(tài)變量可以在類外直接訪問,訪問方法是類名::靜態(tài)變量
4.7 靜態(tài)函數(shù)可以在類外直接訪問,訪問方式是類名::靜態(tài)函數(shù)
4.8 在類內(nèi)靜態(tài)函數(shù)訪問另一個(gè)靜態(tài)函數(shù)時(shí)使用 類名::靜態(tài)函數(shù)名
4.8.1 靜態(tài)函數(shù)在類內(nèi)訪問靜態(tài)變量時(shí),訪問方式是類名::靜態(tài)變量
4.8.2 靜態(tài)函數(shù)在類內(nèi)訪問靜態(tài)變量時(shí),訪問方式除了是類名::靜態(tài)變量外,還可以使用self::靜態(tài)變量
4.9 在類內(nèi)靜態(tài)函數(shù)訪問另一個(gè)靜態(tài)函數(shù)時(shí)除了使用 類名::靜態(tài)函數(shù)名外,還可以使用self::靜態(tài)函數(shù)名,也可以直接調(diào)用靜態(tài)函數(shù)
4.10 靜態(tài)函數(shù)內(nèi)不能訪問非靜態(tài)變量
4.11 在類內(nèi)靜態(tài)函數(shù)不能使用$this->非靜態(tài)函數(shù)名訪問非靜態(tài)函數(shù),可以使用self::非靜態(tài)函數(shù)名
4.12
5.類里的”$this“,在php里面提供了一個(gè)本對象的引用$this,每個(gè)對象里面都有一個(gè)對象的引用$this來代表這個(gè)對象,完成對象內(nèi)部成員的調(diào)用。
5.1 $this 就是對象內(nèi)部代表這個(gè)對象的引用。
6.類里“self”,self 和$this相似,只不過self是代表這個(gè)靜態(tài)方法所在的類,所以在靜態(tài)方法里,可以使用這個(gè)方法所在的類的”類名“,也可以使用“self”來訪問其他的靜態(tài)成員,通常使用后者”self::成員屬性“。
7.類里”__“開頭的函數(shù)名
7.1類里”__“開頭的函數(shù)名都是在某一時(shí)刻不同情況下自動調(diào)用執(zhí)行的方法。
7.2__toString()方法也是自動被調(diào)用,是直接輸出對象引用時(shí)自動調(diào)用的。比如“$p = new Person()”,直接用echo輸出$p會產(chǎn)生錯(cuò)誤,如果在類里定義了__toString()方法,再用echo直接輸出對象引用的時(shí)候就不會產(chǎn)生錯(cuò)誤了
8.對象串行化
8.1 __sleep()方法,在對象串行化的時(shí)候,會調(diào)用一個(gè)__sleep()方法來完成一些睡前的事情,__sleep()函數(shù)不接受任何參數(shù),但返回一個(gè)數(shù)組,其中包含需要串行化的屬性。未被包含的屬性降在串行化時(shí)被忽略,如果沒有__sleep()方法,php將保存所以屬性.8.2 __wakeup()方法,在重新醒來時(shí),即由二進(jìn)制串重新組成一個(gè)對象的時(shí)候,則會自動調(diào)用__wakeup(),做一些對象醒來就要做的動作。
8.3 有時(shí)你可能需要一個(gè)對象在反串行化后立即執(zhí)行.為了這樣的目的,PHP會自動尋找__sleep和__wakeup方法.9.protected 成員能被同個(gè)類中的所有方法和繼承出的類的中所有方法訪問到,不能被父類的實(shí)例直接訪問。protected and public 可以動態(tài)綁定
10.private 大部分private屬性仍然可以被外部代碼共享.解決方法是用一對public方法,一個(gè)是get(獲取屬性的值),另一個(gè)是set(設(shè)置屬性的值).10.1private 不可以動態(tài)綁定。Private成員只存在于它們所在的類內(nèi)部.不像public和protected成員那樣,PHP模擬靜態(tài)綁定.10.2 什么時(shí)候用到private?private成員只有當(dāng)你不想讓子類繼承改變或特殊化父類的行為時(shí)才用到,這種情況比你想像的要少,通常來說,一個(gè)好的對象分層結(jié)構(gòu)應(yīng)當(dāng)允許絕大多數(shù)功能被子類特殊化,改進(jìn),或改變—這是面向?qū)ο缶幊痰幕A(chǔ)之一。一定的情況下需要private方法或變量,例如當(dāng)你確信你不想允許子類改變父類中的某個(gè)特定的部份。
11.抽象類:抽象方法是就像子類中一般的方法的占位符(占個(gè)地方但不起作用),它與一般方法不同—沒有任何代碼.如果類中存在一個(gè)或更多抽象方法, 那么這個(gè)類就成了抽象類.你不能實(shí)例化抽象類.你必須繼承它們,然后實(shí)例化子類.你也可以把抽象類看成是子類的一個(gè)模板.如果你覆寫所有的抽象方法, 子類就變成一個(gè)普通的類.如果沒有覆寫所有方法, 子類仍是抽象的.如果一個(gè)類中中包含有抽象方法(哪怕只有一個(gè)), 你必須聲明這個(gè)類是抽象的, 在class關(guān)鍵字前加上abstract.聲明抽象方法的語法與聲明一般方法不同.抽象方法的沒有像一般方法那樣包含在大括號{}中的主體部份,并用分號;來結(jié)束.12.接口:如果你建立了一個(gè)只有抽象方法的類,你就定義了一個(gè)接口(interface).為了說明這種情況, PHP中有interface 和implements關(guān)鍵字.你可以用interface來代替抽象類, 用implements來代替extends來說明你的類定義或使用一個(gè)接口.例如, 你可以寫一個(gè)myClass implements myIterface.這兩種方法可以依個(gè)人偏愛來選擇.12.1 如果接口中出現(xiàn)非抽象方法.會報(bào)錯(cuò)
12.2 接口中的方法默認(rèn)是public 型的.其它類型的修飾符,不能修飾接口中的抽象方法.12.3 即使接口中所有的方法都是抽象方法,也不能使用 abstract 修飾.也不能用final
12.4 即使接口中所有的方法都是抽象方法,在接口中,可以聲明靜態(tài)方法.12.5 在接口中可以有常量,e.g.:
interfaceUser{
const MAX_GRADE = 99;
function getName();
function setName($_name);
}
?>
13.Namespace關(guān)鍵字給一塊代碼命名.在這個(gè)代碼塊外部,腳本必須用操作符::加上命名空間的名稱來引用這個(gè)代碼塊.引用靜態(tài)的類成員也是用相同的方法.在命名空間內(nèi)代碼不需要聲明命名空間, 它本身就是默認(rèn)的.這種方法比添加前綴的方法好.你的代碼可由此變得更加緊湊和可讀.你可能想知道是否可以建立分層的(嵌套的)命名空間.答案是不可以.但你可以在命名空間名稱后加上冒號, 你可以再次調(diào)用在名稱中不包含冒號的變量,函數(shù)和類.命名空間允許存在冒號,只要不是第一個(gè)字符和最后一個(gè)字符或接著另一個(gè)冒號.命名空間的名稱中的冒號對于PHP來說沒有任何意義, 但如果你用他們來區(qū)分邏輯上的區(qū)塊, 他們可以很好地說明你的代碼中的父子(parent-child)關(guān)系.14.__toString()打印對象會調(diào)用它的__toString方法.15.不能實(shí)例化的類
//
//當(dāng)__construct()為public時(shí)可以實(shí)例化
class A{
private function __construct(){}
}
$a = new A();//fail
?>
15.1
//static的方法留給外部訪問.
class A{
private function __construct(){}
static function getClassA(){
return “這里是后門,可以通過這里進(jìn)入類內(nèi)部..”;
}
}
echo A::getClassA();
?>
15.2
//不能用new實(shí)例化的類.
//static的方法留給外部訪問.
//在方法內(nèi)部返回實(shí)例.
class A{
private function __construct(){
echo “this is construction
n”;
}
static function getClassA(){
$a = new A();
return $a;
}
}
// 看到這里確實(shí)返回的是 A 的實(shí)例.但不是同一個(gè)對象.$a1 = A::getClassA();
$a2 = A::getClassA();
echo “$a1 的類是 ”.get_class($a1).“ , $a2 是 ”.get_class($a1);if($a1 === $a2){
echo “
$a1 $a2 指向同一對象.”;
}else{
echo “
$a1 $a2 不是一個(gè)對象.”;
}
//this is construction
//this is construction
//$a1 的類是 A , $a2 是 A
//$a1 $a2 不是一個(gè)對象.?>
15.3
//不能用new實(shí)例化的類.
//static的方法留給外部訪問.
//在方法內(nèi)部返回實(shí)例.
//定義靜態(tài)屬性保證這個(gè)實(shí)例能被靜態(tài)方法調(diào)用.
//增加判斷部分.
class A{
private static $a = null;
private function __construct(){}
static function getClassA(){
if(null == self::$a){
self::$a = new A();
}
return self::$a;
}
}
// 看到這里確實(shí)返回的是 A 的實(shí)例.但不是同一個(gè)對象.$a1 = A::getClassA();
$a2 = A::getClassA();
echo “$a1 的類是 ”.get_class($a1).“ , $a2 是 ”.get_class($a1);if($a1 === $a2){
echo “
$a1 $a2 指向同一對象.”;
}else{
echo “
$a1 $a2 不是一個(gè)對象.”;
}
//$a1 的類是 A , $a2 是 A
//$a1 $a2 指向同一對象.?>
第三篇:PHP學(xué)習(xí)推薦
PHP學(xué)習(xí)推薦
PHP,是英文超級文本預(yù)處理語言Hypertext Preprocessor的縮寫。PHP 是一種 HTML 內(nèi)嵌式的語言,是一種在服務(wù)器端執(zhí)行的嵌入HTML文檔的腳本語言,現(xiàn)在越來越多的人加入到了php的大家庭中,其中很多人只是淺嘗輒止,為何會如此呢?最大的障礙莫過于學(xué)習(xí)的過程枯燥乏味,從而失去學(xué)習(xí)興趣,那么小編就自己的經(jīng)驗(yàn)來說說怎樣學(xué)習(xí)php吧。
學(xué)習(xí)方法之視頻教程
相對于讀書來說,我更喜歡看視頻學(xué)習(xí),可能小編我對影像比文字記憶更加深刻吧。每看完一個(gè)視頻教程,我都會閉上眼睛休息一會,把剛才看的內(nèi)容消化消化,然后再開始練習(xí)剛才看過的內(nèi)容,盡可能不邊看邊做,因?yàn)檫@樣學(xué)的快同樣也忘得快,如果實(shí)在想不起來的話,可以再打開教程看一遍,切記不可囫圇吞棗,好高騖遠(yuǎn),要穩(wěn)扎穩(wěn)打,把你看過的教程切切實(shí)實(shí)的記在心里。只有一步一個(gè)腳印,你的學(xué)習(xí)之路才能走的更遠(yuǎn),否則的話,你走的越遠(yuǎn),越會覺的道路是如此艱辛,或許你就會放棄學(xué)習(xí)。那么都有哪些視頻教程能幫我們學(xué)習(xí)php呢,小編我就為大家介紹幾個(gè)吧:
php100
LAMP兄弟連
李炎恢的php
學(xué)習(xí)方法之看書: 1.《PHP與MySQL程序設(shè)計(jì)(第4版)》
2.《PHP Web 2.0 開發(fā)實(shí)戰(zhàn)》
3.《PHP高級程序設(shè)計(jì):模式、框架與測試》
4.《PHP 5 高級應(yīng)用開發(fā)實(shí)踐》
5.《細(xì)說php》
學(xué)習(xí)過程中不要死記語法,要多動手,多練習(xí),當(dāng)你遇到問題的時(shí)候,首先嘗試自己解決。多用google,baidu,網(wǎng)絡(luò)是一個(gè)大知識庫,是最好的老師,你遇到的問題,別人也遇到過,多去搜索一下吧.多閱讀別人的源代碼,要看懂別人的設(shè)計(jì)思想,不斷融為已用.
第四篇:PHP 學(xué)習(xí)筆記(二):表單:表單處理,表單驗(yàn)證,表單實(shí)例總結(jié)
PHP 學(xué)習(xí)筆記
(二):表單:表單處理,表單驗(yàn)證,表單實(shí)例
PHP 表單
PHP 超全局變量 $_GET 和 $_POST 用于收集表單數(shù)據(jù)(form-data)。1 GET vs.POST
GET 和 POST 都創(chuàng)建數(shù)組(例如,array(key => value, key2 => value2, key3 => value3, …))。此數(shù)組包含鍵/值對,其中的鍵是表單控件的名稱,而值是來自用戶的輸入數(shù)據(jù)。
GET 和 POST 被視作 GET和_POST。它們是超全局變量,這意味著對它們的訪問無需考慮作用域并且應(yīng)該對其進(jìn)行驗(yàn)證。如果未提交,則跳過驗(yàn)證并顯示一個(gè)空白表單。
PHP 表單驗(yàn)證輸入字段
從上一節(jié)中的驗(yàn)證規(guī)則中,我們看到 “Name”, “E-mail” 以及 “Gender” 字段是必需的。這些字段不能為空且必須在 HTML 表單中填寫。
在上一節(jié)中,所有輸入字段都是可選的。在下面的代碼中我們增加了一些新變量:$nameErr、$emailErr、$genderErr 以及 $websiteErr。這些錯(cuò)誤變量會保存被請求字段的錯(cuò)誤消息。我們還為每個(gè) $_POST 變量添加了一個(gè) if else 語句。這條語句檢查 $_POST 變量是否為空(通過 PHP empty()函數(shù))。如果為空,則錯(cuò)誤消息會存儲于不同的錯(cuò)誤變量中。如果不為空,則通過 test_input()函數(shù)發(fā)送用戶輸入數(shù)據(jù):
$nameErr = $emailErr = $genderErr = $websiteErr = “";$name = $email = $gender = $comment = $website = ”“;
if($_SERVER[”REQUEST_METHOD“] == ”POST“){
if(empty($_POST[”name“])){
$nameErr = ”Name is req004km.cnment“])){
$comment = ”“;
} else {
$comment = test_input($_POST[”comment“]);
}
if(empty($_POST[”gender“])){
$genderErr = ”Gender is required“;
} else {
$gender = test_input($_POST[”gender“]);
} } ?> PHP驗(yàn)證 E-mail 和 URL
本節(jié)展示如何驗(yàn)證名字、電郵和 URL。
PHP驗(yàn)證 E-mail
以下代碼展示的簡單方法檢查 e-mail 地址語法是否有效。如果無效則存儲一條錯(cuò)誤消息:
$email = test_input($_POST[”email“]);if(!preg_match(”/([w-]+@[w-]+.[w-]+)/“,$email)){
$emailErr = ”無效的 email 格式!“;}
PHP驗(yàn)證 Name、E-mail、以及 URL
現(xiàn)在,腳本是這樣的:
$nameErr = $emailErr = $genderErr = $websiteErr = ”“;$name = $email = $gender = $comment = $website = ”“;
if($_SERVER[”REQUEST_METHOD“] == ”POST“){
if(empty($_POST[”name“])){
$nameErr = ”Name is required“;
} else {
$name = test_input($_POST[”name“]);
// 檢查名字是否包含字母和空格
if(!preg_match(”/^[a-zA-Z ]*$/“,$name)){
$nameErr = ”O(jiān)nly letters and white space allowed“;
}
}
if(empty($_POST[”email“])){
$emailErr = ”Email is required“;
} else {
$email = test_input($_POST[”email“]);
// 檢查電郵地址語法是否有效
if(!preg_match(”/([w-]+@[w-]+.[w-]+)/“,$email)){
$emailErr = ”Invalid email format“;
}
}
if(empty($_POST[”website“])){
$website = ”“;
} else {
$website = test_input($_POST[”website“]);
// 檢查 URL 地址語言是否有效(此正則表達(dá)式同樣允許 URL 中的下劃線)
if(!preg_match(”/b(?:(?:https?|ftp)://|004km.cnment“])){
$comment = ”“;
} else {
$comment = test_input($_POST[”comment“]);
}
if(empty($_POST[”gender“])){
$genderErr = ”Gender is required“;
} else {
$gender = test_input($_POST[”gender“]);
} } ?>
接下來向您講解如何防止表單在用戶提交表單后保留輸入字段中的值。
PHP-保留表單中的值
如需在用戶點(diǎn)擊提交按鈕后在輸入字段中顯示值,我們在以下輸入字段的 value 屬性中增加了一小段 PHP 腳本:name、email 以及 website。在 comment 文本框字段中,我們把腳本放到了 之間。這些腳本輸出 $name、$email、$website 和 $comment 變量的值。
然后,我們還需要顯示選中了哪個(gè)單選按鈕。對此,我們必須操作 checked 屬性(而非單選按鈕的 value 屬性):
Name: “>
E-mail: “>
Website: “>
Comment:
Gender:
value=”female“>Female value=”male">Male
echo
第五篇:PHP學(xué)習(xí)總結(jié)的一些經(jīng)驗(yàn)
其實(shí)我也是一樣很新的新手,上PHP100學(xué)習(xí)視頻并在論壇里學(xué)習(xí)其實(shí)也就是一個(gè)月前的事.雖然早在8月份花過一個(gè)星期看完w3school的PHP教 程,了解了許多PHP知識.但始終是缺乏一個(gè)與眾多朋友學(xué)習(xí)和交流的平臺,所以一下子在幾周后又把PHP又忘得七七八八了,有幸在10月尾了解到了 PHP100視頻和論壇,不僅可以系統(tǒng)地學(xué)習(xí)下PHP,更可以和很多朋友一起學(xué)習(xí)成長這更是件好事.在php100視頻中學(xué)到了許多,而 論壇中看帖和回帖也更讓我鞏固了學(xué)習(xí)的知識并讓我學(xué)到了很多,這不僅不會讓我又把PHP知識快速忘記(因?yàn)楣ぷ髦杏檬茿SP,而PHP不會在工作中用,所 以忘得快),反而在取得進(jìn)步的同時(shí),我也能幫助一些人,這也是一樣是學(xué)習(xí)勝利的過程,我喜歡并享受其中.以下是我上論壇以來的回復(fù)總結(jié),將不斷持續(xù)總結(jié).希望有利于與我一樣的新手一起成長.首先來個(gè),題前語:
任何的學(xué)習(xí),都需要自信,再新的新手也應(yīng)該拋棄心中的恐懼,有時(shí)關(guān)鍵在于你心平下來,踏入學(xué)習(xí)后,你將慢慢化開迷惑,獲得信心,贏取自信!讓我們共同進(jìn)步.----------
==========
Undefined index問題
是運(yùn)行的時(shí)候出現(xiàn)類似:Notice: Undefined index: action in D:wamp004km.cn/read.php?tid=15843&page=1#138857
是 php 配置的事情
這個(gè)錯(cuò)誤是因?yàn)?php 頁面中的變量沒有初始化而導(dǎo)致的!
可以通過設(shè)置PHP.INI搞好,也可以在變量前面 加上一個(gè) @ 就可以解決這個(gè)地方的問題了!
如這里指示第三行
Notice: Undefined index: action in D:wamp004km.cn/2009/0617/6463.php
----------
==========
遇到頁面明確提示你錯(cuò)誤的,并有顯示如何錯(cuò)的,建議先把語句復(fù)制部分重點(diǎn)詞句或全部語句到百度或
google,更快速讓在你排查錯(cuò)誤找到方法.其實(shí)這也是一種高效有益的學(xué)習(xí)方法,畢竟在工作中,遇到些沒
遇過的新問題,有時(shí)都需要借助網(wǎng)上的資源給自己靈感和助力,本人就一天不下幾十次用百度搜索.如程序中遇到諸如含提示:
顯示的錯(cuò)誤為:
Parse error: syntax error, unexpected $end in D:wampwwwtestlist.php on line 21
那么你就可以把 syntax error, unexpected $end 作為關(guān)鍵詞到百度搜索,那么你即刻可以得到助力甚
至答案.以上那句舉例的錯(cuò)誤是因?yàn)?短標(biāo)簽沒有打開.解決方法是打開php.ini把short_open_tag短標(biāo)簽
打開,重啟服務(wù)即可
----------
==========
提示的時(shí)候,有時(shí)順便把代碼帖上帖子是必要的,這樣才能快速地在別人的幫助下問題得到解決
----------
==========
對單引號和雙引號有迷惑,大家可以看這篇文章解下惑:
----------
==========
在調(diào)試程序時(shí),經(jīng)常要用到echo 你的sql語句來,檢查傳值后,sql變成了什么樣的情況,以便排查錯(cuò)誤.----------
==========
向數(shù)據(jù)庫表插入數(shù)據(jù)
INSERT INTO 語句用于向數(shù)據(jù)庫表添加新紀(jì)錄。
語法
INSERT INTO table_name VALUES(value1, value2,....)--此種情況是需要按你表中所有字段的順
序全部value填上!
您還可以規(guī)定希望在其中插入數(shù)據(jù)的列:
INSERT INTO table_name(column1, column2,...)VALUES(value1, value2,....)--張老師明確建
議用此種方法!
----------
==========
有人疑惑,$_POST或$GET取得時(shí)的引號問題:其實(shí)是要不要引號,單引號或雙引號都是沒有問題的.如, $_POST[name]和$_POST['name']和$_POST[“name”]都是在windows下一樣的,在linux下情況具體沒
用過,不知道,還望高手告知.----------
==========
針對多數(shù)人的留言板課程中許多問題(如,insert into存不進(jìn)數(shù)據(jù)問題)的總結(jié):
1.檢查你數(shù)據(jù)庫表的結(jié)構(gòu)是否正確,如id是否設(shè)為自增
2.insert into語句是否正確,如單詞是否正確,insert into...values...3.是否將`(反斜點(diǎn),在1鍵前)號和'(引號)是否使用位置正確,正確的方法是:`應(yīng)該放在表和字段邊,而'
是放在字符串型(或者說是非數(shù)字型)的值邊上
4.檢查你的各語句,是否在結(jié)尾將分號(;)正確結(jié)束
5.檢查你的submit表單項(xiàng)的name值是否你判斷的取值,如
value=“提交”>時(shí),你的判斷是否提交應(yīng)是 if($_POST[submit]){...};當(dāng)你的是
type=“submit” name=“othername” value=“提交”>時(shí),你的判斷是否提交應(yīng)是 if($_POST
[othername]){...}
6.檢查你的$_POST是否大寫,當(dāng)你寫成$_post是不行的,因?yàn)?_GET,$_POST等,都是PHP系統(tǒng)環(huán)境的硬性用
法
7.用echo 輸出你的sql檢查傳值情況
8.檢查你的短標(biāo)簽是否打開
9.注意你的method是get還是post
10.檢查你的表單相關(guān)單詞或引號是否書寫正確.很多莫名其妙的問題,多是細(xì)節(jié)問題.要小心查對才能看
出來.----------
sql語句中表名和字段名在windows的情況下是可以不加小斜點(diǎn)(鍵盤左上角1鍵前的那個(gè)點(diǎn)鍵)的,但聽說
在linux中不加會引出些問題,兼容的寫法是有小斜點(diǎn).如:windows下:
$sql=“select * from table ”
和
$sql=“select * from `table` ”
是效果一樣的再次重點(diǎn)提示是:
`(反斜點(diǎn),在1鍵前)號和'(引號)使用位置,正確的方法是:`應(yīng)該放在表和字段邊,而'是放在字符串型(或
者說是非數(shù)字型)的值邊
----------
==========
php100第十三講的page.PHP中的翻頁顯示信息有問題的解決方法:
因?yàn)轫撁鏇]有取值到URL值的page,所以在函數(shù)內(nèi)的page會一直是1,所以會一直是第1頁的數(shù)據(jù)
解決方法,就是在調(diào)用函數(shù)前把page取得就好了!函數(shù)里會把取到的page值作為全局變量傳入函數(shù)使用的了!
include(“conn.php”);
$nump=mysql_query(“SELECT * FROM `test`”);
$total=mysql_num_rows($nump);
//調(diào)用pageft(),每頁顯示10條信息(使用默認(rèn)的20時(shí),可以省略此參數(shù)),使用本頁URL(默認(rèn),所
以省略掉)。
$page=$_GET[page];//------------------------------在這里加入這行就OK了!
_PAGEFT($total,5);
echo $pagenav;
$query=mysql_query(“SELECT * FROM `test` limit $firstcount,$displaypg ”);//---見下面 while($row=mysql_fetch_array($query)){
echo “
”.$row[name].“ | ”.$row[sex];
}
以上的調(diào)試方法,其實(shí)你只要學(xué)下張老師把sql語句輸出來看下,你就知道是怎么回事了!
echo $sql=“SELECT * FROM `test` limit $firstcount,$displaypg ”;
$result=mysql_query($sql);
----------
==========
分頁有問題的朋友,不妨看下如下:
關(guān)于分頁,這有一篇論壇朋友的學(xué)習(xí)心得,學(xué)習(xí)下,你也許有所得:
另有一篇本人轉(zhuǎn)發(fā)上去的分頁講解:
----------
==========
關(guān)于:mysql_fetch_array
mysql_fetch_array 調(diào)用一次會把指針指向的記錄放入數(shù)據(jù),并指向下一條記錄
======================....回復(fù)的太多了,總結(jié)又需較多時(shí)間,暫時(shí)總結(jié)到此,總結(jié)未完,待續(xù).....