Liên hệ
php cơ bản

Sử dụng Form, đọc dữ liệu gửi đến từ Form với PHP

Xây dựng Form với PHP, dữ liệu Form gửi đến với $_GET, $_POST, cách xác định HTTP Request gửi đến PHP là POST hay GET

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
  • 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ặc get

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>

Vui lòng đăng ký ủng hộ kênh