天天看點

20141226--資料送出+檔案上傳-01

回顧

系統函數:字元串函數和時間日期函數

數組

數組元素可以是任意資料類型;數組長度沒有限制

php凡是碰到變量帶中括号的一定會當做數組處理

周遊數組:for循環,foreach循環,each搭配循環,函數(key,current,next,prev,end,reset)

二維數組:php數組元素又是數組

資料結構:棧(FILO)和隊列(FIFO)

數組

字元串數組函數

字元串與數組之間的關系(轉換)

explode:爆炸,将一個字元串按照某個指定的規則(通常是特殊字元),将數組分成多個段,每一段都當做一個數組的元素,傳回一個索引數組

implode:粘合,将一個數組内部的所有元素按照某個指定的規則(特殊字元),将所有的元素拼接成一個字元串

數組運算

數組運算通常指的兩種:+運算,合并運算,比較運算

+運算

将兩個數組的元素進行數量上的增加,傳回一個數組;如果數組元素的鍵名在第一個數組中存在,那麼第二個數組的元素就會被抛棄(鍵名無論是索引還是關聯都是一樣的)

合并運算

array_merge:合并,指的是将兩個數組中的元素進行累計。如果後面的數組與前面的數組有下标(鍵名:關聯)相同的,那麼後面的元素的值會覆寫前面的;如果是索引的相同下标,會自動的修改下标疊加到前面的數組裡。

比較運算

比較兩個數組元素的個數,然後依次比較數組元素的值

== :值比較

相等條件:數組的元素個數必須相同,數組元素的值必須在順序上與另外一個數組元素的值相同

=== :類型比較

全等條件:在相等條件上保證元素的類型也相同

驗證碼

驗證碼的英文單詞叫做captcha

用數組來模拟生成驗證碼對應的随機字元串。

1. 生成有所有元素的數組

$arr = array(‘a’,’b’,’c’……)

range:按照指定的ASCII碼來生成一個序列對應的數組元素(索引數組)

2. 擷取随機的多個元素

array_rand:隻能随機取出多個數組元素的下标,傳回一個索引數組

周遊擷取的随機下标:取出對應的值

3. 打亂随機取得的下标

shuffle:将數組元素的順序打亂,并且重新生成索引。

浏覽器送出資料

1. 浏覽器為什麼要送出資料給伺服器?

告訴伺服器要做提供什麼樣的服務

2. 浏覽器送出資料的方式?

URL:将資料綁定在url之後

表單:<form>,将所有的要送出的資料放到對應的表單内部

POST:資料采用post方式送出,post送出是将資料打包送出,不會綁定在url後面

GET:資料采用get方式送出,浏覽器将form表單中的資料自動的綁定到url後面

3. post和get的差別

a) 送出方式不一樣,post送出看不到資料,但是get可以看到(在URL後面)

b) 安全性不一樣:post看不見,get看得見

c) 二者傳輸的資料量不一樣:get理論上不超過2KB,post理論上可以達到8M

伺服器接收資料

1. php采用什麼方式接收資料?

a) $_GET:接收全部get方式送出的資料,形成的是一個數組,表單名字(name屬性)作為鍵名,資料作為鍵值

b) $_POST:接收全部post方式送出的資料,與$_GET形式一樣。

c) $_REQUEST:不管是get方式送出還是post方式送出,都能夠接收,而且還能接受其他額外資料。

$_REQUEST接收資料存在安全漏洞,原因是因為$_REQUEST = array_merge($_GET,$_POST);

php.ini中有一個選項控制$_REQUEST的覆寫順序:request_order

如果是在低版本中可能沒有該選項,有一個variables_order,是用來控制$_REQUEST裡面的變量順序

請求處理

get請求

post請求

任何沒有name屬性的表單,浏覽器都不會送出給伺服器

資料接收或者判斷的前處理

使用isset函數進行資料判斷

複選框的使用

checkbox通常情況下不止一個資料

1. 制作表單

2. 接收資料

沖突:表單中複選框通常一個類複選框名字都是同一個,資料送出之後伺服器在接收資料的時候,會将所有的同名的表單進行資料的覆寫,最終隻保留一個。

解決方案:

被同名表單元素的name屬性增加中括号,浏覽器會正常的當做字元串來解析和處理,但是一旦送出到伺服器,php看到中括号會當做數組處理(不會覆寫,增加元素)

1. 修改表單:給checkbox的name屬性,增加中括号

2. 伺服器正常接收資料;

使用者資訊都需要儲存到資料庫:數組不能傳輸給資料庫,數組也不能夠儲存到資料庫。

提取checkbox儲存的資訊,反顯到對應的checkbox,顯示給使用者

1. 從資料庫擷取:擷取到是字元串,需要将字元串反轉成數組:explode

2. 如何确定哪些checkbox是被選中的呢?

in_array:判斷一個值是否在數組中存在,如果存在傳回true,失敗傳回false

檔案傳輸流

資料在網絡間傳輸的形式分為兩種:字元流和二進制流

資料傳輸一定隻能是二進制。

字元流:資料的傳輸是按照有效字元串進行傳輸(資料本身是字元串)

二進制流:資料本身是二進制格式

不管是get方式還是post方式所能送出的資料,隻能是字元流。浏覽器預設的不能送出二進制流資料。(檔案,圖檔都不能送出給伺服器)。