Trong PHP, $_POST$_GET là hai siêu biến (superglobals) được sử dụng để nhận dữ liệu từ các form HTML và các yêu cầu HTTP. Dưới đây là sự phân biệt giữa chúng:

1. Phương thức truyền dữ liệu

  • $_GET:
    • Sử dụng phương thức HTTP GET để gửi dữ liệu.
    • Dữ liệu được gửi qua URL, được thể hiện dưới dạng chuỗi truy vấn (query string). Ví dụ: example.com/page.php?name=John&age=25.
  • $_POST:
    • Sử dụng phương thức HTTP POST để gửi dữ liệu.
    • Dữ liệu không hiển thị trong URL mà được gửi trong thân (body) của yêu cầu HTTP.

2. Bảo mật

  • $_GET:
    • Ít an toàn hơn vì dữ liệu được hiển thị trong URL. Người dùng có thể dễ dàng chỉnh sửa hoặc sao chép URL.
    • Không nên sử dụng để gửi thông tin nhạy cảm (như mật khẩu, số thẻ tín dụng).
  • $_POST:
    • An toàn hơn cho việc gửi dữ liệu nhạy cảm vì dữ liệu không được hiển thị trong URL.
    • Thích hợp cho việc gửi thông tin lớn hơn (như tệp tin, văn bản dài).

3. Giới hạn kích thước dữ liệu

  • $_GET:
    • Thường có giới hạn kích thước dữ liệu (thường là khoảng 2048 ký tự) tùy thuộc vào trình duyệt và máy chủ.
  • $_POST:
    • Không có giới hạn kích thước dữ liệu nghiêm ngặt như $_GET. Tuy nhiên, kích thước tối đa có thể gửi cũng phụ thuộc vào cấu hình của máy chủ (thường được xác định bởi post_max_size trong file cấu hình php.ini).

4. Sử dụng

  • $_GET:
    • Thích hợp cho các yêu cầu tìm kiếm hoặc lấy dữ liệu mà không làm thay đổi trạng thái của ứng dụng, chẳng hạn như lọc danh sách sản phẩm.
  • $_POST:
    • Sử dụng khi gửi dữ liệu để thêm mới, cập nhật hoặc xóa thông tin, như khi gửi form đăng ký hoặc đăng nhập.

Ví dụ sử dụng

Sử dụng $_GET:

// Truy cập vào giá trị name từ URL
$name = $_GET['name'];
echo "Hello, " . htmlspecialchars($name);

Sử dụng $_POST:

// Truy cập vào giá trị name từ form
$name = $_POST['name'];
echo "Hello, " . htmlspecialchars($name);

Tóm tắt

  • $_GET: Gửi dữ liệu qua URL, ít an toàn, giới hạn kích thước, thích hợp cho yêu cầu lấy dữ liệu.
  • $_POST: Gửi dữ liệu trong thân yêu cầu, an toàn hơn, không giới hạn kích thước nghiêm ngặt, thích hợp cho các thao tác gửi dữ liệu.