首頁  >  文章  >  後端開發  >  form表單在PHP的實作方式

form表單在PHP的實作方式

王林
王林轉載
2019-08-29 16:22:085292瀏覽

1、表單的基本使用

HTML 中有一個專門用於提交資料的標籤: ff9c23ada1bcecdd1a0fb5d5a0f18437 ,透過這個標籤可以很容易的收集使用者輸入.

form 標籤有兩個必要屬性:
  action:表單提交地址(填完了,交給誰)
  method:表單以什麼方式提交

#例如,我們需要在登入介面上收集使用者輸入的使用者名稱和密碼:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF‐8">
  <title>登录</title>
</head>
<body>
  <form action="login.php" method="post">
    <div>
      <label for="username">用户名</label>
      <input type="text" id="username" name="username">
    </div>
    <div>
      <label for="password">密码</label>
      <input type="password" id="password" name="password">
    </div>
    <button type="submit">登录</button>
  </form>
</body>
</html>

按照目前的情況,使用者第一次要求得到這個表單頁面,填寫完表單內容,點擊登錄,表單會自動傳送到login .php ,剩下的問題就是要考慮如何在login.php 中取得到使用者提交過來的內容.

PHP 中有三個超全域變數專門用來取得表單提交內容:
   $_GET :用於取得以GET 方式提交的內容
   $_POST :用於取得以POST 方式提交的內容
   $_REQUEST :用於取得GET 或POST 方式提交的內容

使用  $_POST 或  $_REQUEST 就可以取得表單提交的內容:

<?php
// 获取表单提交的用户名和密码
echo &#39;用户名:&#39; . $_REQUEST[&#39;username&#39;];
echo &#39;密码:&#39; . $_REQUEST[&#39;password&#39;];

1.1、提交地址

action 提交地址指的是這個表單填寫完成過後點擊提交,發送請求的請求地址是什麼。
從便於維護的角度考慮,一般我們最常見的都是提交給當前文件,然後在當前文件中判斷是否是表單提交請求:

<?php
if ($_SERVER[&#39;REQUEST_METHOD&#39;] === &#39;POST&#39;) {
  // 表单提交请求
  }

另外,建議使用$_SERVER ['PHP_SELF'] 動態取得目前頁面存取路徑,這樣就不用因為檔案重新命名或網站目錄結構調整而修改程式碼了:

<!‐‐ 这样写死 action 地址,当文件重命名就需要修改代码 ‐‐>
<form action="/foo/login.php">
  <!‐‐ ... ‐‐>
</form>
<!‐‐ 通过 `$_SERVER[&#39;PHP_SELF&#39;]` 获取路径,可以轻松避免这个问题 ‐‐>
<form action="<?php echo $_SERVER[&#39;PHP_SELF&#39;]; ?>">
  <!‐‐ ... ‐‐>
</form>

#1.2、提交方式

method 可以用來設定表單提交的方式,目前我們所認識的就是最常見兩種表單提交方式: GET 和POST 。
  從效果上來看,兩者都可以將資料提交到服務端,但是從實現提交的原理上兩者有很大的不同:
GET
  表單資料是透過URL 中的? 參數傳遞到服務端的
  可以在地址列中看到提交的內容
  資料長度有限制,因為URL 位址長度有限(2000個字元)
POST
  表單資料是透過請求體傳遞到服務端的,我們在介面上看不到
  可以提交任何類型的數據,包括文件
  由於介面上看不見,瀏覽器也不儲存,所以更安全
  至於什麼情況下應該選用哪種方式,這個需要結合業務場景和這兩種方式各自的特點來決定,沒有絕對的答案,只能給出一些原則:
  絕不能使用GET 來發送密碼或其他敏感資訊! ! !
  應該想清楚這次請求到底主要是去拿東西,還是去送東西

#2、常見表單元素處理

#至於表單元素中的文本框文字域一類的元素,都是直接將元素的name 屬性值作為鍵,使用者填寫的資訊作為值,傳送到服務端。但表單元素中還有一些比較特殊的表單元素需要單獨考慮:

2.1單選按鈕

<!‐‐ 最终只会提交选中的那一项的 value ‐‐>
<input type="radio" name="gender" value="male">
<input type="radio" name="gender" value="female">

2.2、複選按鈕

<!‐‐ 没有设置 value 的 checkbox 选中提交的 value 是 on ‐‐>
<input type="checkbox" name="agree">
<!‐‐ 设置了 value 的 checkbox 选中提交的是 value 值 ‐‐>
<input type="checkbox" name="agree" value="true">

如果需要同時提交多個選取項,可以在  name 屬性後面跟上  [] :

https://www.php.net /manual/zh/faq.html.php#faq.html.arrays

<input type="checkbox" name="funs[]" id="" value="football">
<input type="checkbox" name="funs[]" id="" value="basketball">
<input type="checkbox" name="funs[]" id="" value="world peace">

最終提交到服務端,透過  $_POST 接收到的是索引數組.

2.3、選擇框

<select name="subject"> 
<!‐‐ 设置 value 提交 value ‐‐>  
<option value="1">语文</option>  
<!‐‐ 没有设置 value 提交 innerText ‐‐>  
<option>数学</option>
</select>

2.4檔案上傳

type 屬性為file 的input 元素可以透過表單提交文件(上傳文件),服務端PHP 可以透過$_FILES 取得上傳的文件資訊。

<?php
// 如果选择了文件 $_FILES[&#39;file&#39;][&#39;error&#39;] => 0
// 详细的错误码说明:http://php.net/manual/zh/features.file‐upload.errors.php
if ($_FILES[&#39;file&#39;][&#39;error&#39;] === 0) {
  // PHP 在会自动接收客户端上传的文件到一个临时的目录
  $temp_file = $_FILES[&#39;file&#39;][&#39;tmp_name&#39;];
  // 我们只需要把文件保存到我们指定上传目录
  $target_file = &#39;../static/uploads/&#39; . $_FILES[&#39;file&#39;][&#39;name&#39;];
  if (move_uploaded_file($temp_file, $target_file)) {
    $image_file = &#39;/static/uploads/&#39; . $_FILES[&#39;file&#39;][&#39;name&#39;];
  }
}

$_FILES 同樣也是一個關聯數組,鍵為表單的  name ,內容如下:

array(1) {
  ["avatar"]=>
  array(5) {
    ["name"]=>
    string(17) "demo.jpg"
    ["type"]=>
    string(10) "image/jpeg"
    ["tmp_name"]=>
    string(27) "C:\Windows\Temp\php786C.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(29501)
  }
}

更多相關問題請存取PHP中文網:PHP影片教學

以上是form表單在PHP的實作方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除