Hướng dẫn dùng s post trong PHP

Tiếp tục series học PHP căn bản, ở bài 13 này chúng ta sẽ học về 2 phương thức truyền tải dữ liệu thông dụng trong mô hình Client-Server đó là Get và Post. Các bạn có thể xem lại khái niệm của Client-Server. 

Phương thức GET trong PHP

Khi người dùng phía client sử dụng phương thức GET gửi dữ liệu lên server thông qua các tham số [parameter] trên thanh địa chỉ URL của Browser. Các tham số trên URL bắt đầu bằng dấu chấm hỏi [ ? ] và được ngăn cách với nhau bởi dấu và [ & ]. 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ụ: ta có URL //tanhongit.net/?p=7740&preview=true

Khi truy cập, từ Server sẽ hiểu giá trị p = 7740 và giá trị preview = true.

Lưu ý 1: khi muốn truyền nhiều cặp giá trị lên Server chúng ta sẽ sử dụng dấu và [ & ], và vị trí các cặp giá trị không quan trọng. Nghĩa là từ ví dụ trên, giá trị preview nằm trước giá trị p cũng được.

Đó là ví dụ về phần Client truy cập từ thanh địa chỉ URL. Chúng ta bây giờ sẽ chuyên sang các vấn đề trong code PHP.

Trong code khi 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. [ $_GET là một biến toàn cục lưu trữ dưới dạng mảng bất tuần tự.]

  //biến $_GET là một mảng chứa nhiều phần tử

Lưu ý về phương thức GET trong PHP

  • Phương thức GET được giới hạn gửi tối đa chỉ 1024 ký tự.
  • Không bao giờ sử dụng phương thức GET nếu gửi password hoặc thông tin nhay cảm lên Server.
  • GET không thể gửi dữ liệu nhị phân, ví dụ như hình ảnh hoặc các loại tài liệu lên Server.
  • Dữ liệu gửi bởi phương thức GET có thể được truy cập bằng cách sử dụng biến môi trường QUERY_STRING.
  • PHP cung cấp mảng liên hợp $_GET để truy cập tất cả các thông tin đã được gửi bởi phương thức GET.

Ví dụ thực hành

Ví dụ 1: Bạn khởi tạo 1 file demo.php nằm trong thư mục WWW của WampServer hoặc tạo trong thư mục htdocs nếu bạn dùng Xampp, sau đó bạn dán đoạn code bên dưới vào.

 



    
        
    

khi truy cập vào //localhost/demo.php?title=tanhongit&website=tanhongit.net hoặc

 



    
        
    

0 thì kết quả đều ra như sau:

title - TanHongIT
website - tanhongit.net

Ở ví dụ trên mình sử dụng phương thức GET ngay trong 1 file duy nhất, mình đã sử dụng vòng lặp Foreach để lấy toàn bộ key và value có trong biến $_GET là một mảng có nhiều phần tử.

GET còn có thể sử dụng để truyền dữ liệu từ file này sang file khác. hãy làm tiếp ví dụ 2.

Ví dụ 2: Tạo 2 file, 1 file có tên get_demo.php và một file demo.html

Đầu tiên, ở trong file demo.html ta sẽ tạo 1 form để lấy dữ liệu nhập vào từ bàn phím và gửi lên server.



    
    
    
    Document


    
Title
Website
Submit

Ở file demo.html mình có tạo 2 trường nhập liệu trong form có tên là title web để truyền dữ liệu nhập từ bàn phím vào file get_demo.php

Tiếp theo ta viết code để phía Server xuất ra màn hình sau khi nó đã nhận dữ liệu được nhập vào từ file demo.html thông qua file get_demo.php

 



    
        
    

1 sau đó nhập vào các trường dữ liệu và nhấn vào button Submit. Lập tức Server sẽ tự động chuyển link sang file get_demo.php và xuất ra thông tin bạn đã nhập liệu.

Lưu ý 2: Vì đây là phương thức GET nên khi truyền dữ liệu bạn sẽ có 2 cách truyền, 1 là truyền dữ liệu từ form sau đó gửi lên Server, 2 là ta có thể truyền tham số trực tiếp thông qua paramter trên địa chỉ URL

Ví dụ:

 



    
        
    

2

Kết quả nhận được sau khi Enter sẽ như hình dưới:

Lưu ý 3: Dùng phương thức GET thì dữ liệu luôn được gửi một cách tường minh, chúng ta có thể thấy mọi thông tin trên URL và có thể chỉnh sửa trực tiếp cho nên nó không bảo mật tốt.

Vì thế khi muốn tạo dữ liệu nào đó ta không nên sử dụng phương thức GET mà phải dùng POST vì GET luôn để lộ thông tin trên địa chỉ URL nên rất dễ bị hack đánh cắp dữ liệu.

Phương thức POST trong PHP

Phương thức POST sẽ trái ngược với phương thức GET về tính bảo mật cũng như tốc độ.

Về phương thức GET, chúng ta có thể xem thông tin trên thanh địa chỉ URL, dữ liệu được gửi đi bằng GET sẽ thông qua các paramter trên URL. POST thì ngược lại, nó không gửi dữ liệu đi bằng paramter trên URL mà thông qua HTTP header, vì vậy việc bảo mật phụ thuộc vào giao thức HTTP mà website đó đang sử dụng.

Parameters được truyền trong request body nên có thể truyền dữ liệu lớn, hạn chế tùy thuộc vào cấu hình của Server. Không cache và bookmark được cũng như không được lưu lại trong browser history. POST không có bất kì hạn chế nào về kích thước dữ liệu sẽ gửi, có thể gửi dữ liệu nhị phân, hình ảnh.

Nội dung dữ liệu được gửi đi bằng phương thức POST sẽ luôn bị ẩn đi và chúng ta không thể thấy được.

Phương thức Post trong mô hình Client-Server

Các bạn hãy tìm hiểu và làm ví dụ bên dưới để hiểu cách phương thức POST truyền dữ liệu lên Server như thế nào nhé!

Phía Client gửi lên

Với phương thức GET, dữ liệu sẽ được thấy trên URL, nhưng phương thức POST thì hoàn toàn ngược lại, POST sẽ phải gửi dữ liệu qua form HTML và các giá trị sẽ được định nghĩa trong các thẻ 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 thẻ input đó.

Bạn hãy tạo file demo.html trong thư mục WWW của WampServer hoặc tạo trong thư mục htdocs nếu bạn dùng Xampp và chèn đoạn code bên dưới vào.



    
    
    
    Document


    
Title
Website
Submit

Phần code trên mục đích dùng để nhập liệu từ phía Client để gửi lên Server. Giờ chúng ta sang phần Server.

Phía Server nhận dữ liệu và trả về

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ế từ bây giờ bạn chỉ cần thao tác lấy hoặc gửi dữ liệu thông qua biến $_POST này là được.

Ở file demo.html mình có tạo 2 trường nhập liệu trong form có tên là title web để truyền dữ liệu nhập từ bàn phím vào file post_demo.php. Tiếp theo ta sẽ code trên file post_demo.php để lấy dữ liệu và xuất ra màn hình.

 



    
        
    

1 sau đó nhập vào các trường dữ liệu và nhấn vào button Submit. Lập tức Server sẽ tự động chuyển link sang file post_demo.php và xuất ra thông tin bạn đã nhập liệu.

Nhưng có một điều khác biệt ở đây bạn cần quan tâm đó là khi sử dụng GET, đường dẫn URL sẽ tiết lộ bất kỳ thông tin mà bạn đã nhập liệu, còn khi đã dùng POST thì bị ẩn.

Điều này chứng minh POST sẽ có tính bảo mật hơn GET và POST sẽ phù hợp với các chức năng về tạo dữ liệu, đăng ký, đăng nhập,…

Những lưu ý cần biết trong phương thức POST trong PHP

  • Phương thức POST không có bất kì hạn chế nào về kích thước dữ liệu sẽ gửi.
  • Phương thức POST có thể sử dụng để gửi ASCII cũng như dữ liệu nhị phân.
  • Dữ liệu gửi bởi phương thức POST thông qua HTTP header, vì vậy việc bảo mật phụ thuộc vào giao thức HTTP. Bằng việc sử dụng Secure HTTP, bạn có thể chắc chắn rằng thông tin của mình là an toàn.
  • PHP cung cấp mảng liên hợp $_POST để truy cập tất cả các thông tin được gửi bằng phương thức POST.

Kiểm tra isset với GET và POST trong PHP

Trước khi lấy một dữ liệu nào đó từ client bạn phải kiểm tra nó đã tồn tại không rồi mới lấy.Vì nếu không kiểm tra trước khi lấy, phía client chưa cung cấp đầy đủ dữ liệu mà server lại nhận thì sẽ có lỗi ngay. Vì thế ở những trường hợp mà ta không chắc chắn một biến luôn tồn tại hoặc một trường dữ liệu được nhập đầy đủ thì hãy kiểm tra nó trước khi gửi request.

Để kiểm tra ta sẽ dùng hàm isset[]. Hàm isset[] trong PHP có chức năng kiểm tra xem biến có tồn tại hay không. Nó sẽ trả về TRUE nếu biến đó có tồn tại và ngược lại FALSE nếu biến đó không tồn tại. Hàm isset[] sẽ dùng cho cả 2 phương thức GET và POST.

Cú pháp: isset[$bien];

Trong đó: 

 



    
        
    

4 là biến mà bạn muốn kiểm tra sự tồn tại.

Từ ví dụ về phần POST trong PHP ở trên, nếu bạn trực tiếp truy cập vào //localhost/post_demo.php mà chưa nhập đầy đủ thông tin ở //localhost/demo.html thì sẽ xuất hiện lỗi ngay.

Vậy từ ví dụ trên ta chỉ cần thêm vào file file post_demo.php như sau:

Chủ Đề