Xử lý form ngay tại trang trong PHP

Thông thường khi làm việc với form, chúng ta lấy dữ liệu từ thẻ input,  texarea, select, radio button và checkbox rồi chuyển nó sang trang php khác để thực hiện các yêu cầu. Hôm nay tôi sẽ giới thiệu với các bạn cách xử lý form ngay tại trang – tức là không cần chuyển nó sang trang khác nữa.

Câu hỏi đầu tiên có lẽ là, xử lý ngay tại trang có lợi ích gì không? Câu trả lời là như này, trước hết chuyển xử lý sang trang khác không phải lúc nào cũng là biện pháp hay, chẳng hạn với bài tập làm máy tính bỏ túi đơn giản, sau khi chuyển dữ liệu sang trang action.php để tính toán tôi đã phải bổ sung giao diện giống trang index vào trang action.php để hiển thị kết quả cho người dùng. Nếu tôi xử lý ngay tại trang index.php thì tôi không phải làm lại giao diện ở trang action.php nữa.

Quay lại chính bài tập ngày xưa ấy, giờ tôi sẽ chuyển đổi code. Lúc này vì xử lý ngay tại trang, nên ở form tôi phải thay đổi một số thứ và gắn thêm vài đoạn code (Bạn nên xem lại code của cách làm ngày xưa để hiểu những thay đổi được tiến hành trong bài viết này):

<form action=”index.php” method=”get”>
    <input type=”text” name=”so_thu_nhat” value=”<?php echo $so_thu_nhat ?>” size=”10″>
    <input type=”text” name=”toan_tu” value=”<?php echo $toan_tu ?>” size=”5″>
    <input type=”text” name=”so_thu_hai” value=”<?php echo $so_thu_hai ?>” size=”10″>
    =
    <input type=”text” value=”<?php echo $ketqua ?>” size=”10″>
    <input type=”submit” value=”Tính” name=”action”>
</form>

Bạn có thể nhận thấy ở thuộc tính action thay vì để action.php, tôi để index.php – tức là gọi lại chính trang đang nhập dữ liệu. Tiếp theo tôi phải bổ sung value bằng lệnh echo cho các thẻ input để khi người dùng nhấn tính các con số mà họ vừa nhập vào không bị mất hiển thị.

Cuối cùng tôi lấy code từ trang action.php để đưa sang index.php, nhưng có một vấn đề là khi khởi động trang lần đầu tiên, các giá trị $so_thu_nhat, $toan_tu, $so_thu_hai, $ketqua không tồn tại nên trang sẽ báo lỗi. Để sửa lỗi này chúng ta để các giá trị trên là rỗng (rỗng và không tồn tại là khác nhau – một cái là rỗng nhưng nó vẫn tồn tại) khi khởi động trang lần đầu tiên.

Câu hỏi tiếp theo lại là, làm sao biết được khi nào trang khởi động lần đầu tiên để mà gán giá trị rỗng $so_thu_nhat, $toan_tu, $so_thu_hai, $ketqua ???

Bạn để ý thì sẽ thấy khi trang được bật lên lần đầu tiên thì lúc đó nút Tính chưa được nhấn – tức là chưa được submit. Chúng ta sử dụng chính dấu hiệu này để gán các giá trị rỗng, code như sau:

<?php

if (!isset($_GET[‘action’]) || $_GET[‘action’]==””) {
$so_thu_nhat=””;
$so_thu_hai=””;
$toan_tu=””;
$ketqua=””;
}

Chính cái $_GET[‘action’] sẽ lấy thông tin từ thuộc tính name của thẻ input có type là submit (nút nhấn). Khi nút chưa được nhấn thì có nghĩa là chẳng có giá trị nào cho $_GET[‘action’] cả, khi nó được nhấn thì $_GET[‘action’] sẽ bằng Tính.
 
Đoạn code trên chính là cái chúng ta cần – nó được hiểu là nếu nút Tính chưa được nhấn thì gán các giá trị là rỗng cho các biến…
Câu hỏi cuối cùng, nếu nút Tính được nhấn thì sao, đây là thời điểm mà chúng ta phải quay lại trang action.php để lấy lại đoạn code xử lý.
Kết quả của tất cả các thao tác trên là đoạn code ngay dưới đây, bạn có thể copy nó và chạy thử trên local host:
<?php
 
if (!isset($_GET[‘action’]) || $_GET[‘action’]==””) {
$so_thu_nhat=””;
$so_thu_hai=””;
$toan_tu=””;
$ketqua=””;
}
else {
    $so_thu_nhat=$_GET[‘so_thu_nhat’];
    $so_thu_hai=$_GET[‘so_thu_hai’];
    $toan_tu=$_GET[‘toan_tu’];
 
    if (empty($so_thu_nhat) || empty($toan_tu) || empty($so_thu_hai)) {
        echo ‘Canh bao: Ban nhap thieu du lieu !!!’;
        exit();
    }
 
    if (!is_numeric($so_thu_nhat) || !is_numeric($so_thu_hai )) {
        echo ‘Canh bao: Ban phai nhap so !!!’;
        exit();
    }
 
    if ($toan_tu == ‘+’) {
        $ketqua=$so_thu_nhat + $so_thu_hai;
    }
    else if ($toan_tu == ‘-‘) {
        $ketqua=$so_thu_nhat – $so_thu_hai;
    }
    else if ($toan_tu == ‘/’) {
        $ketqua=$so_thu_nhat / $so_thu_hai;
    }
    else if ($toan_tu == ‘*’) {
        $ketqua=$so_thu_nhat * $so_thu_hai;
    }
    else {
        echo ‘Canh bao: Toan tu ban nhap vao khong chinh xac !!!’;
        exit();
    }
}
?>
 
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
        <title></title>
    </head>
    <body>
 
<form action=”index.php” method=”get”>
    <input type=”text” name=”so_thu_nhat” value=”<?php echo $so_thu_nhat ?>” size=”10″>
    <input type=”text” name=”toan_tu” value=”<?php echo $toan_tu ?>” size=”5″>
    <input type=”text” name=”so_thu_hai” value=”<?php echo $so_thu_hai ?>” size=”10″>
    =
    <input type=”text” value=”<?php echo $ketqua ?>” size=”10″>
    <input type=”submit” value=”Tính” name=”action”>
</form>
 
    </body>
</html>

6 thoughts on “Xử lý form ngay tại trang trong PHP”

  1. em có làm button ở bình luận, nhưng khi ấn gửi xong trang bị reset lại, em muốn sau khi gửi bình luận sẽ hiện ngay bên dưới thì phải sửa ntn ạ??? Mong nhận được sự giúp đỡ từ anh

    Reply
  2. anh ơi! ví dụ trong 1 trang web mà em có 2 form( 1 form đăng ký và 1 form đăng nhập) thì xử lý hàm nhận dấu hiệu nhấn nút (type =”submit”) như thế nào anh, làm sao để máy biết là nút Submit của form nào?

    Reply
    • Anh nhớ mang máng là form cũng có id và nút bấm sẽ chỉ có tác dụng với id của form đó mà không phải của form khác. Em thử xem thế nào nhé.

      Reply

Leave a Comment