Đây sẽ là phần tương đối dài. Như phần trước chúng ta đã đề cập qua: Kiểm tra tính hợp lệ thật ra là một công việc rất "đau đầu nhức óc". Trong bài "cưỡi ngựa xem hoa" trước chúng ta chỉ mới lướt qua khái niệm cũng với những "thí nghiệm" không hoàn chỉnh mà thôi.
Quay lại với Form đơn giản mà chúng ta thử chạy trong ví dụ bài trước:
<html>
<head>
</head>
<body>
<?php
// định nghĩa biến và gán giá trị rỗng
$ten = $email = $gioitinh = $ghichu = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$ten = test_input($_POST["ten"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$ghichu = test_input($_POST["ghichu"]);
$gioitinh = test_input($_POST["gioitinh"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>Ví Dụ PHP Form Validation </h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Tên: <input type="text" name="ten">
<br><br>
E-mail: <input type="text" name="email">
<br><br>
Website: <input type="text" name="website">
<br><br>
Ghi Chú: <textarea name="ghichu" rows="5" cols="40"></textarea>
<br><br>
Giới tính:
<input type="radio" name="gioitinh" value="nữ">Nữ
<input type="radio" name="gioitinh" value="nam">Nam
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Bạn đã điền thông tin:</h2>";
echo $ten;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $ghichu;
echo "<br>";
echo $gioitinh;
?>
</body>
</html>
Form mà chúng ta đang làm việc bao gồm nhiều trường nhập liệu khác nhau: các trường văn bản bắt buộc và tùy chọn, các nút radio, cùng một nút gửi (submit).
Tuy nhiên như bài trước bạn chạy thử, nó chưa hề Validation gì cả, nếu bạn nhập "lung tung", không theo qui tắc nào thì Form vẫn hoạt động "bình thường"!
Những phần tử đơn giản như Text Field:
Tên: <input type="text" name="ten">
Hay Radio Button
Giới tính:
<input type="radio" name="gioitinh" value="nữ">Nữ
<input type="radio" name="gioitinh" value="nam">Nam
Không có gì quá khó, chúng ta sẽ coi như mặc định "đã hiểu". Cái chúng ta quan tâm là Form. Chúng ta sẽ "nhòm ngó" code để tìm hiểu "sơ sơ" ý nghĩa:
$_SERVER["PHP_SELF"] là một biến (super global variable) trả về tên file của PHP Script đang được thực thi hiện tại, ví dụ hiểu đơn giản là test.php của chúng ta.
Do đó, $_SERVER["PHP_SELF"] sẽ gửi dữ liệu từ Form đã được gửi đi về chính trang đó (ví dụ nằm luôn ăn vạ trên chính trang test.php), thay vì chuyển hướng sang một trang khác. Nhờ cách này, người dùng sẽ nhận được các thông báo lỗi ngay trên cùng một trang với Form nhập liệu.
Hàm htmlspecialchars() chuyển đổi các ký tự đặc biệt thành các thực thể HTML. Điều này có nghĩa là nó sẽ thay thế các ký tự HTML như '<' và '>' bằng '<' và '>'. Việc này giúp ngăn chặn kẻ tấn công khai thác mã nguồn bằng cách chèn mã HTML hoặc Javascript vào các biểu mẫu (thông qua các cuộc tấn công Cross-site Scripting).
Tới đây thì có một Cảnh báo!
Biến $_SERVER["PHP_SELF"] có thể bị các tin tặc lợi dụng!
Chúng ta không đi sâu vào chi tiết, chỉ tạm hiểu rằng nếu biến PHP_SELF được sử dụng trên trang web của bạn, người dùng có thể nhập thêm ký tự dấu gạch chéo '/', sau đó chèn các lệnh Cross Site Scripting (XSS) để thực thi mã độc. Để tránh điều đó, chúng ta sử dụng hàm htmlspecialchars().
Quay lại với việc Validation. Chúng ta sẽ muốn
| Field | Qui tắc Validation |
|---|---|
| Tên | Bắt buộc. + Chỉ được phép chứa các ký tự chữ cái và khoảng trắng. |
| Bắt buộc. + Phải chứa một địa chỉ email hợp lệ (có chứa ký tự @ và dấu chấm .) | |
| Website | Tùy chọn. Nếu có, giá trị này phải chứa một URL hợp lệ. |
| Ghi chú | Tùy chọn. Trường nhập liệu đa dòng (textarea) |
| Giới tính | Bắt buộc. Phải chọn một trong hai |
$tenerr = $emailerr = $gioitinherr = $ghichuerr= $websiteerr = "";
<style>.error {color: #FF0000;}</style>
if (empty($_POST["ten"])) {$tenerr= "Bạn phải nhập họ tên";}else{$ten = test_input($_POST["ten"]);}
<span class="error">* <?php echo $tenerr;?></span>
<html><head><style>.error {color: #FF0000;}</style></head><body><?php// define variables and set to empty values$ten = $email = $gioitinh = $ghichu = $website = "";$tenerr = $emailerr = $gioitinherr = $ghichuerr= $websiteerr = "";if ($_SERVER["REQUEST_METHOD"] == "POST") {if (empty($_POST["ten"])) {$tenerr = "Bạn phải nhập họ tên";}else{$ten = test_input($_POST["ten"]);}$email = test_input($_POST["email"]);$website = test_input($_POST["website"]);$ghichu = test_input($_POST["ghichu"]);$gioitinh = test_input($_POST["gioitinh"]);}function test_input($data) {$data = trim($data);$data = stripslashes($data);$data = htmlspecialchars($data);return $data;}?><h2>Ví Dụ PHP Form Validation </h2><form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">Tên: <input type="text" name="ten"> <span class="error">* <?php echo $tenerr;?></span><br><br>E-mail: <input type="text" name="email"><br><br>Website: <input type="text" name="website"><br><br>Ghi Chú: <textarea name="ghichu" rows="5" cols="40"></textarea><br><br>Giới tính:<input type="radio" name="gioitinh" value="nữ">Nữ<input type="radio" name="gioitinh" value="nam">Nam<br><br><input type="submit" name="submit" value="Submit"></form><?phpecho "<h2>Bạn đã điền thông tin:</h2>";echo $ten;echo "<br>";echo $email;echo "<br>";echo $website;echo "<br>";echo $ghichu;echo "<br>";echo $gioitinh;?></body></html>
Không có nhận xét nào:
Đăng nhận xét