Biểu mẫu (Form) trong HTML

Biểu mẫu thu thập thông tin từ người dùng: đăng nhập, đăng ký, tìm kiếm, khảo sát. Bài này dạy cấu trúc form, các loại input, nhãn, kiểm tra dữ liệu và gửi form.

45 phútCơ bản
Bạn sẽ học được
  • Tạo form với action và method
  • Dùng input với nhiều type
  • Dùng label, select, textarea, button, fieldset
  • Kiểm tra dữ liệu bằng required, pattern, min, max
Thuật ngữ cần biết
action
Địa chỉ nhận dữ liệu khi gửi form.
method
Cách gửi: GET (hiện trên URL) hoặc POST (ẩn).
name
Tên trường, máy chủ dùng để đọc dữ liệu.
Validation
Kiểm tra dữ liệu hợp lệ trước khi gửi.

Khái niệm và lý thuyết

Mỗi ô nhập cần name để dữ liệu được gửi đi và một <label> gắn với id của ô (bấm vào nhãn sẽ đưa con trỏ vào ô, rất quan trọng trên điện thoại). Trình duyệt tự kiểm tra các ràng buộc như required, type="email" trước khi gửi.

typeHiển thị
text, passwordÔ chữ, ô mật khẩu
email, tel, urlCó kiểm tra định dạng, bàn phím phù hợp trên điện thoại
number, rangeSố, thanh trượt
date, timeChọn ngày, giờ
checkbox, radioChọn nhiều, chọn một
fileTải tệp
colorChọn màu
submit, resetNút gửi, nút xóa

Form đăng ký

<form action="#" method="post" onsubmit="alert('Đã gửi!'); return false;">
  <fieldset>
    <legend>Thông tin sinh viên</legend>
    <p><label for="ho-ten">Họ tên:</label><br>
       <input type="text" id="ho-ten" name="ho_ten" required placeholder="Lò Văn A"></p>
    <p><label for="email">Email:</label><br>
       <input type="email" id="email" name="email" required></p>
    <p><label for="ngay-sinh">Ngày sinh:</label><br>
       <input type="date" id="ngay-sinh" name="ngay_sinh"></p>
    <p>Giới tính:
       <label><input type="radio" name="gioi_tinh" value="nam"> Nam</label>
       <label><input type="radio" name="gioi_tinh" value="nu"> Nữ</label></p>
    <p><label for="nganh">Ngành:</label>
       <select id="nganh" name="nganh">
         <option>Công nghệ thông tin</option>
         <option>Sư phạm Tin học</option>
       </select></p>
    <p><label for="gioi-thieu">Giới thiệu:</label><br>
       <textarea id="gioi-thieu" name="gioi_thieu" rows="3" cols="40"></textarea></p>
    <p><label><input type="checkbox" name="dong_y" required> Tôi đồng ý nội quy</label></p>
    <button type="submit">Đăng ký</button> <button type="reset">Nhập lại</button>
  </fieldset>
</form>
Kết quả hiển thị
Thông tin sinh viên




Giới tính:


Bấm Đăng ký khi bỏ trống ô bắt buộc hoặc nhập email sai: trình duyệt tự báo lỗi.

Kiểm tra dữ liệu

<form onsubmit="alert('Hợp lệ!'); return false;">
  <input name="ma_sv" placeholder="Mã SV: 8 chữ số" pattern="[0-9]{8}" required>
  <input type="number" name="tuoi" min="16" max="60" placeholder="Tuổi">
  <input type="range" name="muc_do" min="1" max="5">
  <input type="color" name="mau" value="#2e7d32">
  <button>Kiểm tra</button>
</form>
Kết quả hiển thị

GET và POST

GETPOST
Dữ liệuHiện trên URL ?q=...Gửi trong thân yêu cầu
Dùng choTìm kiếm, lọcĐăng nhập, đăng ký, tải tệp
Bảo mậtKhông dùng cho mật khẩuPhù hợp hơn (kết hợp HTTPS)

Form cần chương trình phía máy chủ (PHP, Python, Node.js) để xử lý dữ liệu; hoặc dùng dịch vụ như Google Forms, Formspree khi làm trang tĩnh.

Học chi tiết về form

Bài này là phần tổng quan. Sáu bài tiếp theo đi sâu từng khía cạnh của form:

  1. Thuộc tính của form: action, method, target, enctype, novalidate
  2. Các phần tử của form: label, select, textarea, button, fieldset, datalist, output
  3. Các kiểu input: hơn 20 type: email, tel, date, file, color, range...
  4. Thuộc tính của input: readonly, disabled, pattern, min, max, autocomplete
  5. Kiểm tra dữ liệu: validity, setCustomValidity, formaction
  6. Định dạng và xử lý form: CSS, trợ năng, FormData, PHP
Mẹo hay

Dùng autocomplete="email", autocomplete="name" để trình duyệt điền sẵn thông tin đã lưu, giúp người dùng nhập nhanh.

Lưu ý

Kiểm tra ở trình duyệt chỉ để tiện cho người dùng; máy chủ luôn phải kiểm tra lại vì kẻ xấu có thể bỏ qua HTML.

Thực hành
  1. Tạo form đăng nhập: email, mật khẩu, ghi nhớ, nút đăng nhập.
  2. Tạo form khảo sát mức độ hài lòng môn học với radio và textarea.
  3. Tạo ô tìm kiếm dùng method GET.
  4. Thêm pattern kiểm tra số điện thoại 10 chữ số.
Tóm tắt bài học
  • form chứa các trường có name, gửi tới action.
  • label for gắn nhãn với ô nhập.
  • Nhiều type input cho từng loại dữ liệu.
  • required, pattern, min, max kiểm tra phía trình duyệt; máy chủ vẫn phải kiểm tra.