การรับข้อมูลจาก Form (POST)
ในบทที่แล้ว เราได้เรียนรู้วิธีการส่งข้อมูลผ่าน URL ด้วย HTTP Method GET และการเข้าถึงข้อมูลเหล่านั้นผ่าน $_GET ใน PHP แต่ยังมีอีกวิธีที่สำคัญและนิยมใช้กันมากในการรับข้อมูลจากฝั่ง Client นั่นคือ การใช้ Form และ HTTP Method POST ซึ่งเราจะมาเรียนรู้กันในบทนี้
ทำไมต้องใช้ POST?
POST เหมาะสำหรับการส่งข้อมูลจำนวนมาก หรือข้อมูลที่ต้องการความเป็นส่วนตัวมากกว่า GET เนื่องจากข้อมูลจะไม่ปรากฏใน URL ทำให้ปลอดภัยกว่าสำหรับการส่งข้อมูลสำคัญ เช่น รหัสผ่าน หรือข้อมูลส่วนตัวอื่นๆ นอกจากนี้ POST ยังสามารถส่งข้อมูลประเภทต่างๆ ได้หลากหลายกว่า เช่น ไฟล์ภาพ หรือไฟล์เอกสาร
รู้จักกับ $_POST
เช่นเดียวกับ $_GET, $_POST เป็นตัวแปร Superglobal ใน PHP ที่เก็บข้อมูลที่ส่งมาจาก Form ที่ใช้ HTTP Method POST โดย $_POST เป็น Array ที่เก็บ Key-Value Pair ของข้อมูลที่ส่งมา
ตัวอย่าง Form HTML
ก่อนที่เราจะไปดูโค้ด PHP เรามาสร้าง Form HTML ง่ายๆ กันก่อน:
<form action="process_form.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>
ในตัวอย่างนี้:
<form action="process_form.php" method="post">: กำหนดว่าเมื่อกดปุ่ม "ส่งข้อมูล" ข้อมูลจะถูกส่งไปยังไฟล์process_form.phpโดยใช้ HTTP MethodPOST<label for="name">ชื่อ:</label>และ<input type="text" id="name" name="name">: สร้าง Input field สำหรับรับชื่อ โดยname="name"คือชื่อของ Parameter ที่จะถูกส่งไปพร้อมกับข้อมูล<label for="email">อีเมล:</label>และ<input type="email" id="email" name="email">: สร้าง Input field สำหรับรับอีเมล โดยname="email"คือชื่อของ Parameter ที่จะถูกส่งไปพร้อมกับข้อมูล<input type="submit" value="ส่งข้อมูล">: สร้างปุ่มสำหรับส่ง Form
การรับข้อมูลใน PHP (process_form.php)
ตอนนี้เรามาสร้างไฟล์ process_form.php เพื่อรับข้อมูลที่ส่งมาจาก Form:
<?php
// ตรวจสอบว่า Form ถูกส่งมาหรือไม่
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// รับค่าจาก Form
$name = $_POST["name"];
$email = $_POST["email"];
// แสดงผลข้อมูลที่รับมา
echo "ชื่อ: " . $name . "<br>";
echo "อีเมล: " . $email . "<br>";
} else {
// ถ้าไม่ได้ส่ง Form มา ให้แสดงข้อความแจ้งเตือน
echo "กรุณาส่งข้อมูลผ่าน Form";
}
?>
ในตัวอย่างนี้:
if ($_SERVER["REQUEST_METHOD"] == "POST"): ตรวจสอบว่า Request ที่เข้ามาเป็น HTTP MethodPOSTหรือไม่ เพื่อให้แน่ใจว่าข้อมูลถูกส่งมาจาก Form จริงๆ$name = $_POST["name"];: รับค่าจาก Input field ที่มีname="name"มาเก็บไว้ในตัวแปร$name$email = $_POST["email"];: รับค่าจาก Input field ที่มีname="email"มาเก็บไว้ในตัวแปร$emailecho "ชื่อ: " . $name . "<br>";และecho "อีเมล: " . $email . "<br>";: แสดงผลข้อมูลที่รับมาelse { echo "กรุณาส่งข้อมูลผ่าน Form"; }: หากไม่มีการส่งข้อมูลผ่าน Form จะแสดงข้อความแจ้งเตือน
การตรวจสอบข้อมูลจาก Form
การรับข้อมูลจาก Form โดยตรงโดยไม่ตรวจสอบ อาจนำไปสู่ปัญหาด้านความปลอดภัย หรือ Error ต่างๆ ได้ ดังนั้นเราจึงควรตรวจสอบข้อมูลก่อนนำไปใช้งานเสมอ
ตัวอย่างการตรวจสอบข้อมูล:
<?php
// ฟังก์ชันสำหรับตรวจสอบข้อมูล
function validateFormData($data) {
$data = trim($data); // ลบช่องว่างหน้าหลัง
$data = stripslashes($data); // ลบ Backslashes
$data = htmlspecialchars($data); // แปลง Special characters เป็น HTML entities
return $data;
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// รับค่าจาก Form และตรวจสอบข้อมูล
$name = validateFormData($_POST["name"]);
$email = validateFormData($_POST["email"]);
// ตรวจสอบว่าข้อมูลว่างหรือไม่
if (empty($name) || empty($email)) {
echo "กรุณากรอกข้อมูลให้ครบถ้วน";
} else {
// แสดงผลข้อมูลที่รับมา
echo "ชื่อ: " . $name . "<br>";
echo "อีเมล: " . $email . "<br>";
}
} else {
echo "กรุณาส่งข้อมูลผ่าน Form";
}
?>
ในตัวอย่างนี้:
function validateFormData($data): สร้างฟังก์ชันสำหรับตรวจสอบข้อมูล โดยจะทำการลบช่องว่างหน้าหลัง ลบ Backslashes และแปลง Special characters เป็น HTML entities เพื่อป้องกัน XSS Attack$name = validateFormData($_POST["name"]);และ$email = validateFormData($_POST["email"]);: เรียกใช้ฟังก์ชันvalidateFormData()เพื่อตรวจสอบข้อมูลก่อนนำไปใช้งานif (empty($name) || empty($email)): ตรวจสอบว่าข้อมูลว่างหรือไม่ หากว่างจะแสดงข้อความแจ้งเตือน
การประมวลผลข้อมูลจาก Form
หลังจากที่เราตรวจสอบข้อมูลเรียบร้อยแล้ว เราสามารถนำข้อมูลไปประมวลผลต่อได้ เช่น บันทึกลงฐานข้อมูล หรือส่งอีเมล
ตัวอย่างการบันทึกข้อมูลลงไฟล์ (ไม่แนะนำสำหรับ Production):
<?php
function validateFormData($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = validateFormData($_POST["name"]);
$email = validateFormData($_POST["email"]);
if (empty($name) || empty($email)) {
echo "กรุณากรอกข้อมูลให้ครบถ้วน";
} else {
// สร้าง String สำหรับบันทึกลงไฟล์
$data = "ชื่อ: " . $name . ", อีเมล: " . $email . "\n";
// บันทึกลงไฟล์ (ไม่แนะนำสำหรับ Production)
file_put_contents("data.txt", $data, FILE_APPEND);
echo "บันทึกข้อมูลเรียบร้อย";
}
} else {
echo "กรุณาส่งข้อมูลผ่าน Form";
}
?>
ในตัวอย่างนี้:
$data = "ชื่อ: " . $name . ", อีเมล: " . $email . "\n";: สร้าง String ที่จะบันทึกลงไฟล์file_put_contents("data.txt", $data, FILE_APPEND);: บันทึกข้อมูลลงไฟล์data.txtโดยFILE_APPENDจะเป็นการเพิ่มข้อมูลต่อท้ายไฟล์เดิม
ข้อควรระวัง: การบันทึกข้อมูลลงไฟล์โดยตรง ไม่ปลอดภัยและไม่เหมาะสำหรับ Production Environment เนื่องจากอาจมีปัญหาเรื่องการจัดการไฟล์ และความปลอดภัยของข้อมูล ควรใช้ฐานข้อมูลในการเก็บข้อมูลแทน
สรุป
ในบทนี้ เราได้เรียนรู้วิธีการรับข้อมูลจาก Form โดยใช้ HTTP Method POST และตัวแปร Superglobal $_POST นอกจากนี้เรายังได้เรียนรู้ถึงความสำคัญของการตรวจสอบข้อมูลก่อนนำไปใช้งาน และวิธีการประมวลผลข้อมูลเบื้องต้น ในบทต่อไป เราจะมาเรียนรู้เกี่ยวกับ JSON ซึ่งเป็น Format ที่นิยมใช้ในการรับส่งข้อมูลระหว่าง API และ Client