PHP _GET và _POST

Định nghĩa và cách dùng

  • PHP _GET và _POST là hai phương thức dùng để thu thập dữ liệu form, đây cũng là phương thức dùng để chuyển dữ liệu từ máy cá nhân (client) lên máy chủ (server).
  • Cả hai _GET và _POST đều tạo một mảng với cặp key/value, với key chính là thuộc tính name của các thành phần form, còn value chính là giá trị của thành phần đó với name tương ứng.
  • _GET thường dùng cho dữ liệu không quan trọng, không cần bảo mật, thể hiện rõ trên tham số khi submit hay click từ liên kết.
  • _POST thường dùng cho dữ liệu quan trọng, cần bảo mật như thông tin login, payment, ... _POST nhận được thông qua phương thức HTTP.

_GET

_GET có thể được nhận biết thông qua 2 cách:

  • _GET thu thập dữ liệu form sau khi được gửi (submit) thông qua thuộc tính method="get"
  • _GET cũng có thể thu thâp dữ liệu được gửi thông qua đường dẫn URL trên thanh địa chỉ.

_GET NHẬN BIÉT GIÁ TRỊ QUA FORM

<form action="processing.php" method="get">
     Điện thoại: <input type="text" name="phone">
     <button type="submit">Gửi</button>
</form>
  • Tham số processing.php trong action chính là trang chứa code xử lý.
  • method="get" là thuộc tính xác định phương thức, ở đây là _GET.
  • name="phone" chính là key nhận biết thành phần được xử lý.
  • button type="submit" chính là nơi tạo hành động khi người dùng click.

Ví dụ

<form action="php_get_post.php" method="get">
     Điện thoại: <input type="text" name="phone">
     <button type="submit">Gửi</button>
</form>
Điện thoại:

Điền giá trị 0123456 và click nút Gửi, thông tin sẽ gửi tới trang xử lý php_get_post.php (hiện tại đang sử dụng chính trang hiện hành), khi này đường dẫn trên thanh địa chỉ có dạng php_get_post.php?phone=0123456

Xử lý giá trị

  • Cách lấy dữ liệu _GET, ta sử dụng cấu trúc $_GET[key].
  • Dùng câu lệnh if để xác định xem có tồn tại phương thức _GET hay không, trước khi nhận giá trị.

VD bên dưới key chính là giá trị phone của thuộc tính name.

Sử dụng if(isset($_GET["phone"])) để kiểm tra xem $_GET["phone"] đã tồn tại hay chưa, nếu không kiểm tra sẽ báo lỗi khi chưa tồn tại, xem thêm tại isset() - PHP các hàm thường dùng.

<form action="php_get_post.php" method="get">
     Điện thoại: <input type="text" name="phone">
     <button type="submit">Gửi</button>
</form>
Thông tin nhận được <?php if(isset($_GET["phone"])) { echo $_GET["phone"]; } ?>
Điện thoại:
Thông tin nhận được

Thử thay đổi nhiều giá trị khác nhau của input sau đó click button Gửi để xem nhiều kết quả khác nhau.

_GET NHẬN BIẾT GIÁ TRỊ QUA URL

Ta thấy khi submit form, thì tham số trên thanh địa chỉ có dạng: php_get_post.php?phone=0123456, dựa vào đó ta cũng có thể tạo tham số tương tự như vậy trên thanh địa chỉ thông qua tag <a>

<a href="php_get_post.php?phone1=0123456">Click tạo phương thức GET</a><br>
Thông tin nhận được <?php if(isset($_GET["phone1"])) { echo $_GET["phone1"]; } ?>
Click tạo phương thức GET
Thông tin nhận được

_GET NHIỀU GIÁ TRỊ CÙNG LÚC

Đối với nhiều giá trị GET thì tham số nhận được có dạng: php_get_post.php?phone=0123456&address=hocwebchuan, dựa vào đó ta có thể tạo giá trị key/value tương ứng.

Đối với form
<form action="php_get_post.php" method="get">
     Điện thoại: <input type="text" name="phone2"><br>
     Địa chỉ: <input type="text" name="address2">
     <button type="submit">Gửi</button>
</form>
Phone: <?php if(isset($_GET["phone2"])) { echo $_GET["phone2"]; } ?><br>
Address: <?php if(isset($_GET["address2"])) { echo $_GET["address2"]; } ?>
Điện thoại:
Địa chỉ:
Phone:
Address:

Thử điền giá trị và click Gửi, sẽ thấy thanh địa chỉ đã có tham số mới.

Đối với URL
<a href="php_get_post.php?phone3=sdfsdfsdf&address3=sdfsdfsdf">Click tạo phương thức GET</a><br>
Phone: <?php if(isset($_GET["phone3"])) { echo $_GET["phone3"]; } ?><br>
Address: <?php if(isset($_GET["address3"])) { echo $_GET["address3"]; } ?>

Thử click vào link sẽ thấy thanh địa chỉ đã có tham số mới.

_POST

Nhận dữ liệu thông qua phương thức _POST

PHP viết

<form action="php_get_post.php" method="post">
     Username: <input type="text" name="user"><br>
     Password: <input type="password" name="password"><br>
     <button type="submit">Gửi</button>
</form>
Username:
Password:
  • Ta thấy, khi điền dữ liệu và nhấn submit, thì trình duyệt không còn thể hiện tham số trên thanh địa chỉ, đây chính là điểm khác biệt giữa _POST và _GET.
  • Với cách xử lý này _POST được dùng cho những thông tin có tính bảo mật, hoặc quan trọng.

Xử lý giá trị

  • Tương tự như cách lấy dữ liệu của _GET, đối với _POST ta cũng sử dụng cấu trúc tương tự $_POST[key].
  • Dùng câu lệnh if để xác định xem có tồn tại phương thức _POST hay không, trước khi nhận giá trị.
<form action="php_get_post.php" method="post">
     Username: <input type="text" name="user"><br>
     Password: <input type="password" name="password"><br>
     <button type="submit">Gửi</button>
</form>

Username vừa nhập: <?php if(isset($_POST["user"])) { echo $_POST["user"]; } ?> <br>
Password vừa nhập: <?php if(isset($_POST["password"])) { echo $_POST["password"]; } ?>
Username:
Password:
Username vừa nhập:
Password vừa nhập:

THÔNG BÁO LỖI