PHP form data, post, get

Ming-chiao Wu Jojo
3 min readFeb 23, 2017

--

基礎的做法在html裡面建立form
<form action=”xxx.php” method=”post || get”>
<label for=”element_xx”>element here</label>
<input type=”hidden” id =”element_xx” name=”element_name” value=”whatevert” />
<input type=”text” name=”another_name” value=333 />
<input type=”submit” value=”Send”/>
</form>

label和input的關係
label的for 會指向input的id,
若有成對的值, 點擊label就會focus在對應的input;(有助於盲人找到input)

不過$_GET[‘xxx’], $_POST[‘yyy’] 所對應的則是input的’name’

**當按下send(submit)時, 就會轉向 xxx.php**

如果form的method是用’get’ form裡面的參數就會寫入到url中
如: xxx.php?element_name=whatever&another_name=333

$_POST, $_GET

在xxx.php中
如果寫$_POST會把所有送過來的data包成array物件
若是寫$_POST[“element_name”],
則取得特定name為element_name的值//whatever

$_GET 取得所有url傳過來的參數 包進array中
$_GET[‘property_name’]
去得url中特定property的值

防止重複反應

form物件再送出時 假設在反應頁面A 需要送出通知信件
但如果在A頁面reload, 可能就會重複送出
針對這狀況有兩種解法

a. 在頁面A 另外寫一支redirect的頁面導向頁面C
(常見的是thanks.php 感謝頁面)
redirect寫法: header(‘thanks.php’);
這樣頁面在進入xxx.php一下子後 就會進入thanks.php
使用者就沒機會去reload xxx.php頁面

b. 如果沒有轉換頁面的情境,
1.post到現有頁面,
2.頁面判斷是否為post方法
3.redirect現有頁面並加入get參數status(自訂參數)
4.頁面判斷get的status來顯示不同內容

1.把form 的action 改為 “formPage.php”, method為post,
當submit送出後 就還是在原本頁面,
2.在form頁面的最前面寫判斷式
if($_SERVER[“REQUEST_METHOD”] == “POST”) {}
當這個頁面是從POST方法導入的 就會進入判斷式
在判斷式中放入寄送mail的方法,
3.在寄送mail方法後 加入redirect(‘formPage.php?status=ok’)
就會用get方法再導入相同的頁面
4.在頁面中寫入判斷式
if(isset($_GET[‘status’]) && $_GET[‘status’] == ‘ok’){
//thanks 訊息
}else {
//form的內容
}

--

--

Ming-chiao Wu Jojo
Ming-chiao Wu Jojo

Written by Ming-chiao Wu Jojo

Front-end developer, now self-learning to be a full-stack, love travel, live house, hiking, jogging, foodie, sleep until satisfied. ‘Hello World’

No responses yet