日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

一、PHP基础——表单传值、上传文件

發布時間:2024/7/5 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一、PHP基础——表单传值、上传文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

表單傳值

  • 概念:
    表單傳值即瀏覽器通過表單元素將用戶的選擇或者輸入的數據提交給后臺服務器語言。

  • 為什么使用表單傳值?
    動態網站(Web2.0)的特點就是后臺根據用戶的需求定制數據,所謂的“需求”就是用戶通過當前的選擇或者輸入的數據信息,表單就是這些數據的承載者。

  • 表單傳值方式
    GET傳值
    1)form表單

  • <form method=”GET”>表單元素</form>

    2)a標簽

    <a href=”www.itcast.cn/index.php?學科=PHP”>

    3)location對象的href屬性

    <script>location.href=”www.itcast.cn/index.php?data=PHP</script>

    4)location對象的assign()方法

    <script>location.assign(“www.itcast.cn/index.php?data=PHP)</script>

    POST傳值
    1)post表單方式的基本設定

    表單元素 2)post方式跟get方式的區別

    1、 Get傳輸的數據主要用來獲取數據,不改變服務器上資源:get只是用來獲取內容
    2、 Post傳輸的數據主要用來增加數據,改變服務器上資源:POST會改變服務器上數據內容
    3、 傳輸方式上post必須使用form表單,而get可以使用form表單和URL
    4、 get傳輸數據可以在URL中對外可見,而post不可見:GET傳值最終會在瀏覽器的地址欄中全部顯示:?數據名=數據值&數據名2=數據值2…
    5、 get和post能傳輸的數據大小不同,get為2K,post理論無限制(事實上,GET和POST本身沒有數據長度限制,但是瀏覽器廠家做了一些限制)
    6、 get和post能夠傳輸的數據格式有區別:get傳輸簡單數據(數值/字符串),post可以提交復雜數據(二進制等)

    PHP接收數據的三種方式
    不管是$_GET/$_POST/$_REQUEST,三個都是PHP超全局(沒有范圍限制)預定義數組,表單元素的“name”屬性的值作為數組的下標,而value屬性對應的值就是數組的元素值

    $_GET方式:接收GET方式提交的數據 $_POST方式:接收POST方式提交的數據 $_REQUEST方式:接收POST或者GET提交的所有數據 1$_REQUEST所存儲數據的內容:將$_POST$_GET合并存儲到一個數組 2$_REQUEST$_POST$_GET的聯系:如果GETPOST中有同名數組元素(下標),POST會覆蓋GETPHP中數組元素下標具有唯一性),這個可以在php.ini中進行配置

    GET/POST/REQUEST關系:

    證明在REQUEST中POST會覆蓋GET:

    PHP處理復選框數據
    復選框表單項的命名方式
    復選框:通常是將一類內容以同樣(同名)的形式傳遞給后臺,數據庫存儲通常是一個字段存儲。復選框的特點:選中才會提交

    1、 在瀏覽器端,checkbox的name屬性的值不論什么都會被瀏覽器毫無保留的提交
    2、 在PHP中POST/_POST/P?OST/_GET都會對同名name屬性進行覆蓋

    解決方案:瀏覽器不識別[](瀏覽器不認為有特殊性),但是PHP認為[]有特殊性:系統自動認為該符號是數組的形式,所以PHP就會自動的將同名的但是帶有[]的元素組合到一起形成一個數組

    復選框數據的接收形式
    PHP會自動組合同名元素的為數組

    PHP處理復選框數據
    復選框數據的常見處理
    1)單選按鈕的數據處理
    Radio button:可以出現多個選擇項,但是只能選擇其中一個
    1、 表單中使用的name屬性,使用同名即可:只能選中一個
    2、 后臺接收數據也不需要額外處理
    3、 數據庫存儲的話只需要一個字段存儲普通數據即可(數字或者字符串)

    4、 PHP拿到數據之后,組織SQL直接存儲到數據表即可
    2)多選按鈕的數據處理
    1、 表單中name屬性使用數組格式:名字[](一類復選框數據使用一個)
    2、 后臺接收到數據之后,是一個數組(數組不能存儲到數據庫)
    3、 PHP需要將數組轉換成指定格式的字符串:使用分隔符分隔每一個元素并且形成字符串:implode(’分隔符’ ,數組)

    4、 PHP組織SQL直接存儲到數據庫

    取出來復選框數據顯示
    1、 如果是反過來操作,那么取出數據之后使用explode把字符串變成數組

    2、 在HTML顯示當中,通過判斷復選框元素是否在數組中存在,來確定復選框checkbox是否有checked=“checked”屬性:in_array()

    3)其他常規同名表單項的數據處理
    除開radio button單選框和checkbox復選框,很少會出現同名的表單項。如果非要使用同名的來進行管理,那么可以采用checkbox方式進行操作
    1、 表單中同名增加[]
    2、 PHP接收時數組處理
    3、 PHP轉換成有格式的字符串
    4、 數據庫字符串存儲

    復選框細節
    如果復選框沒有選中,那么瀏覽器就不會提交。因此在PHP接收使用復選框(單選框)數據的時候,應該先判斷是否存在該數據

    文件上傳
    原理
    文件上傳:文件從用戶本地電腦通過傳輸方式(Web表單)保存到服務器所在電腦指定的目錄下。

    1、 增加文件上傳的表單:瀏覽器請求一個服務器的HTML腳本(包含文件上傳表單)
    2、 用戶從本地選擇一個文件(點擊上傳框(按鈕))
    3、 用戶點擊上傳:文件會通過物聯網傳輸到服務器上
    4、 服務器操作系統會將文件保存到臨時目錄:是以臨時文件格式保存(windows下tmp)
    5、 服務器腳本開始工作:判斷文件有效
    6、 服務器腳本將有效文件從臨時目錄移動到指定的目錄下(完成)

    表單寫法
    1)method屬性:表單提交方式必須為POST
    2)enctype屬性:form表單屬性,主要是規范表單數據的編碼方式

    3)上傳表單:file表單

    在PHP中,有一個預定義變量$_FILES是專門用來存儲用戶上傳的文件的。

    測試:如果沒有enctype屬性,那么上傳文件會是什么樣子?
    $_FILES變量詳解
    1)name:文件在用戶(瀏覽器端)電腦上實際存在的名字(實際用來保留后綴)
    2)tmp_name:文件上傳到服務器后操作系統保存的臨時路徑(實際用來給PHP后期使用)
    3)type:MIME(多功能互聯網郵件擴展)類型,用來在計算機中客戶端識別文件類型(確定軟件)
    4)error:文件上傳的代號,用來告知應用軟件(PHP)文件接收過程中出現了什么問題(PHP后期根據代碼進行文件判斷)

    5)size:文件大小(PHP根據實際需求來確定是否該保留)
    移動臨時文件到目標位置
    文件上傳之后會保存到FILES中,那么訪問文件信息的形式就是_FILES中,那么訪問文件信息的形式就是F?ILES_FILES[‘表單name屬性值’][‘元素信息’]

    1)判斷是否為上傳的文件:is_uploaded_file()

    2)移動文件:move_uploaded_file()


    多文件上傳
    當商品需要上傳多個圖片進行展示的時候:那么需要使用多文件上傳
    針對一個內容但是不同文件說明:同名表單

    當商品需要進行多個維度圖片說明的時候:需要使用多文件上傳
    針對是不同內容所以表單名字不一樣:批量解決問題

    多文件上傳的$_FILES變量的數據結構形式

    批量上傳:同名表單:將表單名字形成一個數組,而且同時將文件對應的五個要素:name、tmp_name、size、type、error都形成對應數量的數組,每個文件上傳對應數組元素的下標都是一樣的:name[0] 和type[0]是屬于同一個文件


    批量上傳:不同名表單:每個文件都會形成一個屬于自己獨立的5個元素的數組

    當商品需要上傳多個圖片進行展示的時候:那么需要使用多文件上傳
    針對一個內容但是不同文件說明:同名表單

    當商品需要進行多個維度圖片說明的時候:需要使用多文件上傳
    針對是不同內容所以表單名字不一樣:批量解決問題

    多文件上傳的$_FILES變量的數據結構形式

    批量上傳:同名表單:將表單名字形成一個數組,而且同時將文件對應的五個要素:name
    Tmp_name、size、type、error都形成對應數量的數組,每個文件上傳對應數組元素的下標都是一樣的:name[0] 和type[0]是屬于同一個文件

    批量上傳:不同名表單:每個文件都會形成一個屬于自己獨立的5個元素的數組


    對多文件信息的遍歷讀取和處理

    1、 不同名多文件上傳處理方式:按照表單名字從FILES中取出來就可以直接使用(明確知道表單中有多少個文件上傳);如果不確定表單中有多少個文件上傳,不適合挨個去取(效率不高),可以通過遍歷_FILES中取出來就可以直接使用(明確知道表單中有多少個文件上傳);如果不確定表單中有多少個文件上傳,不適合挨個去取(效率不高),可以通過遍歷F?ILES使_FILES數組,挨個取出來實現文件上傳


    2、 同名多文件上傳:想辦法得到一個文件對應的五個元素數組。從$_FILES中把對應的name\tmp_name\size\error\type挨個取出來,然后存放到不同的數組中。

    文件上傳后續問題
    實現上傳功能代碼的重復利用:封裝文件上傳函數
    功能:上傳文件
    條件:條件判斷
    需要上傳的文件信息:對應的5個元素的數組
    1、 文件類型是否合適?外部指定MIME類型
    2、 文件存儲到什么位置?外部指定
    3、 文件格式限制(文件后綴)?外部限定
    4、 文件大小限制?外部指定
    結果:實現文件上傳
    1、 成功:結果能夠在以后看到:需要將文件的路徑和文件名字返回(存儲到數據庫)
    2、 失敗:返回false,指定錯誤原因(引用參數)

    1)封裝出一個上傳函數

    2)判斷文件是否有效

    3)判斷保存路徑是否有效

    4)判斷文件本身上傳的過程中是否有錯誤:error

    2)文件類型的處理
    3)文件格式的處理
    4)文件大小的處理
    5)命名沖突的處理
    文件上傳后續問題
    實現上傳功能代碼的重復利用:封裝文件上傳函數
    功能:上傳文件
    條件:條件判斷
    需要上傳的文件信息:對應的5個元素的數組
    1、 文件類型是否合適?外部指定MIME類型
    2、 文件存儲到什么位置?外部指定
    3、 文件格式限制(文件后綴)?外部限定
    4、 文件大小限制?外部指定
    結果:實現文件上傳
    1、 成功:結果能夠在以后看到:需要將文件的路徑和文件名字返回(存儲到數據庫)
    2、 失敗:返回false,指定錯誤原因(引用參數)

    1)封裝出一個上傳函數

    2)判斷文件是否有效

    3)判斷保存路徑是否有效

    4)判斷文件本身上傳的過程中是否有錯誤:error

    5)文件類型的處理:通過MIME匹配即可

    6)文件格式的處理:后綴名的問題

    7)文件大小的處理

    8)移動到指定目錄

    8)命名沖突的處理:上傳同名文件?中文名字文件怎么辦?


    完整代碼:

    <!doctype html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head> <body> <form action="12-file_upload_function.php" method="post" enctype="multipart/form-data"><input type="file" name="image" /><input type="submit" name="btn" value="上傳文件"> </form> </body> </html> <?php// PHP文件上傳功能封裝函數 /** 實現文件上傳(單)* @param0 array $file,需要上傳的文件信息:一維5元素數組(name/tmp_name/error/size/type)* @param1 array $allow_type,運行上傳的MIME類型* @param2 string $path,存儲的路徑* @param3 string &$error,如果出現錯誤的原因* @param4 array $allow_format = array(),允許上傳的文件格式* @param5 int $max_size = 2000000 ,允許上傳的最大值*/ //print_r($_FILES); function upload_single($file, $allow_type, $path, &$error, $allow_format = array(), $max_size = 2000000) {// 判斷文件是否有效if (!is_array($file) || !isset($file['error'])) {// 文件無效$error = '不是一個有效的上傳文件';return false;}// 判斷文件存儲路徑是否有效if (!is_dir($path)) {// 路徑不存在$error = '文件存儲路徑不存在!';return false;}// 判斷文件上傳過程是否出錯switch ($file['error']) {case 1:case 2:$error = '文件超出服務器允許大小';return false;case 3:$error = '文件上傳過程中出現問題,只上傳一部分';return false;case 4:$error = '用戶沒有選中要上傳的文件!';return false;case 6:case 7:$error = '文件保存失敗';return false;}// 判斷MIME類型if (!in_array($file['type'], $allow_type)) {// 該文件類型不允許上傳$error = '當前文件類型不允許上傳!';return false;}// 判斷后綴是否允許// 取出后綴$ext = ltrim(strrchr($file['name'],'.'), '.');if (!empty($allow_format) && !in_array($ext, $allow_format)) {// 不允許上傳$error = '當前文件的格式不允許上傳!';return false;}// 判斷當前文件大小是否滿足需求if ($file['size'] > $max_size) {// 文件過大$error = '當前上傳到文件超出大小,允許上傳的最大值為:' . $max_size . '字節';return false;}// 構造文件名字:類型_年月日+隨機字符串.$ext$fullname = strstr($file['type'],'/',true) . date('YYYYmmdd');// 產生隨機字符串for($i = 0; $i<4; $i++){$fullname .= chr(mt_rand(65,90));}// 拼湊后綴名$fullname .= '.' . $ext;// 移動到指定目錄if (!is_uploaded_file($file['tmp_name'])) {// 文件不是上傳文件$error = '錯誤,文件不是上傳文件!';return false;}if (move_uploaded_file($file['tmp_name'],$path . '/' . $fullname )){// 成功return $fullname;}else {// 移動失敗$error = '文件上傳失敗!';return false;}}// 提供數據 $file = $_FILES['image']; $path = 'uploads'; $allow_type = array('image/jpg','image/jpeg','image/gif','image/pjpeg'); $allow_format = array('jpg','gif','jpeg'); $max_size = 80000000;if ($filename = upload_single($file,$allow_type,$path,$error,$allow_format,$max_size)) {echo $filename; }else{echo $error; }

    總結

    以上是生活随笔為你收集整理的一、PHP基础——表单传值、上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。