HTML FOR / GET / POST
Như phần HTML FORM, FORM là nơi mà người dùng nhập thông tin và gửi thông tin lên Server. Các phần tử trong FORM như input, select ... có các tên, ta coi nó như là biến. Xet HTML FORM sau:
form/first.php
<form action="first.php" method="post"> <p>Name: <br> <input type="text" name="name" /></p> <p>Age: <br> <input type="text" name="age" /></p> <p><input type="submit" name="submit" value="Gửi đi" /></p> </form>
- Form trên có các biến name, age, submit
- Thuộc tính
action
thiết lập địa chỉ URL mà form gửi dữ liệu biến đến, nếu không có thuộc tính này thì form gửi đến địa chỉ URL load form - Thuộc tính
method
thiết lập kiểu gửi thông tin của form, nhận giá trịpost
hoặcget
Phương thức POST
Khi bạn sử dụng form với method="post" thì các biến gửi đến Server sẽ đặt trong phần Header, Body của HTTP Request do vậy bạn sẽ không nhìn thấy dữ liệu này ở trình duyệt khi gửi, các giá trị biến sẽ được PHP nhận được lưu tại biến định nghĩa trước $_POST. Ngoài ra với POST nó hỗ trợ thêm các chức mở rộng như multi-part, để có thể gửi được file lên Server.
Sửa lại ví dụ trên để kiểm tra:
form/first.php
<?php echo '$_POST<br>'; var_dump($_POST); echo '$_GET<br>'; var_dump($_GET); ?> <form action="first.php" method="post"> <p>Name: <br> <input type="text" name="name" /></p> <p>Age: <br> <input type="text" name="age" /></p> <p><input type="submit" name="submit" value="Gửi đi" /></p> </form>
Bạn submit thử dữ liệu, thì nó có thể có kết quả:
$_POST array (size=3) 'name' => string 'xuanthulab' (length=10) 'age' => string '25' (length=2) 'submit' => string 'Gửi đi' (length=9) $_GET array (size=0)
Như vậy thấy các biến name,age,submit
từ FORM HTML đã chuyển đến PHP trong mảng $_POST
Phương thức GET
Nếu HTML FORM sử dụng method="get" thì khi gửi các biến đi HTTP Request sẽ chứa nó ở chính phần path
của HTTP Request.
Do vậy mà bạn sẽ nhìn thấy dữ liệu ở địa chỉ trình duyệt khi bấm gửi thông tin.
Bạn hay thử thay đổi ví dụ trên thay method bằng get. Thì khi gửi URL có thể có dạng là:
http://localhost/learnphp/form/first.php?name=xuanthulab&age=25&submit=G%E1%BB%ADi+%C4%91i
Đừng bao giờ dùng phương thức GET khi gửi PASSWORD
Kiểm tra là POST hay GET
Khi sử dụng HTML FORM để gửi dữ liệu nếu không có yêu cầu đặc biệt bắt buộc thì hãy chọn phương thức là post
vì nó bảo mật hơn.
Ở Server Side (tại PHP Script) làm thế nào để xác định HTTP Request gửi đến là POST hay GET: Đơn giản là tên của phương thức lưu tại biến $_SERVER['REQUEST_METHOD']
Ví dụ sau kiểm tra phương thức là POST hay không
if ($_SERVER['REQUEST_METHOD'] === 'POST') { // POST ĐẾN }
Đọc biến Form gửi đến
Như trên đã trình bày, dữ liệu FORM gửi đến lưu tại $_GET
, $_POST
tùy theo cách thiết kế sử dụng FORM và URL truy vấn (ngoài ra còn có $_FILE)
Ví dụ:
form/first.php
<?php $name = isset($_POST['name']) ? $_POST['name']:null; $age = isset($_POST['age']) ? $_POST['age']:null; if ($name) { echo "Tên của bạn: $name<br>"; echo "Tuổi: $age<br>"; } else echo "<p>Nhập dữ liệu và bấm vào Gửi đi</p>"; ?> <form action="first.php" method="post"> <p>Name: <br> <input type="text" name="name" /></p> <p>Age: <br> <input type="text" name="age" /></p> <p><input type="submit" name="submit" value="Gửi đi" /></p> </form>