Chào mừng các bạn đã trở lại với Series Học PHP và MySQL từ cơ bản đến nâng cao. Bài học hôm nay chúng ta sẽ cùng tìm hiểu về Form trong PHP.

LÀM VIỆC VỚI FORM

  • Khi làm việc với Form có một số điều chúng ta cần phải chú ý như sau:
  • Nhắc lại bài cũ: Thuộc tính của FORM (mehod, action, enctype).

+ Thuộc tính method : Thuộc tính này có 2 giá trị POST hoặc GET, để xác định dữ liệu gửi lên theo kiểu POST hay GET.

+ Kiểu GET chính là kiểu mà khi nhập dữ liệu lên máy chủ, các dữ liệu này sẽ được hiển thị trên ô Address dưới dạng các cặp tên = giá_tri. Nhược điểm của kiểu này là toàn bộ cái URL và xâu tên = giá_trị kia sẽ bị giới hạn dưới 255 ký tự (do đặc điểm của trình duyệt). Vì vậy để có thể gửi nhiều dữ liệu hơn, người ta đã sinh ra kiểu POST. Với kiểu này, dữ liệu sẽ không bị giới hạn chiều dài 255 ký tự của chuỗi địa chỉ do không bị gộp vào chuỗi địa chỉ.

+ Kiểu POST cũng thường dùng để truyền các dữ liệu nhạy cảm mà người sử dụng không muốn hiển thị trên ô Address (password chẳng hạn).

+ Thuộc tính action: Thuộc tính này sẽ chỉ định form gửi dữ liệu đến trang nào. Trong trường hợp thuộc tính này không được khai báo, form sẽ gửi thẳng dữ liệu và yêu cầu về chính trang hiện hành (sau đó trình duyệt sẽ tải lại nội dung mới).

Thuộc tính enctype: Enctype=”Mime_type” :chỉ ra loại dữ liệu sẽ gửi đi. Giá trị ngầm định là application/x-www-form-urlencode.

  • Biến form trong PHP được biết đến như một loại biến, thay vì khai báo thì biến đó chính là tên của thẻ nhập liệu trong trang submit hay tham số trên querystring.

Trong trang bạn submit đến, nếu khai báo tên của thẻ nằm trong thẻ form có tên là xyz thì biến form được định nghĩa là $xyz.

Ví dụ: Bạn khai báo báo thẻ form trong trang submit.php như sau:

<form name="form1" action="mypage.php" action="post">
     <input type="text" name="fullname"> <input type="submit" name="submit" value="OK">
</form>

Khi người sử dụng nhập giá trị vào phần fullname và nhấn nút submit có tên là OK thì trang mypage.php sẽ được triệu gọi, trong trang này bạn có thể lấy giá trị nhập từ trang submit.php bằng cách sử dụng biến form như sau.

Ví dụ:

<?php
echo $fullname;
?>

Trong đó, $fullname là tên của thẻ input trong trang submit.php, trong trường hợp này chúng ta sử dụng phương thức POST cho form.

Nếu bạn sử dụng phương thức GET trong thẻ form, bạn có thể lấy giá trị của các tham số trên chuỗi QueryString bằng biến form.

Ví dụ: Khai báo thẻ form có hai tuỳ chọn như ví dụ sau với phương thức GET trong thẻ form:

<form action=mypage.php method=get>
     <table>
           <tr
                <td>Province</td>
                <td>:<select name=province>
                           <option value=HAN>Ha Noi</option>
                           <option value=HCM>Ho Chi Minh</option>
                           <option value=HUE>Hue</option>
                </select>
                </td>
           </tr>
           <tr>
                <td>Industry</td>
                <td>:<select name=industry>
                           <option value=AUT>Automobile</option>
                           <option value=FOO>Foods</option>
                           <option value=ENG>Enginering</option>
                           <option value=GAR>Garment</option>
                </select>
                </td>
           </tr>
           <tr>
                <td></td>
                <td><input type=submit value=Submit></td>
           </tr>
     </table>
</form>

Nếu nhấn Submit thì hai giá trị chọn sẽ được truyền lên trên QueryString với hai tham số là tên của thẻ select. Trong đó, hai tham số và giá  trị tương ứng là:

mypage.php?province=HAN&industry=FOO, bằng cách sử dụng biến form bạn có thể lấy được giá trị này như ví dụ sau:

<?php
echo "Province = ".$province; echo "Industry = ".$industry;
?>

Đối với trường hợp bạn không sử dụng thẻ form như hai trường hợp trên, chúng ta cũng có thể lấy giá trị từ chuỗi QueryString bằng biến form. Chẳng hạn khi chạy trang mypage.php có cấu trúc như sau:

http://mydomain.com/mypage.php?firstname=Dung&lastname=nguyen. Ở đây biến form là tên của tham số trên QueryString có giá trị bằng giá trị của tham số:

<?php
echo "First Name = ".$firstname; echo "Last Name = ".$lastname;
?>

Chú ý: Khi sử dụng biến form bạn không nên khai báo biến cùng tên với các tham số hay tên của thẻ nhập liệu trong trang triệu gọi trước đó. Nếu không thì giá trị trả về là giá trị của biến thường thay vì biến form.

Phương thức GET

Ngoài cách sử dụng biến form trong trường hợp lấy giá trị từ tham số của QueryString, bạn có thể sử dụng hàm $_GET.

Ví dụ: Chúng ta khai báo trang PHP như sau:

<form action=ex4.php method=get>
     Province: <select name=province>
           <option value=HAN>Ha Noi</option>
           <option value=HCM>Ho Chi Minh</option>
           <option value=HUE>Hue</option>
     </select> <input type=submit value=Submit>
</form>
<?php
if (isset($_GET["province"])) {
    $result = $_GET["province"];
    echo "Result: " . $result;
}

?>

Lưu ý rằng, nếu bạn không sử dụng hàm isset để kiểm tra $province tồn tại hay không thì trang php sẽ phun lỗi trong trường hợp lần đầu tiên gọi đến trang mà không submit.

Tương tự như vậy trong trường hợp bạn không sử dụng thẻ form mà giá trị lấy tử chuỗi QueryString bằng cách sử dụng $_GET và nhiệm vụ chính của nó vẫn là lấy nội dung trang dữ liệu từ web server.

Với url sau: shownews.php?id=50

Vậy với trang shownews ta dùng hàm $_GET[“id”] sẽ được giá trị là 50.

Phương thức POST

Tương tự như $ _GET nhưng $ _POST cho phép bạn lấy giá trị lấy từ các thẻ nhập liệu của thẻ form trong trang submit trước đó.

Post là phần dữ liệu được gửi qua các form HTML có method =”POST”

Để 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. Chẳng hạn với FORM sau:

<form method="POST">
User Name: <input type="text" name="T1" size="20"> Password: <input
type="password" name="T2" size="20"> Sex: <Select name="sex">
<option value=1>Male</option>
<option value=0>Female</option>
</select> <input type="submit" value="Gui di" name="B1">
</form>

Khi người dùng nhập user name (giả sử là Minh), password (giả sử là 123456) và chọn sex là Male, khi đó, mảng $_POST sẽ có các phần tử sau:

$_POST["T1"] = Minh
$_POST["T2"] = 123456
$_POST["sex"] = 1

Sau khi lấy được các giá trị này rồi, các bạn có thể sử dụng giá trị các biến trên. Trong bài này, chúng ta tìm hiểu cách sử dụng biến form và hai phương thức $_POST, $_GET. Ngoài ra, bạn cũng tìm hiểu cách kiểm tra biến tồn tại hay không bằng hàm isset().

Chú ý: Khi sử dụng biến form bạn tránh trường hợp khai báo biến cục bộ hay toàn cục trong tang PHP cùng tên với thẻ nhập liệu của form trước đó submit đến hay tham số trên querystring.

Làm ví dụ dưới đây!

Khi người dùng nhấn nút “Đăng nhập” thì dữ liệu mà người dùng vừa nhập vào ( bao gồm Tên đăng nhập  và Mật khẩu) sẽ được truyền theo phương thức POST sang file login.php. Ở file login.php này chúng ta sẽ lấy được dữ liệu thông qua biến môi trường $_POST.

Bạn tạo thêm 1 file tên là login.php. Chúng ta sẽ thao tác lấy dữ liệu từ ô Input bằng file đó.

Ví dụ:

Cách lấy dữ liệu từ ô Input:

Nếu phương thức là post thì dùng lệnh $tenbien = $_POST[“name_input”].

Nếu phương thức là get thì dùng lệnh $tenbien = $_GET[“name_input”].

Tùy theo phương thức của form là POST hay GET mà ta dùng $_POST[] hay $_GET[].

Và đoạn code ở trên tại sao chúng ta phải có: if(isset($_POST[“login”])){}. Nghĩa là khi bạn nhấn vào nút đăng nhập thì dữ liệu mới được lấy. Dòng code này để giúp trình duyệt không báo lỗi khi ta chưa nhấn vào nút ĐĂNG NHẬP.

Ngoài if(isset($_POST[“login”])){} bạn còn có thể sử dụng if(count($_POST) > 0){}.

Sự khác nhau giữa POST và GET là gì ? 

Với phương thức POST thì dữ liệu được truyền đi ngầm sang file login.php, còn với phương thức GET dữ liệu được gửi đi và dữ liệu mà chúng ta vừa nhập vào sẽ được hiển thị lên ở thanh địa chỉ của trình duyệt.

Việc truyền dữ liệu lên thanh địa chỉ như vậy khiến cho thông tin của chúng ta không được bảo mật, người dùng hoàn toàn có thể can thiệp đến dữ liệu của chúng ta vì vậy với những form có thông tin cần bảo mật như đăng nhập hay đăng ký thì chúng ta không nên sử dụng phương thức GET.

Download Sourse tại đây.

Bài tiếp theo “Kỹ thuật Upload file trong PHP”.