GET và POST - PHP

Trong bài hướng dẫn này, bạn sẽ được học cách gửi thông tin đến máy chủ bằng phương thức HTTP GET và POST và nhận dữ liệu bằng PHP.

Các phương thức gửi thông tin đến máy chủ

Một trình duyệt web giao tiếp với máy chủ thường sử dụng một trong hai phương thức HTTP, giao thức truyền siêu văn bản - GET POST. Cả hai phương thức truyền thông tin khác nhau và có những ưu điểm và nhược điểm khác nhau.

Phương thức GET

Trong phương thức GET, dữ liệu được gửi dưới dạng tham số URL thường là các chuỗi cặp giá trị và tên được phân tách bằng dấu (&). Nói chung, một URL có dữ liệu GET sẽ giống như sau:

http://www.example.com/action.php?name=john&age=24

Với name, age là các tham số GETjoin, 24 là giá trị của các tham số đó. Có thể nhiều hơn một parameter=value được nhúng vào URL bằng cách nối với ký hiệu và (&).

Người ta chỉ có thể gửi dữ liệu văn bản đơn giản thông qua phương thức GET.

Ưu điểm và nhược điểm của việc sử dụng phương thức GET

  • Vì dữ liệu được gửi bởi phương thức GET được hiển thị trong URL, nên có thể đánh dấu trang bằng các giá trị chuỗi truy vấn cụ thể.
  • Vì phương thức GET chỉ định dữ liệu cho một biến môi trường máy chủ, độ dài của URL bị giới hạn. Vì vậy, có một giới hạn cho tổng dữ liệu được gửi.
  • Phương thức GET không phù hợp để chuyển thông tin nhạy cảm như tên người dùng và mật khẩu, vì chúng hiển thị đầy đủ trong chuỗi truy vấn URL cũng như có khả năng được lưu trữ trong bộ nhớ của trình duyệt máy khách dưới dạng trang đã truy cập.

PHP cung cấp biến superglobal $_GET để truy cập được tất cả thông tin được gửi qua URL hoặc được gửi qua biểu mẫu HTML bằng cách sử dụng method="get".

Ví dụ

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Example of PHP GET method</title>
</head>
<body>
<?php
if(isset($_GET["name"])){
    echo "<p>Hi, " . $_GET["name"] . "</p>";
}
?>
<form method="get" action="<?php echo $_SERVER["PHP_SELF"];?>">
    <label for="inputName">Name:</label>
    <input type="text" name="name" id="inputName">
    <input type="submit" value="Submit">
</form>
</body>

Phương thức POST

Trong một phương thức POST, dữ liệu được gửi đến máy chủ dưới dạng một gói trong một giao tiếp riêng biệt với tập lệnh xử lý, dữ liệu được gửi qua phương thức POST sẽ không hiển thị trong URL.

Ưu điểm và nhược điểm của việc sử dụng phương thức POST

  • Nó an toàn hơn GET vì thông tin do người dùng nhập không bao giờ hiển thị trong chuỗi truy vấn URL hay trong nhật ký máy chủ.
  • Có một giới hạn lớn hơn nhiều về số lượng dữ liệu có thể được truyền và người ta có thể gửi dữ liệu văn bản cũng như dữ liệu nhị phân (tải lên tệp) bằng cách sử dụng POST.
  • Vì dữ liệu được gửi bởi phương thức POST không hiển thị trong URL, nên không thể đánh dấu trang có truy vấn cụ thể.

Giống như $_GET, PHP cung cấp một biến superglobal khác $_POST để truy cập vào được tất cả thông tin được gửi qua phương thức bưu điện hoặc được gửi qua biểu mẫu HTML bằng cách sử dụng method="post".

Ví dụ

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Example of PHP POST method</title>
</head>
<body>
<?php
if(isset($_POST["name"])){
    echo "<p>Hi, " . $_POST["name"] . "</p>";
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
    <label for="inputName">Name:</label>
    <input type="text" name="name" id="inputName">
    <input type="submit" value="Submit">
</form>
</body>

Biến $_REQUEST

PHP cung cấp biến superglobal khác là $_REQUEST chứa các giá trị của cả biến $_GET $_POST cũng như các giá trị của biến superglobal $_COOKIE.

Ví dụ

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Example of PHP $_REQUEST variable</title>
</head>
<body>
<?php
if(isset($_REQUEST["name"])){
    echo "<p>Hi, " . $_REQUEST["name"] . "</p>";
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
    <label for="inputName">Name:</label>
    <input type="text" name="name" id="inputName">
    <input type="submit" value="Submit">
</form>
</body>

Bạn sẽ tìm hiểu thêm về cookie PHP và xử lý biểu mẫu trong phần PHP nâng cao.

Ghi chú: Các biến superglobal $_GET, $_POST và $_REQUEST được tích hợp theo các biến mà luôn luôn có sẵn trong tất cả các phạm vi mã nguồn PHP của bạn.

 

Bài viết mới cập nhật