整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          重蔚php學習第二十八天-表單文件上傳

          重蔚php學習第二十八天-表單文件上傳

          組:定義,數組做什么的

          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 新屬性。

          屬性描述
          forelement_id規定 label 與哪個表單元素綁定。
          formNewform_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>

          這樣就可以根據我們的需要,在按下回車鍵的時候讓頁面執行我們希望的操作。

          全體代碼:


          主站蜘蛛池模板: 糖心vlog精品一区二区三区| 好吊视频一区二区三区| 成人在线视频一区| 日本一区二区三区在线视频观看免费| 精品视频一区二区观看| 久久精品亚洲一区二区| 国产伦精品一区二区三区在线观看 | chinese国产一区二区| 色婷婷一区二区三区四区成人网 | 色一情一乱一区二区三区啪啪高| 搜日本一区二区三区免费高清视频| 色妞AV永久一区二区国产AV| 无码人妻精品一区二区三区蜜桃 | 国模吧一区二区三区| 国产乱码精品一区二区三区麻豆 | 国产麻豆剧果冻传媒一区| 少妇激情av一区二区| 国产成人高清视频一区二区| 中文字幕av一区| 日本免费一区二区三区| 中文字幕久久亚洲一区| 激情啪啪精品一区二区| 在线免费视频一区| 精品无码成人片一区二区98| 久久久91精品国产一区二区三区| 视频一区二区在线观看| 日韩一区二区三区射精| 一区二区三区观看免费中文视频在线播放 | 无码少妇一区二区浪潮av| 97久久精品无码一区二区 | 中文字幕在线观看一区二区| 国产一区二区精品在线观看| 夜夜高潮夜夜爽夜夜爱爱一区| 亚洲香蕉久久一区二区三区四区| 久久精品岛国av一区二区无码| 精品国产福利第一区二区三区| 中文字幕在线不卡一区二区| 亚洲一区AV无码少妇电影☆| 亚洲午夜在线一区| 成人无码精品一区二区三区| 精品无码人妻一区二区三区18|