Bài 8: Phương thức truyền dữ liệu GET và POST

Nội dung tìm hiểu. So sánh giữa POST và GET Phương thức GET Trong PHP Phương thức POST trong PHP 1. Điểm giống và khác nhau giữa hai phương thức này. Nhìn chung thì cả hai phương thức này đều được dùng để gửi dữ liệu từ Client đến Server. Nhưng các bạn cần biết phương thức hoạt động của ...

Nội dung tìm hiểu.

  • So sánh giữa POST và GET 
  • Phương thức GET Trong PHP
  • Phương thức POST trong PHP

1. Điểm giống và khác nhau giữa hai phương thức này.

Nhìn chung thì cả hai phương thức này đều được dùng để gửi dữ liệu từ Client đến Server. Nhưng các bạn cần biết phương thức hoạt động của chúng và trong từng trường hợp nào thì sử dụng phương thức nào cho hợp lý.

Giống nhau:

Đều gửi dữ liệu lên Server

Khác nhau:

Phương thức POST bảo mật hơn GET vì dữ liệu được gửi ngầm bằng mắt thường không thể nhìn thấy được.

Phương thức GET dữ liệu được gửi tường minh, chúng ta có thể thấy trên URL nên nó không bảo mật.

Phương thức GET luôn luôn nhanh hơn POST vì dữ liệu gửi đi được Browser giữ lại trong cache. Khi thực thi với POST thì Server luôn thực thi lệnh rồi trả về cho Client, còn với GET thì Browser sẽ kiểm tra trong cache có chưa, nếu có thì trả về ngay chứ không cần gửi lên Server.

Khi nào dùng GET - POST

Khi dữ liệu bạn muốn SEO thì phải sử dụng phương thức GET.

Khi dữ liệu bạn không cần bảo mật thì dùng phương thức GET, ngược lại dữ liệu bảo mật thì dùng phương thức POST.

Ví dụ khi đăng nhập, Comment, đăng tin dùng phương thức POST. Còn khi lấy tin ra thì dùng phương thức GET…

Khi request sử dụng câu lệnh select thì dùng GET, khi request có sử dụng lệnh insert update, delete thì nên dùng POST.

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

Phương thức GET là phương thức gửi dữ liệu thông qua đường dẫn URL  nằm trên thanh địa chỉ của Browser. Server sẽ nhận đường dẫn đó và phân tích trả về kết quả cho bạn. Server sẽ phân tích tất cả những thông tin đằng sau dấu hỏi (?) chính là phần dữ liệu mà Client gửi lên.

Ví dụ:  Với URL example.com?id=12 thì Server sẽ nhận được giá trị id = 12

Để truyền nhiều dữ liệu lên Server ta dùng dấu & để phân cách giữa các cặp giá trị. Giả sử tôi muốn truyền id = 12 và method= ‘get’ thì URL sẽ có dạng example.com?id=12&method=get. Lưu ý với các bạn là vị trí các cặp giá trị không quan trọng, nghĩa là cặp method có thể nằm trước cặp id cũng được.

Server nhận dữ liệu

Tất cả các dữ liệu mà Client gửi lên bằng phương thức GET đều được lưu trong một biến toàn cục mà PHP tự tạo ra đó là biến $_GET, biến này là kiểu mảng kết hợp lưu trữ danh sách dữ liệu từ client gửi lên theo quy luật key => value. Ví du với URL example.com?id=12&method=get thì dữ liệu sẽ được lưu trong biến $_GET dưới dạng:

$_GET = array(
    'id' => '12',
    'method' => 'get'
);

Vì thế để lấy dữ liệu thì ta chỉ cần làm như sau:

// Lấy ID
$id = $_GET['id'];
echo $id; // kết quả là 12
  
// Lấy title
$method = $_GET['method'];
echo $method; // kết quả là get

Lưu ý: Trước khi lấy một dữ liệu nào đó bạn phải kiểm tra tồn tại không mới lấy nhé, vì nếu bạn không kiểm tra thì giả sử người dùng không truyền dữ liệu qua mà bạn lại nhận thì sẽ bị báo lỗi ngay. Để kiểm tra ta dùng hàm isset($variable) trong php.

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

Phương thức POST có tính bảo mật hơn vì dữ liệu gửi phải thông qua một form HTML nên nó bị ẩn, nghĩa là chúng ta không thể thấy các giá trị đó được.

Với phương thức GET thì dữ liệu được thấy trên URL thì phương thức POST thì hoàn toàn ngược lại, POST sẽ gửi dữ liệu qua một cái form HTML và các giá trị sẽ được định nghĩa trong các input gồm các kiểu (textbox, radio, checkbox, password, textarea, hidden) và được nhận dang thông qua tên (name) của các input đó.

Server nhận dữ liệu

Tất cả các dữ liệu gửi bằng phương thức POST đều được lưu trong một biến toàn cục $_POST do PHP tự tạo ra, vì thế để lấy dữ liệu thì bạn chỉ cần lấy trong biến này là được. Cũng như lưu ý với các bạn là trước khi lấy phải dùng hàm isset($bien) để kiểm tra có hay không nhé.

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

Ở dưới là một form gồm 2 trường name, email và một nút submit. Khi người dùng click vào nút submit dữ liệu ở form được gửi lên server qua file xuly.php theo phương thức POST.

        
            Name: 
            E-mail: 
            
        
    

Sau khi người dùng nhấn submit dữ liệu được truyền lên server chúng được nằm trong mảng $_POST. Kết để hiên thì giá trị sau khi người dùng nhấp submit ta thực hiện việc hiển thị dữ liệu mảng POST ra.

print_r($_POST);

Như trên chúng ta thấy nó đã trả về cho chúng ta một mảng, việc chúng ta cần lấy từng phần từ thì thực hiện truy xuất vào phần tử đấy mà thôi.

$name = $_POST['name'];
$email = $_POST['email'];

Lưu ý: Khi bạn public một website nên internet và website của bạn có trao đổi với CSDL hay các vấn đề tính toán thì nó sẽ nảy sinh ra một số vấn đề làm sao ta có thể bảo mật ứng dụng của mình khỏi một nhóm người nhòm ngó hoặc muốn phá website của bạn.

Đây là một số gợi ý của tôi.

1) Nếu biến bạn gửi nên sever là kiểu số bạn nên dùng các hàm kiểm tra hoặc ép các biến đó thành kiểu số.

// Ép biến $id về kiểu số nguyên
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
echo $id; 

// Kiểm tra xem $id có phải là số hay không
$id= 0;
if(is_numeric($_POST['id'])){
    $id = $_GET['id'];
}
echo $id;

2) Nếu biến gửi nên sever là một chuỗi(String) thì bạn nên viết sẵn một hàm clean nhằm ngăn chặn các ký tự đặc biết liên quan tới ngôn ngữ mình sử dụng.

Ví dụ: DELETE * FROM table, TRUNCATE TABLE ..

0