Trong PHP, $_POST
và $_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.