GET กับ POST: ควรใช้แต่ละแบบเมื่อใด
ทำความเข้าใจความแตกต่างระหว่าง HTTP GET และ POST ใน PHP
GET กับ POST: ควรใช้แต่ละแบบเมื่อใด เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
เมธอด HTTP ใน PHP สำหรับเว็บ
เมื่อเบราว์เซอร์ส่งแบบฟอร์ม HTML จะใช้เมธอด HTTP อย่างใดอย่างหนึ่งระหว่าง GET หรือ POST PHP จะรับข้อมูลที่ส่งผ่านตัวแปรสากลพิเศษ:
$_GET— ข้อมูลที่ต่อท้าย URL$_POST— ข้อมูลในเนื้อหาคำขอ
เมธอด GET
GET จะต่อข้อมูลแบบฟอร์มเป็นพารามิเตอร์สตริงคำค้นหาของ URL:
<!-- HTML form -->
<form method="GET" action="search.php">
<input name="query" type="text">
<button type="submit">Search</button>
</form>
<!-- URL becomes: search.php?query=php+tutorial -->
<?php
$q = $_GET['query'] ?? '';
echo 'You searched for: ' . htmlspecialchars($q);เมธอด POST
POST ส่งข้อมูลในเนื้อหาคำขอ HTTP ซึ่งจะไม่แสดงใน URL:
<!-- HTML form -->
<form method="POST" action="login.php">
<input name="email" type="email">
<input name="password" type="password">
<button type="submit">Log In</button>
</form>
<?php
$email = $_POST['email'] ?? '';
$password = $_POST['password'] ?? '';ควรใช้ GET เมื่อใด
ใช้ GET เมื่อ:
- คำขอเป็นแบบ ทำซ้ำได้โดยไม่เกิดผลข้างเคียง
- ข้อมูลสามารถปรากฏใน URL ได้ เช่น คำค้นหา ตัวกรอง และการแบ่งหน้า
- ต้องการ URL ที่บันทึกเป็นบุ๊กมาร์กหรือแชร์ได้
- ข้อมูลไม่ใช่ข้อมูลละเอียดอ่อน
ควรใช้ POST เมื่อใด
ใช้ POST เมื่อ:
- คำขอเปลี่ยนแปลงสถานะของเซิร์ฟเวอร์ เช่น สร้าง อัปเดต หรือลบ
- ข้อมูลเป็นข้อมูลละเอียดอ่อน เช่น รหัสผ่านหรือข้อมูลส่วนบุคคล
- ต้องส่งข้อมูลจำนวนมาก เช่น ไฟล์หรือข้อความยาว
- ไม่ต้องการให้เบราว์เซอร์หรือพร็อกซีแคชข้อมูล
ขีดจำกัดความยาวของ GET
คำขอ GET มีขีดจำกัดความยาวของ URL (โดยทั่วไปประมาณ 2,000 อักขระในการใช้งานจริง) ส่วน POST ไม่มีขีดจำกัดในทางปฏิบัติ นอกจากการตั้งค่าของเซิร์ฟเวอร์:
<?php
// php.ini settings for POST limits:
// post_max_size = 8M (total POST body size)
// upload_max_filesize = 2M
// Check current limits at runtime:
echo ini_get('post_max_size'); // 8M
echo ini_get('upload_max_filesize'); // 2Mตัวแปรสากลพิเศษ $_REQUEST
$_REQUEST รวม $_GET, $_POST และ $_COOKIE เข้าด้วยกัน สะดวกแต่ทำให้แหล่งที่มาของข้อมูลไม่ชัดเจนเท่าไร:
<?php
// Works for both GET and POST but is ambiguous
$name = $_REQUEST['name'] ?? '';
// Better: be explicit about the expected method
$name = match($_SERVER['REQUEST_METHOD']) {
'GET' => $_GET['name'] ?? '',
'POST' => $_POST['name'] ?? '',
default => '',
};การตรวจสอบเมธอดของคำขอ
ตรวจสอบเมธอดของคำขอก่อนประมวลผลข้อมูลแบบฟอร์มเสมอ:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = trim($_POST['name'] ?? '');
if (!empty($name)) {
echo 'Hello, ' . htmlspecialchars($name);
}
} else {
// Show empty form
}HTTPS และความปลอดภัยของข้อมูล
แม้ใช้ POST ข้อมูลก็ยังมองเห็นเป็นข้อความธรรมดาได้ หากไม่ได้ใช้ HTTPS กฎความปลอดภัยสำคัญมีดังนี้:
- ใช้ HTTPS ในสภาพแวดล้อมจริงเสมอ
- อย่าส่งรหัสผ่านผ่าน GET
- POST ผ่าน HTTP ก็ยังไม่ปลอดภัย — HTTPS จะเข้ารหัสเนื้อหาคำขอด้วย
การเปลี่ยนเส้นทางหลัง POST (รูปแบบ PRG)
หลังจาก POST สำเร็จ ให้เปลี่ยนเส้นทางไปยังคำขอ GET เพื่อป้องกันการส่งข้อมูลซ้ำเมื่อรีเฟรช:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Process the form...
$id = saveToDatabase($_POST);
// Post-Redirect-Get (PRG) pattern
header('Location: /success.php?id=' . $id);
exit;
}ฟอร์มแบบหลายส่วนสำหรับการอัปโหลดไฟล์
หากต้องการอัปโหลดไฟล์ แบบฟอร์มต้องใช้ enctype="multipart/form-data" ร่วมกับ POST:
<!-- Required for file uploads -->
<form method="POST" action="upload.php"
enctype="multipart/form-data">
<input type="file" name="avatar">
<button type="submit">Upload</button>
</form>
<?php
$file = $_FILES['avatar'];
echo $file['name']; // original filenameตรวจสอบอย่างรวดเร็ว
ควรใช้เมธอด HTTP ใดเมื่อส่งแบบฟอร์มเข้าสู่ระบบที่มีชื่อผู้ใช้และรหัสผ่าน
สรุปทบทวน: GET เทียบกับ POST
ความแตกต่างสำคัญ:
- GET — อยู่ใน URL บันทึกเป็นบุ๊กมาร์กได้ ไม่มีผลข้างเคียง และมีขนาดจำกัด
- POST — อยู่ในเนื้อหาคำขอ ใช้กับข้อมูลละเอียดอ่อน และไม่มีขีดจำกัดของ URL
- ใช้ HTTPS เสมอเพื่อปกป้องข้อมูลทั้ง GET และ POST
- ตรวจสอบ
$_SERVER['REQUEST_METHOD']ก่อนประมวลผล - ใช้รูปแบบ PRG เพื่อป้องกันการส่ง POST ซ้ำ
คำถามที่พบบ่อย
บทเรียน “GET กับ POST: ควรใช้แต่ละแบบเมื่อใด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “GET กับ POST: ควรใช้แต่ละแบบเมื่อใด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “GET กับ POST: ควรใช้แต่ละแบบเมื่อใด”
ทำความเข้าใจความแตกต่างระหว่าง HTTP GET และ POST ใน PHP คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “GET กับ POST: ควรใช้แต่ละแบบเมื่อใด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- GET กับ POST: ควรใช้แต่ละแบบเมื่อใด
- การอ่านข้อมูลแบบฟอร์มด้วย Superglobals
- เทคนิคการตรวจสอบข้อมูลนำเข้า
- การทำความสะอาดข้อมูลนำเข้าจากผู้ใช้