組:定義,數組做什么的
PHP中數組的特點:數組沒有類型,沒有長度限制,可以有文本下標
數據遍歷:foreach遍歷,for(數組是從0開始,順序增長的索引數組,count),each+list,一些列數組函數(current,key,next,prev,end,reset)
數組相關的函數
字符串-數組:explode,implode
驗證碼:range,array_rand(獲取元素下標,順序排序),shuffle
數據結構的模擬:棧和隊列,array_push(入棧),array_pop(出棧),array_unshift,array_shift
SQL注入:addslashes,stripslashes(將添加的轉義符號去掉)
用戶在瀏覽器里輸入相關數據,數據需要提交到服務器。
瀏覽器到底是如何將數據傳遞給服務器的?
url傳遞數據
表單提交數據(form)
PHP獲取瀏覽器提交數據的方式:
$_GET:獲取用戶get方式提交的數據,url地址欄里面的數據
$_POST:獲取用于post方式提交的數據,表單提交的數據
$_REQUEST:獲取以上兩種方式提交的數據(進行合并)
嚴格的講,瀏覽器只有兩種提交數據的方式:get提交和post提交
Get提交:url里本身的數據,表單get方式提交的數據
Post提交:表單以post形式提交的數據
$_REQUEST會對post和get方式提交的數據進行合并:array_merge()
Array_merge($_GET,$_POST):如果post方式提交的數據,如果與get方式提交的數據,有同名下標,則會用post覆蓋get。
是什么絕對了是post覆蓋get而不是get覆蓋post?
是配置文件決定了順序:php.ini中一個叫做request_order的配置,決定了覆蓋的順序
這個順序決定了數據數組在array_merge()里面出現的順序
如果在低版本里,可能沒有request_order這個配置,是用variables_order配置的。
注意:
1.通常session不會放到$_REQUEST里去,$_REQUEST里通常會保存get,post和cookie數據。
2.$_REQUEST要慎用,因為$_REQUEST不安全。
Get與post的區別
1.安全性:post提交的數據看不見(一般用戶看不到),get都是在地址欄里,用戶一眼就可以看到;用戶可以直接修改地址欄的信息
2.Get方式能提交的數據是有限的(比較少),比post小很多。
3.Get和post都只能提交字符流數據,如果要進行文件的傳輸(二進制流),必須使用post方式提交(配合其他)
如何選擇使用get方式還是post方式提交數據?
1.如果數據安全性要求不高,且數據量比較少,可以使用get方式(因為簡單,不需要使用表單)
2.如果數據量大,或者安全性要求較高(秘密等),應該使用post提交
3.如果要上傳完文件,非post莫屬
在PHP5.3以前,可以修改PHP的配置文件,register_globals,能夠將用戶提交的表單,直接生成表單名字對應的變量
<form method=”post” action=”post.php”>
用戶名:<input type=”text” name=”username”/>
密碼:<Input type=”password” name=”password” />
<input type=”submit” value=”提交”/>
</form>
當用戶提交到對應的PHP界面post.php中,默認的只能使用$_POST獲得用戶的數據
$_POST[‘username’],$_POST[‘password’];
Php.ini:register_globals=on
$username,$password
從PHP5.3開始,這個功能被廢棄,5.4之后直接刪除了。
1.不安全,用戶提交的數據不是很方便驗證
2.PHP不相信任何外來數據
如果用戶表單提交界面,使用js對用戶提交的所有表單數據進行驗證。那么PHP還有沒有必要對表單提交的數據進行驗證?(數據合法性)
答案的肯定有必要!
對于PHP來講,js驗證過的數據依然是外部數據。Js可以被用戶禁用,所以PHP還必須對數據進行驗證。
如果在一個PHP腳本中,既有PHP代碼,又有html表單,同時該表單還是提交到當前頁。就需要對用戶操作進行判斷,用戶究竟是直接請求還是提交
Checkbox
復選框語法
籃球<input type=”checkbox” name=”名字” value=”值”/>
表現形式
技術實現
1.如何提交復選框的內容
表單
提交接收
選擇了多個復選框,卻只得到一個復選框的值
1)什么樣的復選框能夠被提交
復選框必須要有name屬性
只有被選中的復選框才會被提交
2)多個復選框選中之后,只有一個被提交?
因為復選框的名字重復,瀏覽器只提交一個該名字的表單元素。最后一個被選中的復選框元素。
解決方式:給不同的復選框不同的名字,可以解決選中提交被覆蓋的問題
3)無法區分復選框是否屬于一類的問題?
采用數組的形式:給定name屬性的值增加一個中括號[]
加上中括號之后,瀏覽器就不會把這個看似一樣的名字當做相同的名字
提交之后
復選框加上中括號不會覆蓋名字的原理
將表單復選框選中的元素添加到數據庫
使用PHP1405數據庫
創建hobby表
插入數據庫代碼
將數據從數據庫拿出來并顯示
之前所選擇的愛好信息,在顯示的時候,能夠自動勾選上。
1.取出數據
2.把數據從字符串轉化成數組
3.遍歷數組,匹配選擇
1)如何讓復選框默認被選中?
在表單里添加一個checked=”checked”屬性
2)如何判斷一個元素是否在數組中存在?
In_array,判斷一個元素字符在數組中存在,如果存在返回true,否則返回false
作業:將復選框顯示采用數組遍歷,構造checkbox表單的形式。
將用戶瀏覽器端的文件上傳到服務器端的過程就是文件上傳。
1) 哪里會用到文件上傳?
頭像管理,相冊管理,共享文件,文件下載。。。
2)文件上傳瀏覽器端,要做什么呢?
1. 選中文件
2. 點擊上傳
3)文件上傳服務端,要做什么呢?
1. 接收用戶上傳的文件
2. 判斷文件的類型和內容
3. 將文件保存到服務器上
如果要實現文件上傳,必須保證兩點:
1.瀏覽器要有文件表單域
保證表單的提交方式是post
<input type=”file” name=”名字” />
2.保證PHP允許文件上傳功能
配置文件開啟文件上傳功能
修改臨時文件上傳的路徑
如果不做修改,那么該目錄指的是操作系統的臨時目錄,win7對應的是C:/Windows/Temp
文件上傳
1.準備文件上傳表單
2.準備接收文件的PHP文件
3.提交測試
文件沒有上傳成功,只是上傳了一個文件名。原因?
Get或者post都只能提交字符流的字符串,不能夠提交二進制流數據,而文件本身是二進制流
4.修改文件上傳表單域,增加一個二進制流配置enctype=”multipart/form-data”
經測試,怪異的事情發生了,原來保存著$_POST里面的文件名不見了。原因?
文件上傳成功了!
但是因為腳本立即結束,臨時文件馬上被刪除了。如果想要看臨時文件是否存在
5.PHP真正接收上傳的文件
$_FILES預定義全局變量,保存用戶上傳的文件信息。
6.將臨時文件給放到指定的文件上傳目錄
PHP提供了兩個函數
Copy:將一個文件復制一份,將復制的這份放到指定的目錄(會保留源文件)
Move_uploaded_file:將上傳的文件移動到指定的目錄(不會保留源文件)
文件上傳流程
文件上傳會因為編碼的原因導致上傳的中文名字會變成亂碼。所以解決該問題的方式,就是對上傳的文件進行重命名。
文件重命名
改變的是文件的名字,不改變文件后綴名
1.修改文件名字(系統生成)
2.保證原來文件的后綴名
文件上傳函數封裝(簡單)
1.判斷用戶是否上傳文件
2.正常情況下應該判斷文件上傳錯誤信息
只要當文件上傳錯誤信息為0的時候才上傳成功的,其他都是上傳失敗
3.文件重命名
4.移動文件
5.調用文件上傳函數
PHP中沒有算法,在底層的語言當中算法應用的比較多。
基本排序算法:冒泡算法,選擇排序,插入排序,快速排序。
都是對數組進行排序,數組里面都是數值元素
冒泡算法
假設升序排序,每次將最大的那個數值給冒到最后
原理
代碼
找出元素在數組中存在的位置。(下標)
查找就是遍歷數組,拿元素與需要查找的值進行比對,比對成功則返回對應的下標,失敗則繼續直到數組末尾。
二分法
前提:要查找的數組是一個已經排序好的數組。
將數組進行折半,對中間元素進行比較,如果沒有得到結果則從另外一半再進行折半,直到找到對應的元素
原理
代碼
相關鏈接:重蔚php學習第二十八天——數組,二維數組,數組的遍歷
重蔚php學習第二十八天——數組,數組相關函數,數據結構模擬
例
帶有兩個輸入字段和相關標記的簡單 HTML 表單:
<form action="demo_form.asp">
<label for="male">Male</label>
<input type="radio" name="sex" id="male" value="male"><br>
<label for="female">Female</label>
<input type="radio" name="sex" id="female" value="female"><br>
<input type="submit" value="提交">
</form>
瀏覽器支持
目前大多數瀏覽器支持 <label> 標簽。
標簽定義及使用說明
<label> 標簽為 input 元素定義標注(標記)。
label 元素不會向用戶呈現任何特殊效果。不過,它為鼠標用戶改進了可用性。如果您在 label 元素內點擊文本,就會觸發此控件。就是說,當用戶選擇該標簽時,瀏覽器就會自動將焦點轉到和標簽相關的表單控件上。
<label> 標簽的 for 屬性應當與相關元素的 id 屬性相同。
提示和注釋
提示:"for" 屬性可把 label 綁定到另外一個元素。請把 "for" 屬性的值設置為相關元素的 id 屬性的值。
HTML 4.01 與 HTML5之間的差異
"form" 屬性是 HTML5 的新屬性。
屬性
New:HTML5 新屬性。
屬性 | 值 | 描述 |
---|---|---|
for | element_id | 規定 label 與哪個表單元素綁定。 |
formNew | form_id | 規定 label 字段所屬的一個或多個表單。 |
全局屬性
<label> 標簽支持全局屬性,查看完整屬性表 HTML全局屬性。
事件屬性
<label> 標簽支持所有 HTML事件屬性。
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
些時候我們不希望,回車就向服務器提交當前表單,以下方法親測有效,僅供參考
當form中含有文本框如下:
<form action="../test.php">
<input type="text" id="txt1"/>
</form>
在文本框輸入回車后會導致頁面提交,如下:
這未必是我們想要的效果。
為了防范這種情況發生,可以這么做:
<form action="../test.php">
<input type="text" id="txt2" onkeydown="if(event.keyCode==13){event.keyCode=0;test();return false;};"/>
</form>
這樣就可以根據我們的需要,在按下回車鍵的時候讓頁面執行我們希望的操作。
全體代碼:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。