1. Get và Post trong PHP là gì?

Get và Post chính là 2 phương thức để truyền dữ liệu lên server. Server là mã nguồn web mà ta viết bằng PHP được đưa lên host. Khi ta đăng nhập, đăng ký, để lại bình luận,… trên trang web thì phải nhờ đến Get hoặc Post để có thể gửi được dữ liệu lên server. Và trang web của chúng ta ở đây được coi là một client.

Ta sẽ tìm hiểu từng phương thức một trong bài ngày hôm nay!

2. Phương thức Get trong PHP

Là phương thức rất dễ nhận thấy được vì nó ở ngay trên thanh URL cùng với dữ liệu mà ta muốn gửi.

2.1. Client gửi dữ liệu lên server

Khi ta gửi dữ liệu từ client lên server, Get sẽ thông qua URL ở thanh tìm kiếm của trình duyệt để gửi dữ liệu lên server, từ đó server sẽ phân tích dữ liệu để thực thi hành động. Các dữ liệu được Get gửi lên sẽ nằm sau dấu ? và các từ khóa nối nhau bằng dấu &.

Ví dụ: laptrinhtudau.com?id=18&age=20&name=ThanhNguyen thì lúc này ta đang gửi dữ liệu bằng phương thức Get với dữ liệu id=17 tuổi là 20 và tên là ThanhNguyen.

2.2. Server nhận dữ liệu

Tất cả các dữ liệu mà client gửi lên server bằng Get đều được lưu ở trong một biến toàn cục$_GET. Biến này là một mảng bất tuần tự.

Ví dụ: URL laptrinhtudau.com?id=18&age=20&name=ThanhNguyen thì dữ liệu sẽ được lưu trong biến $_GET dưới dạng:

$_GET = array(
    'id' => '18',
    'age' => '20',
    'name' => 'ThanhNguyen'
);

Vậy lấy dữ liệu ta sẽ lấy theo kiểu mảng là được:

<?php 
// Lấy ID
$id = $_GET['id'];
echo $id; // kết quả là 18
// Lấy age
$age = $_GET['age'];
echo $age; // kết quả là 20
// Lấy name
$name = $_GET['name'];
echo $name; // kết quả là ThanhNguyen 
?>

Chú ý

Trước khi chúng ta lấy dữ liệu phải kiểm tra xem nó có tồn tại không. Vì khi mà người dùng không truyền dữ liệu cho chúng ta thì lúc đó chương trình sẽ bị lỗi. Ở đây chúng ta có hàm isset($tenbien) để kiểm tra

if (isset($_GET['id'])){
    $id = $_GET['id'];
}

2.3. Thực Hành

Chúng ta sẽ tạo một form đơn giản để thực hành cho bài này nhé!

Đầu tiên ta sẽ tạo hai file là index.phpget.php trong thư mục htdocs. Ai chưa rõ hoặc quên có thể xem lại ở bài 1 nhé!

Trong file index.php ta sẽ tạo một form đăng ký gửi dữ liệu lên server.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Form</title>
</head>
<body>
<div>
    <form action="get.php" method="GET" role="form">
        <legend>Get files</legend>

        <div>
            <label for="">Họ Tên</label>
            <input type="text" id="" placeholder="Nhập họ tên" name="name">
        </div>

        <div class="form-group">
            <label for="">Tuổi</label>
            <input type="number" id="" placeholder="Nhập tuổi" name="age">
        </div>

        <button type="submit">Submit</button>
    </form>
</div>
</body>
</html>

Sau khi tạo xong form này người ta có thể truyền dữ liệu lên server. Tiếp theo ta sẽ viết code cho file get.php để nó nhận dữ liệu.

<?php
echo 'Tên: ' . $_GET['name'] . '<br>';
echo 'Tuổi: ' . $_GET['age'];
?>

Và như đã lưu ý ở trên là ta phải kiểm tra dữ liệu bằng hàm isset nên ở đây tôi sẽ viết hoàn chỉnh file get.php

<?php
if (isset($_GET['name']) && isset($_GET['age'])) {
    echo 'Tên: ' . $_GET['name'] . '<br>';
    echo 'Tuổi: ' . $_GET['age'];
}

Tại sao tôi lại đưa ra cả 2 đoạn code có và không có isset cho các bạn. Vì ở đây tôi muốn cho các bạn xem và chạy thử dù có hay không có isset thì chương trình vẫn có thể chạy bình thường. Tuy nhiên nếu không có isset mà không có dữ liệu truyền vào thì chương trình sẽ bị lỗi. Chạy và xem kết quả nhé. Và nếu các bạn muốn nhìn nó đẹp hơn dễ nhìn hơn có thể nhúng thêm css hoặc bootstrap vào bài nhé. Cũng có rất nhiều kiểu form khác nhau ta có thể tra google để biết thêm.

3.Phương thức POST trong PHP

Sử dụng POST có tính năng bảo mật cao hơn so với GET vì dữ liệu gửi lên server sẽ bị ẩn(không hiện trên thanh URL còn GET thì hiện rõ trên URL).

3.1. Client gửi dữ liệu lên server

POST sẽ gửi dữ liệu qua một form HTML và các giá trị sẽ được định nghĩa trong các input(textbox, checkbox, password,…) và sẽ được nhận dạng thông qua tên(name) của input đó(các bạn có thể xem về bài HTML).

3.2. Server nhận dữ liệu

Tương tự như GET thì POST dữ liệu được gửi lên sẽ được lưu trữ trong một biến toàn cục $_POST dưới dạng mảng bất tuần tự. Ta cũng phải dùng hàm isset($bien) để kiểm tra như GET nhé.

VD:

$_POST['name']; // lấy giá trị của POST
if (isset($_POST['id'])){ //kiểm tra dữ liệu
$id = $_POST['id'];
}

3.3. Thực hành

Ta sẽ tạo 2 file là index.phppost.php(có thể lấy luôn file index.php ở bài thực hành trên).

Trong file index.php ta có một form như sau:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Form</title>
</head>
<body>
<div>
    <form action="post.php" method="POST" role="form">
        <legend>Get files</legend>

        <div>
            <label for="">Họ Tên</label>
            <input type="text" id="" placeholder="Nhập họ tên" name="name">
        </div>

        <div class="form-group">
            <label for="">Tuổi</label>
            <input type="number" id="" placeholder="Nhập tuổi" name="age">
        </div>

        <button type="submit">Submit</button>
    </form>
</div>
</body>
</html>

Sự khác nhau ở đây là thay vì là method=”GET” sẽ là method=”POST”

Trong file post.php thì cũng tương tự như phương thức GET chỉ cần thay GET bằng POST là được

<?php
echo 'Tên: ' . $_POST['name'] . '<br>';
echo 'Tuổi: ' . $_POST['age'];
?>

Tương tự tôi có đoạn code đầy đủ với isset như sau:

<?php
if (isset($_POST['name']) && isset($_POST['age'])) {
    echo 'Tên: ' . $_POST['name'] . '<br>';
    echo 'Tuổi: ' . $_POST['age'];
}

4. So sánh giữa GET và POST trong PHP

4.1. Giống nhau

Cả 2 đều là phương thức truyền dữ liệu lên server

4.2. Khác nhau

Phương thức GET giúp ta thấy dữ liệu được gửi lên rõ ràng vì có thể thấy trên URL nhưng nó sẽ không an toàn và không có tính bảo mật.

Phương thức POST thì ta không thể thấy dữ liệu truyền lên rõ ràng như ở GET nhưng tính bảo mật và sự an toàn sẽ cao hơn.

GET sẽ nhanh hơn POST.

4.3. Khi nào thì dùng GET khi nào thì dùng POST

Nhìn vào sự khác nhau ở trên ta có thể dễ dàng đưa ra một số nhận định:

  • Khi đăng nhập, đăng ký, update,… hay là những dữ liệu gì cần được bảo mật thì ta sẽ dùng POST.
  • Dữ liệu không cần bảo mật, muốn SEO hay lấy tin ra dùng ta có thể dùng GET.