PHP學習——第二章

來源:互聯網
上載者:User

利用PHP處理html表單也許是任何動態Web網站中的最重要的過程。其中包括兩個步驟:首先,利用html建立表單自身。然後,建立相應的php指令碼,用於接收和處理html表單資料。

產生表單

html表單是使用form標籤和多種用於擷取輸出的元素建立的。
<form action="script.php" method="post" ></form>
就PHP而言,form標籤最重要的屬性就是action,它指定把表單資料發送到哪個頁面。
表單的mothod屬性指定如何把資料發送到處理頁面,兩個選項指示要用到的HTTP方法。
get方法把提交的資料通過一系列追加到URL後面的名-值對發送到接收頁面。例如
http://www.example.com/script.php?name=Homer&gender=M&age=35
使用get方法的好處是:可以在使用者的Web瀏覽器中為得到的頁面建立書籤(因為它是一個URL)。因此,你還可以在Web瀏覽器中單擊後退返回到一個get頁面,或者重新載入它,而不會有任何問題,而post頁面則不能執行這兩種操作。不幸的是,通過get傳輸的資料量有限,並且不怎麼安全(因為資料是可見的)。

一般來講,get用於請求資訊,比如資料庫中的特定記錄或者搜尋的結果(搜尋幾乎總是使用get)。當需要採取一個動作時(比如更新資料庫記錄或寄送電子郵件時),就使用post方法。

<!--添加初始form標籤--><form action="handle_form.php" method="post"><!--開始建立html表單--><fieldset><legend>Enter your infomation in the form below</legend><fieldset>和<legend>兩對標籤給表單加上一個框,並且在頂部設定了一個標題。<!--添加兩個文本輸入框--><p><b>Name:</b> <input type="text" name="name" size="20" maxlength="40" /></p><p><b>Email Address:</b> <input type="text" name="Email" size="40" maxlength="60" /></p><!--添加一對選項按鈕--><p><b>Gender:</b> <input type="radio" name="gender" value="M">男性<input type="radio" name="gender" value="F">女</p><!--添加一個下拉式功能表--><p><b>Age:</b><select name="age">     <option value="0~29">Under 30</option>     <option value="30~60">Between 30 and 60</option>     <option value="60+">Over 60</option></select></p><!--select標籤開始建立下拉式功能表,然後每個option標籤將建立選項列表中的另一行選項。--><!--添加一個文字框--><p><b>Comments:</b> <textarea name="comments" rows="3" cols="60" ></textarea></p><!--完成表單--></fieldset><div aligen="center"> <input type="submit" name="submit" value="Submit My Infomation" /></div></form>
處理HTML表單
<html><body><?php    #handlr_form.php/*Create shorthand for the data*對輸入表單中的資料,可以通過$_REQUEST['']來訪問它。這裡的變數的拼字和大小寫必須與HTML表單中的相應的name值完全符合。*/$name=$_REQUEST['name'];$email=$_REQUEST['email'];$comments=$_REQUEST['comments'];//Print the submitted infomationecho "<p>Thank you <b> $name </b>,for the following comments:<br /><tt>$comments</tt></p><p>We will reply you at <i>$email</i>.</p>\n";?></body></html>

$_REQUEST是一個特殊的變數類型,稱為超全域變數。它儲存了通過GET或POST方法發送到PHP頁面的所有資料,以及在cookie中可訪問的資料。
如果PHP指令碼在應該列印變數的地方顯示空白,這意味著沒有副職。兩個最可能的原因是無法在表單中輸入值,或者變數名拼字錯誤或弄錯了它的大小寫。

條件陳述式和運算子
if (condition) {     //Do something;} else {     //Do something;}if () {} elseif () {} else {}//條件陳述式isset是一個如何使用預設值的理想樣本。假定除非滿足一個條件:設定了$_REQUEST['gender'],否則$gender具有一個NULL值。if (isset($_REQUEST['gender']) {     $gender=$_REQUEST['gender'];} else {     $gender=NULL;}

PHP還有和C語言類似的switch語句。

驗證表單資料

從錯誤管理和安全性兩方面考慮,你永遠都不應該信任輸入到HTML表單中的資料。對於錯誤的資料,無論是蓄意產生破壞,還是僅僅無意的造成不適,都需要針對預期的要求進行測試。
isset()用於測試一個變數是否具有值(包括0,FALSE,或者一個Null 字元,但不能是NULL)。
使用isset()函數的一個問題是Null 字元串測試位TRUE,這意味著它不是驗證HTML表單中的文本輸入和文字框的有效方式。要檢查使用者輸入到文本元素中的內容,可以使用empty()函數。它將檢查一個變數是否具有empty值:Null 字元串,0,FALSE,或NULL。

表單驗證的第一個目標是確保表單中輸入或選擇了某些內容。第二個目標是確保提交的資料具有正確的類型、正確的格式、和特定的可接受值。

if (!empty($_REQUEST['email'])) {$email=$_REQUEST['email'];} else {$email=NULL;}

要測試提交的值是否位元字,可以用isnumeric()

數組可以儲存多份單獨的資訊,因此數組就像是一個列表,其中每個值可以是字串或數組,甚至式另一個數組。數組可以構成一系列鍵-
值對,其中每一對都是那個數組的一個項目或元素。對於列表中的每個項目都有一個與之關聯的鍵。
PHP支援兩種數組:索引數組(Indexed Array)和關聯陣列(Associative 
Array),前者使用數組作為鍵,後者使用字串作為鍵。索引數組的第一個索引開始於0,除非顯式制定索引值。
要從數組中檢索特定的值,需要先引用陣列變數名稱,然後在方括弧中指出值。

echo $artist[2];echo $states['MD'];

因為數組包含多個值,所以不能用簡單的方法將它們列印出來。
對索引數組同上,而對關聯陣列,則應用

{$states['MD']}
超全域數組

PHP預設包括多個預定義的數組。
$_GET,用來儲存通過GET方法發送到PHP指令碼的所有變數和值。
$_POST,用來儲存使用POST方法從HTML表單發送到PHP指令碼的所有資料。這兩個變數以及$_COOKIE變數都是$_REQUEST變數的子集。
$_REQUEST,$_SERVER,$_ENV,$_SESSION,$_COOKIE

建立數組

1、一次添加一個元素

$band[]='Jemmin';$band[]='Bert';$badn[]='Murray';

此外還可以在添加元素時制定鍵,但是,重要的是理解,如果指定一個鍵,並且已經存在用那個相同的鍵進行索引的一個值,則新值將重寫現有的值。

2、使用array()函數,只用一個步驟就可以構建整個數組

$states = array('IA'=>'Iowa','MD'=>'Maryland');

不論是否顯式的設定了鍵,都可以用這種方法。
在引用數組前,可以使用array()函數初始化它。

$tv=array();$tv='Gods of the arena';

在PHP中初始化數組(或者任何變數)不是必需的,但可以使代碼更清晰,並且有助於避免錯誤。
3、如果想建立連續數位數組,可以使用range()函數。

$ten=range(1,10);

訪問數組

上面已經講了如何訪問數組中的一個元素,如果要訪問整個數組,則可以使用foreach()迴圈。

foreach($array as $value) {//Do something with the $value;}

foreach()迴圈將會迭代$array中的每個元素,並把每個元素的值賦予變數$value,要訪問鍵和值,可以使用

foreach($array as $key => $value) {echo "The value at $key is $value";}

要確定數組中元素的個數,可以用count()函數。

$num=count($array);

range()也可以建立連續字母的數組。

$alphabet=range('a','z');

is_array()函數用於確認一個變數是否是數組元素。

多維陣列——包含其他數組的數組,例如

$primes=array(2,3,5,7,...);$sphenic=array(30,42,46,...);$numbers=array('primes'=>$primes,'sphenic'=>$sphenic);

現在$numbers就是一個多維陣列。要列印出這些值之一,可以用話括弧包圍整個結構,例如

{$numbers['primes'][0]};

也可以使用foreach()迴圈來訪問多維陣列,如果需要的話,可以把foreach迴圈嵌套在另一個內部。
數組和字串

下面兩個函數可以在字串和數組之間相互進行轉換。

$array = explode(separator,$string);$string = implode(glue,$array);

使用這兩個函數的關鍵之處分隔字元(separator)和膠合(glue)的關係。當把一個數組轉變成一個字串時,將會設定膠合——將插入入到產生字串的數組值之間的
字元或代碼。相反,當把字串轉變成數組時,要指定分隔字元,它用於標記什麼應該變成獨立數組元素。例如

$s1 = 'Mon-Tue-Wed-Thu-Fri';$days_array = explod('-' ,$s1);$s2 = implode(',' ,$days_array);
數組排序

PHP包括多個科用於對數組排序的函數,這些排序函數執行三種排序。
首先,可以使用sort()按值對數組進行排序,並丟棄原來的鍵。重要的是理解在排序之後將會重設數組的鍵,因此如果鍵- 值關係很重要,就不應該使用這個函數。
其次,可以使用asort()按值對數組排序,同時還會維持鍵。
最後,可以使用ksort()按鍵對數組進行排序。
如果把這些函數分別改名為rsort(),arsort(),krsort(),則能夠以相反的順序對數組進行排序。

for和while迴圈

$s1 = 'Mon-Tue-Wed-Thu-Fri';$days_array = explod('-' ,$s1);$s2 = implode(',' ,$days_array);

只要迴圈條件為真,就會執行迴圈。當從資料庫中檢索結果時,最長使用while迴圈。

for( initial expression;condition;closing expression) {//Do something}

在執行一次迴圈時,會運行初始運算式,然後檢查條件,如果條件為真,則繼續。執行之後將會運行結束運算式,並再次檢查條件。這個過程會繼續下去,直到條件為假。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.