$_GET và $_POST

Superglobals

Trong PHP có định nghĩa trước các biến superglobals, có thể truy cập bất cứ đâu mà không cần khai báo từ khóa global. Các biến superglobals bao gồm:

  • $GLOBALS
  • $_SERVER
  • $_GET
  • $_POST
  • $_FILES
  • $_COOKIE
  • $_SESSION
  • $_REQUEST
  • $_ENV

$_GET

Khi gửi nội dung lên PHP bằng cấu trúc form của html thì chúng ta sẽ nhận được giá trị trong các biến $_GET hoặc $_POST.

Ví dụ với get method, viết file index.php như sau:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<body>
  <div>
    <?php
      if (isset($_GET['name']) && isset($_GET['email'])) {
        echo "Your submit <br />";
        echo "Name is <strong>" . $_GET['name'] . '</strong><br />';
        echo "Email is <strong>" . $_GET['email'] . '</strong>';
      }
    ?>
  </div>
  <form method="get">
    Name <input type="text" name="name" required> <br />
    Email <input type="text" name="email" required> <br />
    <button type="submit">Submit</button>
  </form>
</body>
</html>

Chạy webserver với câu lệnh php -S localhost:3000 (hoặc có thể chạy với apache). Truy cập trình duyệt Chrome rồi nhập url http://localhost:3000/index.php.

$_POST

Với HTML chúng ta thay đổi <form method="get"> thành <form method="post">. Và với PHP, chúng ta đổi $_GET thành $_POST.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<body>
  <div>
    <?php
      if (isset($_POST['name']) && isset($_POST['email'])) {
        echo "Your submit <br />";
        echo "Name is <strong>" . $_POST['name'] . '</strong><br />';
        echo "Email is <strong>" . $_POST['email'] . '</strong>';
      }
    ?>
  </div>
  <form method="post">
    Name <input type="text" name="name" required> <br />
    Email <input type="text" name="email" required> <br />
    <button type="submit">Submit</button>
  </form>
</body>
</html>

Khác biệt của get và post

Khác biệt nhất giữa get và post đó chính là khi nhập data vào form có method là get để submit thì url sẽ thêm tham số vào. Ví dụ như method là get sẽ có dạng index.php?name=bill&email=billgates@gmail.com.

Vì dữ liệu của get được đưa lên url mà url có giới hạn khoảng 2KB nên nội dung của get cũng giới hạn. Ngoài ra khi đưa dữ liệu bằng get method lên sẽ được lưu trong lịch sử của trình duyệt. Cùng với đó là lưu trong log của web server (như apache). Nên nội dung cần bảo mật như mật khẩu chúng ta nên sử dụng post method để an toàn hơn.