Bài 11: FORM trong PHP

PHP Cơ bản 26/02/2017 07:00 1163
FORM là một thành phần quan trọng, một thành phần không thể thiếu trong lập trình Web. FORM đóng vai trò là trung gian giữa người sử dụng và Server-side. Các phần tử của FORM cho phép người dùng nhập hoặc lựa chọn dữ liệu đầu vào và nó sẽ truyền tải dữ liệu này lên cho phía Server-side xử lý.

Hiện này có hai kỹ thuật xử lý FORM khác nhau.

  • Kỹ thuật xử lý FORM thông thường.
  • Kỹ thuật xử lý FORM thông qua Ajax.
  • Kỹ thuật xử lý FORM bằng CURL

Nhưng dù bằng kỹ thuật nào đi nữa thì vai trò của FORM chỉ có một là truyền tải dữ liệu của ngươi dùng nhập vào truyền dữ liệu đó nên phía Sever-side thôi.

Tuy nhiên sẽ có một số trường hợp ngoại lệ mà có dùng FORM nhưng không nhất thiết dữ liệu phải được gửi nên Server-side thì đó là những trường hợp đơn giản có thể xử lý ngay trên FORM bằng Javascript hay các phép toán được gán ngay trên sự kiện của các phần tử FORM lên quan tới Javascript. 

Ví dụ:

<form method="post" action="/xu_ly_form.php">
	<table border="0" cellpadding="0" cellspacing="0">
    	<tr>
        	<td><label>Họ và tên</label></td>
            <td><input type="text" name="full_name" id="txt_full_name" value="" placeholder="e.g Join Smith,..." /></td>
        </tr>
        <tr>
		  <td collspan="2">
			<input type="submit" value="Submit"  onClick="alert(document.getElementById('txt_full_name').value); return false;">
		  </td>
        </tr>
    </table>
</form>

Xem kết quả

1. Các thành phần của Form

Để tìm hiểu các thành phần được sử dụng trong FORM các bạn xem lại bài viết thẻ FORM trong HTML

2. Các phương thức truyền dữ liệu trong form

Khi FORM gửi dữ liệu lên Server-side thông thường sẽ qua hai phương  thức chính đó là phương thức POST và phương thức GET. Để hiểu hơn về hai phương thức này bạn có thẻ xem thêm tại phương thức GET và phương thức POST.

Bạn có thể chỉ định hệ thống chỉ chấp nhận các phương thức truyền dữ liệu trong file htaccess.

Ví dụ: Tôi chỉ chấp nhận duy nhất hai phương thức là POST và GET. Phương thức DELETE là không được chấp nhận.

RewriteCond %{REQUEST_METHOD} ^(POST|GET) [NC,OR]

Ví dụ: Chúng ta có một form xử lý đăng nhập như sau:

<form action="" method="">
	<table style="width:300px">
    	<tr>
        	<td style="background:#CCC" align="center" colspan="2">Đăng nhập hệ thống</td>
        </tr>
        <tr>
        	<td>Tài khoản</td>
            <td><input type="text" name="username" value="" /></td>
        </tr>
        <tr>
        	<td>Mật khẩu</td>
            <td><input type="password" name="password" value="" /></td>
        </tr>
        <tr>
            <td colspan="2"><input type="checkbox" name="remember" /> Nhớ mật khẩu</td>
        </tr>
		<tr>
		  <td colspan="2">
			<input type="submit" name="submit" value="Đăng nhập" />
			<input type="hidden" name="hid" value="login" />
		  </td>
		</tr>
    </table>
</form>

Xem kết quả

Thì như đã nói ở trên thì chúng ta sẽ dựa vào một trong hai phương thức POST và GET để truyền dữ liệu nên SERVER. Nói chung thì cả hai đều được.

2.1 Phương thức POST:

Phương thức này được sử dụng để lấy dữ liệu từ form nhập liệu. Và chuyển chúng lên máy chủ webserver để xử lý. Quá trình chuyển này chúng không làm nộ quá trình truyền biến e.g truyền biến gì, bao nhiêu biến...vv mà nó được thực hiện ngầm. 

  • FORM method = post
  • Để nhận về một biến form từ Server-side ta sử dụng $field_name= $_POST[‘field_name’]

Nhược điểm:

  • Dữ liệu truyền đi không tường mình (cơ chế truyền ngầm định) do đó sẽ phát sinh lỗi tiềm ẩn

Ví dụ: Để lấy giá trị của FORM sau khi người dùng nhấn submit.

$username = $_POST['username']; // Điều khiển tài khoản
$password = $_POST['password']; // Điều khiển mật khẩu
$remember = $_POST['remember']; // Điều khiển checkbox nhớ mật khẩu
$submit = $_POST['submit']; // Điều khiển button đăng nhập

2.2 Phương thức GET

Phương thức này cũng được dùng để lấy dữ liệu từ form nhập liệu. Các dữ liệu đường truyền đi được hiển thị lên URL của trình duyệt và dữ liệu truyền đi phụ thuộc vào độ dài đối đa của URL. Tuy nhiên nhiệm vụ chính của nó vẫn là lấy dữ liệu từ web server.

  • FORM method = get
  • Để nhận về một biến form từ Server-side ta sử dụng $field_name= $_GET[‘field_name’]

Nhược điểm:

  • Không thích hợp truyền dữ liệu có tính bảo mật như password.
  • Dung lượng dữ liệu truyền đi có giới hạn (phụ thuộc vào độ dài tối đa của URL).

Nhìn vào hình ảnh dưới đây bạn thấy rằng tên của các điều khiển và giá trị ta nhập vào chúng tạo thành các cặp dạng key=value và được nối với nhau bằng ký tự &.Chúng được hiển thị ngay trên thành address bar của browser

Chú ý: Vì người dùng có thể thấy được thông tin gửi đi thông qua địa chị URL do đó không nên dùng phương thức GET nên các thông tin gửi đi có tính chất như bảo mật, số tài khoản…

Bạn theo dõi dưới đây là cách để nhận về giá trị của các biến/điều khiển khi người dùng nhấn submit.

$username = $_GET['username']; // Điều khiển tài khoản
$password = $_GET['password']; // Điều khiển mật khẩu
$remember = $_GET['remember']; // Điều khiển checkbox nhớ mật khẩu
$submit = $_GET['submit']; // Điều khiển button đăng nhập

Có lẽ giờ thì bạn đã hiểu thế nào là FORM trong PHP rồi và hiểu được sự khác nhau giữa hai phương thức POST và GET.

Tiếp tục với FORM login phía trên và tôi sử dụng phương thức POST để xử lý khi người dùng nhập và nhấn vào nút đăng nhập thì nó sẽ đưa ra kết quả như thế nào?

// Kiểm tra xem có tồn tại điều khiển có tên là hid không
// Nếu có thì giá trị của nó bằng 'login' thực hiện tiếp
if(isset($_POST['hid']) && $_POST['hid']=='login'){
    // Lấy giá trị của ô 'Tài khoản' người dùng nhập
    $username = $_POST['username'];
    // Lấy giá trị của ô 'Mật khẩu' người dùng nhập
    $password = $_POST['password'];
    // Lấy giá trị của ô 'Nhớ mật khẩu' người dùng có tick không.
    $remember = $_POST['remember'];
    
    if($username=='admin' && $password=='admin'){
        echo 'Xin chào '.$username.' ! Bạn đã đăng nhập thành công';
    }else{
        echo 'Đăng nhập nhật bại';
    }
}

3.Tổng kết.

Như vậy là qua bài viết tôi đã giúp các bạn hiểu, và biết sự khác nhau giữa hai phương thức truyền dữ liệu POST và GET. Hy vọng qua bài viết này các bạn có thể tháo gỡ những khó khăn, thắc mắc khi tiếp xúc với kiến thức này. 

Xem Thêm

Profile photo of adminTheHalfHeart

B.V.T

Sinh ra và lớn nên ở Bắc Giang. Hiện tại thì tôi đang là một lập trình viên tại VietISO. Tôi lập website này với mục đích là bookmark những gì tôi đã đọc qua và mong muốn chia sẻ những gì tôi biết.