ตอนที่ 5: การแก้ไขข้อมูล (Update Data) และการส่งค่า ID ผ่าน URL
สวัสดีครับนักเรียน ถ้าเปรียบฐานข้อมูลเป็นสมุดบันทึก ตอนที่ 3 เรา “เขียนข้อมูลลงสมุด” ตอนที่ 4 เรา “เปิดอ่านข้อมูล” มาถึงตอนนี้เราจะทำสิ่งที่ยากขึ้นอีกขั้น คือ “แก้ข้อความที่เคยเขียนไปแล้ว”
หัวใจสำคัญคือคำถามว่า / เราจะรู้ได้อย่างไรว่า “ต้องแก้แถวไหน?” คำตอบคือการส่งค่า ID ติดไปกับลิงก์นั่นเองครับ
วัตถุประสงค์ของบทนี้
- เข้าใจการส่งค่าผ่าน URL (Query String)
- ใช้
$_GETรับค่า ID - เรียนรู้คำสั่ง SQL
UPDATE - สร้างฟอร์มที่ดึงข้อมูลเดิมมาแสดง
- รู้จักจุดเสี่ยงด้านความปลอดภัย
1. เพิ่มปุ่ม “แก้ไข” ในตาราง
จากไฟล์ display_users.php เราต้องสร้างลิงก์ที่พก ID ไปด้วย
// ภายใน while loop
echo "<td>
<a href='edit_user.php?id=".$row['id']."'>
แก้ไข</a>
</td>";
ผลลัพธ์จะได้ URL ประมาณนี้
edit_user.php?id=5
> นี่แหละครับที่เรียกว่า Query String PHP จะรับค่าผ่าน $_GET['id']
2. สร้างหน้าแก้ไข (edit_user.php)
หน้านี้ทำ 2 หน้าที่ในไฟล์เดียว
- เปิดมาครั้งแรก → ดึงข้อมูลเดิมมาโชว์
- กดบันทึก → อัปเดตข้อมูล
<?php
require_once 'db_config.php';
// --- ส่วนที่ 1 รับค่า ID ---
$id = $_GET['id'];
// --- ส่วนที่ 2 ดึงข้อมูลเดิม ---
$sql = "SELECT * FROM users WHERE id = $id";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($result);
// --- ส่วนที่ 3 เมื่อกดบันทึก ---
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$new_user = mysqli_real_escape_string($conn, $_POST['username']);
$new_email = mysqli_real_escape_string($conn, $_POST['email']);
$sql_update =
"UPDATE users
SET username='$new_user',
email='$new_email'
WHERE id=$id";
if (mysqli_query($conn, $sql_update)) {
echo "<script>
alert('แก้ไขข้อมูลเรียบร้อย!');
window.location='display_users.php';
</script>";
}
}
?>
<form method="POST">
ชื่อผู้ใช้:
<input type="text" name="username"
value="<?php echo $row['username']; ?>">
อีเมล:
<input type="email" name="email"
value="<?php echo $row['email']; ?>">
<button type="submit">ยืนยันการแก้ไข</button>
</form>
3. ทำความเข้าใจ UPDATE
รูปแบบมาตรฐานคือ
UPDATE ตาราง
SET คอลัมน์ = ค่าใหม่
WHERE เงื่อนไข
คำเตือนที่ครูย้ำทุกเทอม
ลืม WHERE = หายนะ! ข้อมูลทั้งตารางจะถูกเปลี่ยนเหมือนกันหมดทันที
จุดที่เด็กพลาดบ่อย
- ลืมส่ง id ไปกับลิงก์
- พิมพ์ $_GET ผิดเป็น $_POST
- ไม่มี WHERE ใน UPDATE
- เปิดหน้า edit โดยไม่มี id
ครูเห็นนักเรียนมาเยอะเพราะ 4 ข้อนี้
แบบฝึกหัด
- ความปลอดภัย
ใช้is_numeric($id)
ถ้าไม่ใช่ตัวเลข → ให้เด้งกลับ - เพิ่มปุ่มยกเลิก
กดแล้วกลับ display_users.php - ปรับความปลอดภัยให้ทราบการแก้ไขข้อมูล
เพิ่มฟิลด์updated_at
บันทึกเวลาที่แก้ไขล่าสุด
สรุปจากครูท้ายคาบ
ตอนนี้ระบบของเราเกือบครบแล้ว
- เพิ่มข้อมูลได้ ✔
- แสดงข้อมูลได้ ✔
- แก้ไขข้อมูลได้ ✔
เหลือด่านสุดท้ายของ CRUD คือ การลบข้อมูล (DELETE)
ตอนที่ 6: การลบข้อมูล (Delete) และการยืนยันก่อนลบด้วย JavaScript
- ลบอย่างปลอดภัย - ยืนยันก่อนลบ - ป้องกันการกดผิด
ใครมาถึงตรงนี้ได้ ครูขอชมเลยว่า “เก่งมาก” อีกก้าวเดียวก็พร้อมทำโปรเจกต์จบแล้วครับ!
