重溫表單
表單是使用<form></form>標簽來創建表單,分別表示表單開始和結束的位置。
表單結構:
<form
name = "form_name" method ="method" action="url" enctype="value" target="target_win" id="id">
.......
</form>
常用屬性解釋:
- name :表單名稱
- id: 表單id號
- method:提交方法,取值有兩種GET和POST.區別是GET方法通過url傳輸,因為很多瀏覽器限制url長度,因此GET傳輸數據有大小限制,不得超過8192個字符,而且內容會顯示在url中。POST方法適合傳輸大量數據,而且不通過url更安全。
- action:指定數據提交到那個位置,可以是絕對的url也可以是相對的url.如果為空,提交到當前文件。
- enctype:設置表單資料的編碼格式,詳細內容見后面處理部分
- target:制定目標窗口和目標幀(沒用到不太懂)
表單元素
輸入標記域
<form>
<input name="field_name" type="type_name">
</form>
參數name指的是輸入域的名字,type指的是輸入域的類型
輸入域類型如下:
-
text: 文本框
<input name="user" type="text" value="this is a text" size="20" maxlength="100"
name為文本框名稱,value為文本框默認值,size指文本框的寬度,maxlength指文本框最大輸入字符數 -
password:密碼域
<input name="password" type="password" value="123456" size="20" maxlength="20"
特殊的文本框吧,輸入字符顯示出來是*號,起到保密作用 -
file:文件域
<input name="file" type="file" enctype="multipart/form-data" size="20" maxlength="200">
文件域用來上傳文件,打開一個模式窗口選擇文件。將文件通過表單上傳到服務器,注意表單屬性enctype要選擇"multipart/form-data"才能實現上傳,具體類型再補充 -
radio:單選按鈕
<input name="sex" type="radio" value="1" checked>男<input name="sex" type="radio" value="0">女
用於設置一組選項,用戶只能選擇一項cheked屬性來設置單選按鈕的默認值 -
checkbox:復選框
<input name="checkbox" type="checkbox" value="1" checked>封面
<input name="checkbox" type="checkbox" value="1" checked>正文內容
<input name="checkbox" type="checkbox" value="0">價格
復選框,允許用戶選擇多個選項,checked屬性用來設置該復選框默認值
-
Submit:提交
<input type="submit" name="Submit" value="提交">
將表單的內容提交到服務器端 -
button:按鈕
<input type="button" name="Submit" value="button"按鈕
可以激發提交表單的操作,可以在用戶需要修改表單的時候恢復表單初始狀態。普通按鈕一般是配合JavaScript進行表單處理
選擇域標記
選擇域標記<select>和<option>可以建立一個列表或者菜單.如果數量過多還會自動出現滾動條
<select name="spec" id="spec">
<option value="0" selected>aaa</option>
<option value="0" selected>bbb</option>
<option value="0" selected>bbb</option>
<option value="0" selected>bbb</option>
就是平時看到的菜單欄選項
文本域標記
其中參數name表示文本域的名稱;row表示文本域的行數;cols表示文本域的列數;value表示文本域的默認值;wrap用於設定顯示和送出時的換行的方式,值為off表示不自動換行;值為hard表示自動按回車鍵換行;換行標記一同被送到服務器,輸出時也會換行;值為soft表示自動按回車鍵換行,換行標記不會被送到服務器,輸出時仍然為一列。
<textarea name="name" rows=a cols=b value="value" wrap="value">
.......
.......
.......
</textarea>
PHP接收數據
表單的action指定了接收POST方法或者GET方法的php腳本,PHP腳本讀取接受的數據的方法是用超全局變量$_GET和$_POST。接收數據之后,是展示,還是存進數據庫,或者進行別的處理,就隨意寫了。
看一個示例就知道怎么處理了,表單假如是這個樣子的
<form action="process.php" methond="POST">
<input name="username" value="ycd">
<input name="psd" type="password" value="123456">
<button>OK</button>
</form>
<?php
$username=$_POST['username'];
$password=$_POST['psd'];
echo 'USER:'.$username." PASSWORD:".$password;
特殊情況:發送文件
如果要發送文件,這在HTML表單中是個特殊的情況,因為文件一般被認為是二進制數據,而且HTTP是個文本協議,所以對於處理二進制數據有特別要求。
enctype屬性
enctype屬性可以改變HTTP請求頭中的Content-Type字段,詳細內容可以參考HTTP協議的內容。這個字段的作用是告訴服務器發送的數據類型。Content-Type的默認值是application/x-www-form-urlencoded,意思是”這份數據已經被編碼為URL格式“.
如果想發送文件,得做兩件事情
- 因為文件內容不能放到url里,所以得把method改成POST
- 將enctype屬性的值改成multipart/form-data,這樣數據被分割成多個部分,成功發送。
示例代碼
<form method="POST" enctype="multipart/form-data">
<input type="file" name="FILE">
<button>Send</button>
</form>
PS:要注意安全性問題,主要是這幾種類,XSS、CSRF、SQL注入、HTTP頭部注入和郵件注入。后續填坑吧