Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

Superglobals: $_POST

บทความนี้กล่าวถึง `$_POST` ซึ่งเป็น Superglobal array ใน PHP ที่ใช้รับข้อมูลจากฟอร์มที่ส่งด้วย HTTP POST method โดยข้อมูลจะถูกส่งใน HTTP body ทำให้ปลอดภัยกว่า G...

Superglobals: $_POST

ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับ $_GET ซึ่งเป็น Superglobal array ที่ใช้รับข้อมูลจาก URL วันนี้เราจะมาทำความรู้จักกับ $_POST อีกหนึ่ง Superglobal ที่มีความสำคัญไม่แพ้กัน โดย $_POST จะใช้สำหรับรับข้อมูลที่ส่งมาจากฟอร์ม (Form) ในรูปแบบ POST method

ความหมายของ $_POST

$_POST เป็น Superglobal array ใน PHP ที่ใช้เก็บข้อมูลที่ถูกส่งมาจากฟอร์มโดยใช้ HTTP POST method ข้อมูลที่ถูกส่งมาจะอยู่ในรูปแบบของ key-value pairs ซึ่ง key คือ name attribute ของ input fields ในฟอร์ม และ value คือค่าที่ผู้ใช้กรอกลงไปใน input field นั้นๆ

ข้อดีของการใช้ POST method คือข้อมูลจะถูกส่งใน HTTP body ไม่ได้แสดงใน URL ทำให้มีความปลอดภัยมากกว่า GET method (โดยเฉพาะข้อมูลสำคัญ เช่น รหัสผ่าน) และสามารถส่งข้อมูลจำนวนมากได้

การส่งข้อมูลผ่าน Form ด้วย POST Method

ในการส่งข้อมูลผ่านฟอร์มด้วย POST method เราจะต้องกำหนด attribute method="post" ใน <form> tag ตัวอย่างเช่น:

<form action="process.php" method="post">
  <label for="name">ชื่อ:</label><br>
  <input type="text" id="name" name="name"><br><br>

  <label for="email">อีเมล:</label><br>
  <input type="email" id="email" name="email"><br><br>

  <input type="submit" value="ส่งข้อมูล">
</form>

ในตัวอย่างนี้ ฟอร์มจะส่งข้อมูลไปยังไฟล์ process.php เมื่อผู้ใช้กดปุ่ม "ส่งข้อมูล" ข้อมูลที่ส่งไปจะประกอบด้วย:

  • name: ค่าที่ผู้ใช้กรอกในช่อง "ชื่อ"
  • email: ค่าที่ผู้ใช้กรอกในช่อง "อีเมล"

สังเกตว่า name attribute ใน <input> tag มีความสำคัญมาก เพราะมันจะเป็น key ใน $_POST array

การรับข้อมูลใน PHP

ในไฟล์ process.php เราสามารถเข้าถึงข้อมูลที่ส่งมาจากฟอร์มได้โดยใช้ $_POST array:

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = $_POST["name"];
  $email = $_POST["email"];

  echo "ชื่อ: " . htmlspecialchars($name) . "<br>";
  echo "อีเมล: " . htmlspecialchars($email) . "<br>";
} else {
  echo "ไม่สามารถเข้าถึงหน้านี้โดยตรงได้";
}

?>

อธิบายโค้ด:

  1. $_SERVER["REQUEST_METHOD"] == "POST": ตรวจสอบว่า request method เป็น POST หรือไม่ เพื่อป้องกันการเข้าถึงไฟล์โดยตรง
  2. $name = $_POST["name"];: รับค่าจาก $_POST array โดยใช้ key "name" และเก็บไว้ในตัวแปร $name
  3. $email = $_POST["email"];: รับค่าจาก $_POST array โดยใช้ key "email" และเก็บไว้ในตัวแปร $email
  4. htmlspecialchars($name) และ htmlspecialchars($email): ใช้ฟังก์ชัน htmlspecialchars() เพื่อป้องกัน XSS (Cross-Site Scripting) โดยการแปลง special characters เป็น HTML entities
  5. echo: แสดงผลข้อมูลที่รับมา

ตัวอย่าง: ฟอร์ม Login

ลองมาดูตัวอย่างการสร้างฟอร์ม Login ที่ใช้ POST method:

<form action="login.php" method="post">
  <label for="username">ชื่อผู้ใช้:</label><br>
  <input type="text" id="username" name="username"><br><br>

  <label for="password">รหัสผ่าน:</label><br>
  <input type="password" id="password" name="password"><br><br>

  <input type="submit" value="เข้าสู่ระบบ">
</form>

และโค้ด PHP สำหรับตรวจสอบ Login (login.php):

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $username = $_POST["username"];
  $password = $_POST["password"];

  // ตรวจสอบ username และ password ในฐานข้อมูล หรือจากแหล่งข้อมูลอื่นๆ
  if ($username == "admin" && $password == "password") {
    echo "เข้าสู่ระบบสำเร็จ!";
  } else {
    echo "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง";
  }
} else {
  echo "ไม่สามารถเข้าถึงหน้านี้โดยตรงได้";
}

?>

ข้อควรระวัง: ในตัวอย่างนี้ เราใช้ username และ password แบบ hardcoded ซึ่งไม่ปลอดภัยสำหรับการใช้งานจริง ในบทเรียนต่อๆ ไป เราจะเรียนรู้วิธีการเก็บรหัสผ่านอย่างปลอดภัยและการเชื่อมต่อกับฐานข้อมูล

ความแตกต่างระหว่าง GET และ POST

GET และ POST เป็น HTTP methods ที่ใช้สำหรับส่งข้อมูลจาก client ไปยัง server แต่มีความแตกต่างกันดังนี้:

  • ข้อมูล: GET ส่งข้อมูลผ่าน URL (query string) ส่วน POST ส่งข้อมูลใน HTTP body
  • ความปลอดภัย: POST ปลอดภัยกว่า GET เนื่องจากข้อมูลไม่แสดงใน URL
  • ขนาดข้อมูล: POST สามารถส่งข้อมูลได้มากกว่า GET (GET มีข้อจำกัดเรื่องความยาวของ URL)
  • การใช้งาน: GET เหมาะสำหรับการดึงข้อมูล (เช่น การค้นหา) ส่วน POST เหมาะสำหรับการส่งข้อมูลเพื่อสร้าง แก้ไข หรือลบข้อมูล (เช่น การสมัครสมาชิก การสั่งซื้อสินค้า)
  • Bookmark: GET สามารถ bookmark URL ได้ (เพราะข้อมูลอยู่ใน URL) แต่ POST ไม่สามารถทำได้
  • Cache: GET สามารถ cache ได้ แต่ POST โดยทั่วไปจะไม่ cache

สรุปตารางความแตกต่าง:

คุณสมบัติ GET POST
ข้อมูล URL (Query String) HTTP Body
ความปลอดภัย น้อยกว่า มากกว่า
ขนาดข้อมูล จำกัด ไม่จำกัด (ในทางปฏิบัติมีข้อจำกัดตาม server configuration)
การใช้งาน ดึงข้อมูล สร้าง/แก้ไข/ลบข้อมูล
Bookmark ได้ ไม่ได้
Cache ได้ ไม่ได้ (โดยทั่วไป)

ข้อผิดพลาดที่พบบ่อยและการแก้ไข

  • ไม่ได้กำหนด method="post" ใน <form> tag: ทำให้ข้อมูลถูกส่งด้วย GET method แทน
  • ไม่ได้กำหนด name attribute ใน <input> tag: ทำให้ข้อมูลไม่ถูกส่งไปที่ server
  • พยายามเข้าถึง $_POST โดยตรง (ไม่ได้ส่งข้อมูลผ่านฟอร์ม): ทำให้เกิด error "Undefined array key" ควรตรวจสอบ $_SERVER["REQUEST_METHOD"] == "POST" ก่อนเสมอ
  • ไม่ทำการ sanitize ข้อมูลที่รับมาจาก $_POST: อาจทำให้เกิด XSS หรือ SQL injection ควรใช้ htmlspecialchars() และ prepared statements (จะกล่าวถึงในบทเรียนต่อๆ ไป)

กรณีใช้งานจริง

$_POST ถูกใช้ในหลากหลายสถานการณ์ เช่น:

  • ฟอร์มสมัครสมาชิก: รับข้อมูลชื่อ ที่อยู่ อีเมล และรหัสผ่านของผู้ใช้
  • ฟอร์มติดต่อเรา: รับข้อมูลชื่อ อีเมล และข้อความจากผู้ใช้
  • ฟอร์มสั่งซื้อสินค้า: รับข้อมูลที่อยู่จัดส่ง วิธีการชำระเงิน และรายละเอียดสินค้าที่สั่งซื้อ
  • การอัปโหลดไฟล์: (จะกล่าวถึงในบทเรียนต่อๆ ไป)
  • API endpoint ที่รับข้อมูล JSON: (จะกล่าวถึงในบทเรียนต่อๆ ไป)

ในบทนี้ เราได้เรียนรู้เกี่ยวกับ $_POST Superglobal array ซึ่งเป็นเครื่องมือสำคัญในการรับข้อมูลจากฟอร์มใน PHP การเข้าใจการทำงานของ $_POST และความแตกต่างระหว่าง GET และ POST จะช่วยให้คุณสามารถสร้างเว็บแอปพลิเคชันที่รับข้อมูลจากผู้ใช้ได้อย่างมีประสิทธิภาพและปลอดภัย ในบทถัดไป เราจะมาทำความรู้จักกับ $_REQUEST ซึ่งเป็น Superglobal ที่รวมเอาข้อมูลจาก GET, POST และ COOKIE เข้าไว้ด้วยกัน

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service