Trang

Thứ Năm, 18 tháng 7, 2013

Xử lý giá trị trong Form PHP [PHP]

Một trong những ứng dụng quan trọng của PHP đó là giúp tương tác xử lý dữ liệu trên form của người sử dụng. Nhằm mục đích giúp cập nhật thông tin một cách linh động và dễ dàng quản lý chung hơn bởi sự kết hợp tuyệt vời của cơ sở dữ liệu.
Chúng ta cùng phân tích thẻ form trong HTML sau:



Chúng ta thấy rằng 1 form phải bao gồm:
 + Tên form để dễ dàng tách biệt với giá trị của chúng.
 + Action: hành động chuyển tiếp đến link xử lý.
 + Method: Là phương thức truyền bao gồm POST và GET.

Ví dụ:




Như vậy ta thấy rằng. Đoạn code trên làm những việc sau.

Đầu tiên khi khách nhập liệu username vào thì chúng sẽ chuyển tới trang check.php để tiến hành xử lý thông tin. Form trên sử dụng phương thức POST, với tên form là reg. Giá trị mà chúng ta gởi là username vừa nhập liệu.

Vậy làm cách nào để chúng ta lấy được giá trị vừa nhập liệu nào ?

PHP cho phép ta lấy giá trị dựa vào 2 phương thức POST GET.

Đối với Form sử dụng method là POST ta lấy giá trị của Form bằng : $giatri = $_POST['Field_Name'].

Đối với Form sử dụng method là GET ta lấy giá trị của Form bằng : $giatri = $_GET['Field_Name'].

Vậy với ví dụ trên có thể lấy được biến xử lý là : $un = $_POST[‘username’]; (username là tên của field mà người sử dụng nhập liệu vào)

1. Truyền dữ liệu thông qua phương thức GET

Dữ liệu gửi từ trình duyệt lên qua phương thức GET là phần dữ liệu được nhập trực tiếp theo sau địa chỉ URL do trình duyệt gửi lên, được phân biệt với tên file script bằng dấu hỏi chấm (?). Ví dụ, khi ta gõ vào trình duyệt địa chỉ URL sau:

http://www.phpvn.org/topic.php?TOPIC_ID=161

Khi đó, trình duyệt sẽ gửi theo địa chỉ trên một cặp biến = giá trị, trong đó biến có tên là TOPIC_ID và giá trị là 161 (TOPIC_ID=161).

Chúng ta cũng có thể đưa lên nhiều cặp biến = giá_trị bằng cách phân cách chúng bởi dấu &:

http://www.phpvn.org/index.php?method=Reply&TOPIC_ID=161&FORUM_ID=20

Với địa chỉ URL trên, chúng ta sẽ gửi lên 3 cặp biến=giá_trị theo phương thức GET, đó là: method=Reply, TOPIC_ID=161FORUM_ID=20.

Khi trình duyệt gửi các thông tin này lên máy chủ, PHP sẽ tự động sinh ra một mảng có tên là $_GET[] để nắm giữ tất cả các cặp biến và giá trị đó, trong đó, chỉ số của mảng chính là một chuỗi mang tên của tên biếngiá trị của chỉ số đó chính là giá trị của biến do trình duyệt gửi lên. Ví dụ, với địa chỉ URL sau:

http://www.phpvn.org/post.php?method=Reply&TOPIC_ID=161&FORUM_ID=20

Thì PHP sẽ tự động sinh ra một mảng $_GET có nội dung sau:

$_GET["method"] = "Reply" // tương ứng với cặp method=Reply
$_GET["TOPIC_ID"] = 161 // tương ứng với cặp TOPIC_ID=161
$_GET["FORUM_ID"] = 20 // tương ứng với cặp FORUM_ID=20

Khi đó tại trang mà Form Action đến, ta có thể lấy giá trị của chúng bằng:

$method = $_GET['method'];
$topic_id = $_GET['TOPIC_ID'];
$forum_id = $_GET['FORM_ID'];

2. Truyền dữ liệu thông qua phương thức POST

 Phương thức POST, không giống như GET. Các thông tin được người dùng nhập vào sẽ không được hiển thị trong địa chỉ mà sẽ được truyền âm thầm (người dùng không thể nhìn thấy).

Để lấy các biến theo kiểu POST, PHP sẽ tự động sinh ra mảng có tên là $_POST[]. Mảng này có chỉ số chính là tên của các phần tử trong form (các thẻ input, select... có thuộc tính name) và giá trị là nội dung giá trị do người sử dụng nhập vào các phần tử có tên tương ứng.

Tại file mà Form Action đến ta lấy giá trị của chúng bằng: $giatri = $_POST['Field_Name']

Ví dụ:

Tạo file userform.htm với nội dung sau:




Khi submit dữ liệu sẽ chuyển đến file processform.php , Tại đây để lấy giá trị ta sử dụng:
$username = $_POST['username'];

3. Dùng $_GET hay $_POST

Về phần POST:

Với GET dữ liệu được truyền đi sẽ hiển thị ở thanh địa chỉ theo dạng ?bien1=giatri1&bien2=giatri2&bien3=giatri3 … . Điều này sẽ gây bất tiện nếu thông tin truyền đi là thông tin quan trọng, như tên người dùng hay mật khẩu. Bạn thử nghĩ chuyện mật khẩu hiển thị tè le ra thành địa chỉ xem? Không được, trong trường hợp này POST là một lợi thế. Do biến được truyền đi ngầm. (Lưu ý, vẫn có các công cụ giúp bắt các thông tin truyền bằng POST tuy nhiên không hiển thị thông tin ở thanh địa chỉ vần là một lợi thế lớn).

- Về phần GET :

Địa chỉ sẽ trở nên dài một tí, do phải mang thêm thông tin về biến (?bien1=giatri1&bien2=giatri2&bien3=giatri3 …). Nhưng một điều bạn cần phải biết đó là form có thể truyền thông tin bằng kiểu GET, nhưng muốn truyền thông tin bằng kiểu GET thì không nhất thiết phải dùng form. Nghĩa là nếu trên thanh địa chỉ ta thêm các cặp biến = giá_trị vào thì ta có thể lấy giá trị bằng đó bằng $_GET, mà không cần phải dùng form để khi submit nó gắn thêm cặp biến = giá_trị vào.

Từ địa chỉ dạng đó, bạn đã thấy gì chưa nhỉ? vâng trong địa chỉ của chúng ta có một biến. Đó là biến động và có thể thay đổi giá trị dễ dàng bằng cách gõ trên thanh địa chỉ mà không cần nhập vào các ô trong form.

So sánh $_GET và $_POST

$_GET $_POST
 Được sử dụng khi dùng URL để gửi yêu cầu lên server. Có thể không cần Form  Bắt buộc phải có Form. Vì thế không thể gửi một yêu cầu Post từ lần truy cập đầu tiên vào trang web.
 Lấy thông tin một trang web (Web page), nếu trên thanh địa chỉ có cặp biến = giá_trị . Ví dụ index.php?loaitin=thethao, nếu ta thay thethao bằng tinthegioi thì sẽ lấy được các loại tin thuộc tinthegioi  Dữ liệu gửi đi không hiển thị. Do vậy, không thể thay giá trị trên thanh địa chỉ được. 
 Được dùng để gửi dữ liệu trong các form đến một trang nào đó. Dữ liệu gửi đi là một phần trong URL với dạng “&bien=giá_trị  Dữ liệu gởi đi không hiển thị trên thanh địa chỉ, nó được chuyển đến server âm thầm.
 Dữ liệu trong form phải là chuỗi hoặc số, không gửi được file hình  Nếu muốn gửi hình lên server buộc phải dùng POST
 Dữ liệu gửi đi là hạn chế vì phụ thuộc vào trình duyệt hỗ trợ tối đa URL có độ dài bao nhiêu.  Dữ liệu gửi đi lớn. Các kiểu File, Ảnh, Binary đều có thể gửi đi được, dung lượng của chúng phụ thuộc vào cấu hình của server.
 Có thể thêm dữ liệu gửi đi trực tiếp vào URL  Dữ liệu được gửi đi như trong form của nó
 Bảo mật kém.  Bảo mật hơn Get

Vậy ưu điểm của Get là gì? Bạn có thể bookmark một trang có query get, gửi url đó cho bạn bè, tuy nhiên post thì không.

4. $_REQUEST

Cũng là một kiểu lấy thông tin từ người dùng. $_REQUEST bao hàm luôn cả $_GET$_POST. Từ đó bạn không cần băn khoăn lẫn lộn là POST hay GET.

Lưu ý: khi dùng cái này thì bất kỳ gì được truyền qua POST hay GET đều được $_REQUEST thu thập.


Nguồn: Sưu tầm Internet

Không có nhận xét nào:

Đăng nhận xét