การสร้างเว็บไซต์ (SUMMER)

การพัฒนาเว็บไซต์แนะนำผลิตภัณฑ์ “ของดีเมืองศรีสะเกษ”

  • ฐานข้อมูล MySQL ใน XAMPP
  • เทคโนโลยีที่ใช้
  • XAMPP (Apache + MySQL)
  • PHP
  • MySQL Database
  • HTML / CSS

🎯 จุดประสงค์การเรียนรู้

ผู้เรียนสามารถ

  1. สร้างฐานข้อมูล MySQL ได้
  2. พัฒนาเว็บไซต์ด้วย PHP ได้
  3. เชื่อมต่อฐานข้อมูลกับเว็บไซต์ได้
  4. สร้างระบบ เพิ่ม แก้ไข ลบ ดูข้อมูล (CRUD)
  5. สร้างระบบ Login Admin
  6. ออกแบบหน้าเว็บไซต์ให้ใช้งานได้จริง

โครงสร้างระบบเว็บไซต์ (Website Structure)

XAMPP
└── htdocs
└── sisaket

├── index.php
├── products.php
├── product_detail.php

├── login.php
├── check_login.php
├── logout.php

├── save_product.php
├── edit_product.php
├── update_product.php
├── delete_product.php

├── report.php
├── config.php

├── assets
│ └── style.css

└── images
├── hero-image.png
├── product1.jpg
└── product2.jpg

หน้าที่ของแต่ละไฟล์ในระบบเว็บไซต์หน้าที่ของแต่ละไฟล์ในระบบเว็บไซต์

1️⃣ config.php
หน้าที่ ใช้สำหรับ เชื่อมต่อฐานข้อมูล MySQL การทำงาน เว็บไซต์ → config.php → ฐานข้อมูล MySQL
ไฟล์อื่น ๆ จะใช้คำสั่ง include(“config.php”);
เพื่อเรียกใช้การเชื่อมต่อฐานข้อมูล

🏠 หน้าแสดงผลเว็บไซต์

2️⃣ index.php

หน้าที่เป็น หน้าแรกของเว็บไซต์ การทำงาน แสดงหัวเว็บไซต์ แสดงสินค้าแนะนำ เชื่อมกับฐานข้อมูล แสดงเมนูเว็บไซต์

3️⃣ products.php

หน้าที่ ใช้แสดง รายการสินค้าทั้งหมด ลักษณะการแสดงผล รูปสินค้า ชื่อสินค้า ราคา ปุ่มรายละเอียด สำหรับ Admin จะมีปุ่ม เพิ่มสินค้า แก้ไข ลบ

4️⃣ product_detail.php

หน้าที่แสดง รายละเอียดสินค้า ตัวอย่าง URL product_detail.php?id=4
คำสั่ง SQL

SELECT * FROM products WHERE id='4'
ข้อมูลที่แสดง ประกอบด้วย รูปสินค้า ชื่อสินค้า รายละเอียดสินค้า ราคา

🔐 ระบบ Login

5️⃣ login.php

หน้าที่ เป็น หน้าเข้าสู่ระบบ Admin มีช่องกรอกข้อมูล Username Password

6️⃣ check_login.php

หน้าที่ ใช้ตรวจสอบข้อมูล Login จากฐานข้อมูล
คำสั่ง
SELECT * FROM users
WHERE username=’$user’
AND password=’$pass’
ถ้าข้อมูลถูกต้อง สร้าง SESSION เข้าสู่ระบบ Admin

7️⃣ logout.php

หน้าที่ ใช้สำหรับ ออกจากระบบ
คำสั่งที่ใช้ session_destroy(); หลังจากนั้น กลับไปหน้าแรก

🛍 ระบบจัดการสินค้า (CRUD)

CRUD คือ Create Read Update Delete

8️⃣ save_product.php

หน้าที่ ใช้ บันทึกข้อมูลสินค้าใหม่ คำสั่ง SQL
INSERT INTO products
ข้อมูลที่บันทึก ได้แก่ ชื่อสินค้า รายละเอียด ราคา รูปภาพ


9️⃣ edit_product.php

หน้าที่ ใช้ แสดงข้อมูลสินค้าเดิมเพื่อแก้ไข
ขั้นตอน
เลือกสินค้า
โหลดข้อมูลเดิม
แสดงใน Form


🔟 update_product.php

หน้าที่
ใช้ บันทึกข้อมูลหลังจากแก้ไขสินค้า
คำสั่ง SQL
UPDATE products
SET product_name=”
WHERE id=”


1️⃣1️⃣ delete_product.php

หน้าที่ใช้ ลบข้อมูลสินค้า
คำสั่ง SQL
DELETE FROM products
WHERE id=”
บางระบบจะลบ รูปภาพสินค้าด้วย


📊 report.php

หน้าที่ใช้แสดง รายงานข้อมูลสินค้า ตัวอย่างรายงาน จำนวนสินค้า ราคาสินค้า สินค้าแนะนำ สามารถนำไปทำ Dashboard กราฟ ได้


🎨 assets/style.css

หน้าที่ ใช้สำหรับ ออกแบบเว็บไซต์ เช่น สีเว็บไซต์ รูปแบบสินค้า การจัด Layout Animation ตัวอย่าง
.product-grid
.card
.header
.hero


🖼 โฟลเดอร์ images

หน้าที่เก็บรูปสินค้า ภาพหัวเว็บไซต์ รูป OTOP ตัวอย่าง durian.jpg silk.jpg rice.jpg


🔁 การทำงานของระบบทั้งหมด

ผู้ใช้


หน้าแรก (index.php)


รายการสินค้า (products.php)


รายละเอียดสินค้า (product_detail.php)

สำหรับ Admin

Login


Dashboard

├── เพิ่มสินค้า
├── แก้ไขสินค้า
├── ลบสินค้า


แสดงสินค้าในเว็บไซต์
ขั้นตอนการสอน: การสร้างฐานข้อมูลและตารางสินค้า
1️⃣ เปิดโปรแกรม XAMPP
ให้นักศึกษาทำตามขั้นตอน เปิดโปรแกรม XAMPP Control Panel
กด Start
Apache
MySQL
เมื่อทำงานแล้วจะเป็นสีเขียว

2️⃣ เข้า phpMyAdmin

เปิด Browser แล้วพิมพ์ http://localhost/phpmyadmin จะเข้าสู่หน้าจัดการฐานข้อมูล


3️⃣ สร้างฐานข้อมูล (Database)

ให้นักศึกษาคลิก New ตั้งชื่อฐานข้อมูล sisaket_products เลือก utf8mb4_general_ci แล้วกด Create

การสร้างโครงสร้างฐานข้อมูลระบบเว็บไซต์สินค้า OTOP ศรีสะเกษ

ระบบเว็บไซต์จะประกอบด้วย 5 ตารางหลัก

1 categories
2 products
3 product_views
4 reviews
5 users

โครงสร้างฐานข้อมูลจะเป็นแบบ

categories


products

├── reviews
└── product_views
users
1️⃣ ตาราง categories (หมวดหมู่สินค้า)
ใช้เก็บข้อมูล ประเภทสินค้า
ตัวอย่าง
อาหาร ผ้าไหม ผลไม้ ของฝาก
โครงสร้างตาราง
Field Type Length Key Extra
id INT 11 PK AUTO_INCREMENT
category_name VARCHAR 200
SQL สร้างตาราง
CREATE TABLE categories (id INT(11) AUTO_INCREMENT PRIMARY KEY,
category_name VARCHAR(200) NOT NULL );
2️⃣ ตาราง products (สินค้า)
ใช้เก็บข้อมูลสินค้า OTOP
ตัวอย่าง
ทุเรียนภูเขาไฟ ผ้าไหมกันทรารมย์ ข้าวหอมมะลิศรีสะเกษ โครงสร้างตาราง
Field Type Length Key Extra
id INT 11 PK AUTO_INCREMENT
category_id INT 11 FK
product_name VARCHAR 200
description TEXT
price INT 11
image VARCHAR 255
created_at DATETIME
SQL สร้างตาราง
CREATE TABLE products (id INT(11) AUTO_INCREMENT PRIMARY KEY,
category_id INT(11),
product_name VARCHAR(200),
description TEXT,
price INT(11),
image VARCHAR(255),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP );
3️⃣ ตาราง product_views (เก็บจำนวนการเข้าชมสินค้า)
ใช้เก็บข้อมูลว่า สินค้าถูกเปิดดูจำนวนเท่าไร
โครงสร้างตาราง
Field Type Length Key Extra
id INT 11 PK AUTO_INCREMENT
product_id INT 11 FK
view_date DATETIME
SQL สร้างตาราง
CREATE TABLE product_views (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
product_id INT(11),
view_date DATETIME DEFAULT CURRENT_TIMESTAMP);
4️⃣ ตาราง reviews (รีวิวสินค้า)
ใช้เก็บ ความคิดเห็นของผู้ใช้
ตัวอย่าง
สินค้าดีมาก รสชาติอร่อย คุณภาพดี
โครงสร้างตาราง
Field Type Length Key Extra
id INT 11 PK AUTO_INCREMENT
product_id INT 11 FK
name VARCHAR 200
comment TEXT
rating INT 1
created_at DATETIME
SQL สร้างตาราง
CREATE TABLE reviews ( id INT(11) AUTO_INCREMENT PRIMARY KEY,
product_id INT(11),
name VARCHAR(200),
comment TEXT,
rating INT(1),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
5️⃣ ตาราง users (ผู้ดูแลระบบ)
ใช้เก็บข้อมูล Admin
โครงสร้างตาราง
Field Type Length Key Extra
id INT 11 PK AUTO_INCREMENT
username VARCHAR 100
password VARCHAR 255
role VARCHAR 50
SQL สร้างตาราง
CREATE TABLE users
(id INT(11) AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100),
password VARCHAR(255),
role VARCHAR(50));
เพิ่ม Admin สำหรับ Login
INSERT INTO users (username,password,role)
VALUES ('admin','1234','admin');
ภาพรวมโครงสร้างฐานข้อมูล
categories


products

├── product_views
└── reviews
users
สิ่งที่นักศึกษาเรียนรู้จากบทนี้
นักศึกษาจะเข้าใจ
Database
Table
Primary Key
Foreign Key
SQL
Data Relationship
ซึ่งเป็นพื้นฐานของ Web Application Development

ลำดับการสอนหลังจากเรียนเรื่องฐานข้อมูล

1. การเชื่อมต่อฐานข้อมูลกับเว็บไซต์ (Database Connection)

วัตถุประสงค์

ให้นักศึกษาสามารถเชื่อมต่อเว็บไซต์กับฐานข้อมูล MySQL ได้

เนื้อหาที่สอน

  • การใช้ PHP เชื่อมต่อ MySQL
  • ไฟล์ config.php

ตัวอย่างโค้ด

<?php
$host="localhost";
$user="root";
$pass="";
$db="sisaket_products";
$conn=mysqli_connect($host,$user,$pass,$db);
if(!$conn){
die("Database error");
}
?>

ผลลัพธ์ที่นักศึกษาต้องได้

สามารถเชื่อมต่อฐานข้อมูลจากเว็บไซต์ได้สำเร็จ

ลำดับการสอน CSS + ระบบ Admin + ดึงสินค้า

ขั้นที่ 1 สร้างโครงสร้างหน้าเว็บไซต์ (HTML Layout)

ให้นักศึกษาสร้างไฟล์

ไฟล์ index.php
โฟล์เดอร์ assetsซึ่งมีไฟล์ชื่อ style.css
โฟล์เดอร์ images/
ขั้นที่ 1 แนะนำโครงสร้างไฟล์ CSS

ให้นักศึกษาสร้างโฟลเดอร์

assets/
style.css

สร้างไฟล์ Style.CSS โดยพิมพ์ดังนี้
body{
margin:0;
font-family:Tahoma;
background:#f4f6f9;
}

/* HEADER */

.header{
background:#ff7a00;
color:white;
padding:15px 40px;
display:flex;
justify-content:space-between;
}

/* HERO IMAGE */

.hero{
height:300px;
background:url('../images/banner.jpg');
background-size:cover;
background-position:center;
display:flex;
align-items:center;
justify-content:center;
text-align:center;
color:white;
}

/* กล่องข้อความ */

.hero-content{
background:rgba(0,0,0,0.45);
padding:40px;
border-radius:10px;
}

.hero h1{
font-size:40px;
margin-bottom:10px;
}

.hero p{
font-size:20px;
margin-bottom:20px;
}

.btn{
background:#28a745;
padding:12px 20px;
color:white;
text-decoration:none;
border-radius:6px;
font-size:18px;
}

/* PRODUCT GRID */

.products{
padding:40px;
}

.product-grid{
display:grid;
grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
gap:20px;
}

.card{
background:white;
padding:15px;
border-radius:10px;
box-shadow:0 3px 10px rgba(0,0,0,0.2);
text-align:center;
}

.card img{
width:100%;
height:160px;
object-fit:cover;
border-radius:6px;
}
/* PRODUCT CARD */

.card{
background:white;
padding:15px;
border-radius:10px;
box-shadow:0 3px 10px rgba(0,0,0,0.2);
text-align:center;
transition:0.3s;
}

/* เมื่อเอาเมาส์วาง */

.card:hover{
transform:translateY(-5px);
box-shadow:0 10px 20px rgba(0,0,0,0.3);
}

/* รูปสินค้า */

.card img{
width:100%;
height:160px;
object-fit:cover;
border-radius:6px;
transition:0.4s;
}

/* เอฟเฟกต์ Zoom */

.card:hover img{
transform:scale(1.08);
}
.review-box{

border:1px solid #ddd;
padding:15px;
margin-bottom:10px;
border-radius:8px;
background:#fafafa;

}
สร้างหน้า index.php
<?php
session_start();
include("config.php");

$sql="SELECT * FROM products LIMIT 6";
$result=mysqli_query($conn,$sql);
?>

<!DOCTYPE html>
<html>

<head>

<meta charset="UTF-8">
<title>ของดีเมืองศรีสะเกษ</title>

<link rel="stylesheet" href="assets/style.css">

</head>


<body>

<header class="header">

<div class="logo">
ของดีเมืองศรีสะเกษ
</div>

<nav>

<a href="index.php">หน้าแรก</a>
<a href="products.php">สินค้า</a>

<?php
// ถ้า Login แล้ว
if(isset($_SESSION['admin'])){
?>

<a href="dashboard.php">Dashboard</a>
<a href="logout.php">Logout</a>

<?php
}else{
?>

<a href="login.php">Login</a>

<?php
}
?>

</nav>

</header>


<section class="hero">

<div class="hero-content">

<h1>แนะนำผลิตภัณฑ์ ของดีเมืองศรีสะเกษ</h1>

<p>รวมสินค้า OTOP และผลิตภัณฑ์ท้องถิ่นคุณภาพ</p>

<a href="products.php" class="btn">
ดูสินค้าทั้งหมด
</a>

</div>

</section>


<section class="products">

<h2>สินค้าแนะนำ</h2>

<div class="product-grid">

<?php
while($row=mysqli_fetch_assoc($result)){
?>

<div class="card">

<img src="images/<?php echo $row['image']; ?>">

<h3><?php echo $row['product_name']; ?></h3>

<p><?php echo $row['price']; ?> บาท</p>

<a href="product_detail.php?id=<?php echo $row['id']; ?>">
รายละเอียด
</a>

</div>

<?php } ?>

</div>

</section>

</body>
</html>

🎓 สิ่งที่นักเรียนจะได้เรียนรู้

นักศึกษาจะได้ฝึก

การเขียน PHP
การใช้ MySQL
การเชื่อมฐานข้อมูล
การทำ CRUD
การสร้างระบบ Login
การออกแบบ UI เว็บไซต์

ซึ่งเป็น พื้นฐานสำคัญของการพัฒนา Web Application

ชุดคำสั่งของไฟล์แต่ละหน้ามีดังนี้

หน้า index.php

<?php
session_start();
include("config.php");
$sql="SELECT * FROM products LIMIT 6";
$result=mysqli_query($conn,$sql);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ของดีเมืองศรีสะเกษ</title>
<link rel="stylesheet" href="assets/style.css">
</head>
<body>
<header class="header">
<div class="logo">
ของดีเมืองศรีสะเกษ
</div>
<nav>
<a href="index.php">หน้าแรก</a>
<a href="products.php">สินค้า</a>
<?php
// ถ้า Login แล้ว
if(isset($_SESSION['admin'])){
?>
<span class="admin-name">
ยินดีต้อนรับ : <?php echo $_SESSION['admin']; ?>
</span>
<a href="logout.php">Logout</a>
<?php
}else{
?>
<a href="login.php">Login</a>
<?php
}
?>
</nav>
</header>
<section class="hero">
<div class="hero-content">
<h1>แนะนำผลิตภัณฑ์ ของดีเมืองศรีสะเกษ</h1>
<p>รวมสินค้า OTOP และผลิตภัณฑ์ท้องถิ่นคุณภาพ</p>
<a href="products.php" class="btn">
ดูสินค้าทั้งหมด
</a>
</div>
</section>
<section class="products">
<h2>สินค้าแนะนำ</h2>
<div class="product-grid">
<?php
while($row=mysqli_fetch_assoc($result)){
?>
<div class="card">
<img src="images/<?php echo $row['image']; ?>">
<h3><?php echo $row['product_name']; ?></h3>
<p><?php echo $row['price']; ?> บาท</p>
<a href="product_detail.php?id=<?php echo $row['id']; ?>">
รายละเอียด
</a>
</div>
<?php } ?>
</div>
</section>
</body>
</html>

ลำดับหน้าที่ควรสร้างต่อจาก index.php

1️⃣ หน้าแสดงสินค้าทั้งหมด

ไฟล์ products.php

หน้าที่ แสดงสินค้าทั้งหมดจากฐานข้อมูล
สิ่งที่สอนนักศึกษา
การใช้ SQL การใช้ while loop การแสดงข้อมูลจาก Database

ตัวอย่าง SQL
SELECT * FROM products

ตัวอย่างการใช้งาน
สินค้า สินค้า สินค้า สินค้า
ตัวอย่างเว็บไซต์

<?php
session_start();
include("config.php");
$sql = "SELECT * FROM products";
$result = mysqli_query($conn,$sql);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>รายการสินค้า ของดีเมืองศรีสะเกษ</title>
<style>
body{
margin:0;
font-family:Tahoma;
background:#f4f6f9;
}
/* HEADER */
.header{
background:#ff7a00;
color:white;
padding:15px 40px;
display:flex;
justify-content:space-between;
align-items:center;
}
.logo{
font-size:22px;
font-weight:bold;
}
.menu a{
color:white;
text-decoration:none;
margin-left:20px;
font-size:16px;
}
.menu a:hover{
text-decoration:underline;
}
/* CONTAINER */
.container{
width:90%;
margin:auto;
margin-top:30px;
}
/* TOP BUTTON */
.top-bar{
display:flex;
justify-content:space-between;
margin-bottom:20px;
}
/* BUTTON */
.btn{
padding:8px 14px;
text-decoration:none;
border-radius:5px;
color:white;
font-size:14px;
}
.add{
background:#28a745;
}
.home{
background:#007bff;
}
.edit{
background:#ffc107;
color:black;
}
.delete{
background:#dc3545;
}
.btn:hover{
opacity:0.8;
}
/* PRODUCT GRID */
.product-grid{
display:grid;
grid-template-columns:repeat(auto-fill,minmax(220px,1fr));
gap:20px;
}
/* CARD */
.card{
background:white;
border-radius:10px;
padding:15px;
box-shadow:0 3px 10px rgba(0,0,0,0.15);
text-align:center;
}
.card img{
width:100%;
height:160px;
object-fit:cover;
border-radius:6px;
}
.card h3{
margin:10px 0;
}
.price{
color:#e60000;
font-weight:bold;
}
.action{
margin-top:10px;
}
</style>
</head>
<body>
<!-- HEADER -->
<div class="header">
<div class="logo">
ของดีเมืองศรีสะเกษ
</div>
<div class="menu">
<a href="index.php">หน้าแรก</a>
<a href="products.php">สินค้า</a>
<?php
if(isset($_SESSION['admin'])){
?>
<a href="add_product.php">เพิ่มสินค้า</a>
<a href="logout.php">ออกจากระบบ</a>
<?php
}else{
?>
<a href="login.php">Login Admin</a>
<?php
}
?>

</div>

</div>

<div class="container">

<h2>รายการสินค้า OTOP ศรีสะเกษ</h2>

<div class="top-bar">

<a href="index.php" class="btn home">🏠 กลับหน้าหลัก</a>

<?php
if(isset($_SESSION['admin'])){
?>
<a href="add_product.php" class="btn add">➕ เพิ่มสินค้า</a>
<?php
}
?>

</div>

<div class="product-grid">

<?php

while($row=mysqli_fetch_assoc($result)){

?>

<div class="card">

<img src="images/<?php echo $row['image']; ?>">

<h3><?php echo $row['product_name']; ?></h3>

<p class="price"><?php echo $row['price']; ?> บาท</p>

<div class="action">

<a href="product_detail.php?id=<?php echo $row['id']; ?>" class="btn home">
รายละเอียด
</a>

<?php
if(isset($_SESSION['admin'])){
?>

<a href="edit_product.php?id=<?php echo $row['id']; ?>" class="btn edit">
แก้ไข
</a>

<a href="delete_product.php?id=<?php echo $row['id']; ?>"
class="btn delete"
onclick="return confirm('คุณต้องการลบสินค้า <?php echo $row['product_name']; ?> ใช่หรือไม่ ?')">
ลบ
</a>
<?php
}
?>
</div>
</div>
<?php
}
?>
</div>
</div>
</body>
</html>

หลังจากนักศึกษา สร้างหน้าแสดงสินค้า (products.php) เสร็จแล้ว ขั้นตอนถัดไปที่เหมาะมากคือ สอนระบบ Login สำหรับ Admin เพื่อให้เข้าใจแนวคิด Authentication และ Session และสามารถควบคุมสิทธิ์การจัดการสินค้าได้

1️⃣ สร้างหน้าฟอร์ม Login

สร้างไฟล์ login.php

ตัวอย่างโค้ด

<!DOCTYPE html>
<html>
<head>
<title>Admin Login</title>
<style>
body{
font-family:Tahoma;
background:#f4f6f9;
display:flex;
justify-content:center;
align-items:center;
height:100vh;
}
.login-box{
background:white;
padding:30px;
border-radius:10px;
box-shadow:0 5px 15px rgba(0,0,0,0.2);
width:300px;
}
input{
width:100%;
padding:10px;
margin-top:10px;
}
button{
width:100%;
padding:10px;
margin-top:15px;
background:#ff7a00;
color:white;
border:none;
}
</style>
</head>
<body>
<div class="login-box">
<h2>Admin Login</h2>
<form action="check_login.php" method="POST">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button>เข้าสู่ระบบ</button>
</form>
</div>
</body>
</html>

2️⃣ ตรวจสอบ Username และ Password

สร้างไฟล์ check_login.php

โค้ด

<?php
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
if($username == "admin" && $password == "1234"){
$_SESSION['admin'] = $username;
header("location:index.php");
}else{
echo "Username หรือ Password ไม่ถูกต้อง";
}
?>

อธิบาย

session_start()
คือการเริ่มใช้งาน Session
Flow การทำงานของระบบ
login.php
     │
     ▼
check_login.php
     │
สร้าง SESSION admin
     │
     ▼
index.php
     │
แสดงชื่อ Admin

3️⃣ สร้างระบบ Logout

ไฟล์

logout.php

โค้ด

<?php
session_start();
/* ลบข้อมูล session */
session_unset();
session_destroy();
/* กลับไปหน้าแรก */
header("location:index.php");
exit();
?>

5️⃣ ปรับเมนูหน้าเว็บไซต์

ใน index.php

เพิ่มเงื่อนไข

<?php
session_start();
?><nav><a href="index.php">หน้าแรก</a>
<a href="products.php">สินค้า</a><?php
if(isset($_SESSION['admin'])){
?><a href="dashboard.php">Dashboard</a>
<a href="logout.php">Logout</a><?php
}else{
?><a href="login.php">Login</a><?php
}
?></nav>

หน้า index และระบบ Login แล้ว ขั้นตอนถัดไปที่เหมาะมากคือ สอนหน้า Product Detail (รายละเอียดสินค้า) เพราะจะทำให้นักศึกษาเข้าใจ

  • การส่งค่า ID ผ่าน URL
  • การใช้ GET Method
  • การดึงข้อมูลจากฐานข้อมูลเฉพาะรายการ
  • การเชื่อมโยงหน้าระหว่าง products → product_detail

ผมจัด แนวการสอนในห้องเรียน + โค้ดตัวอย่าง ให้ดังนี้


1️⃣ อธิบายแนวคิดหน้า Product Detail

โครงสร้างการทำงาน

products.php

คลิกสินค้า


product_detail.php?id=1

ดึงข้อมูลสินค้า

แสดงรายละเอียด

ตัวอย่าง URL
product_detail.php?id=3
อธิบายให้นักศึกษาเข้าใจว่า

id = รหัสสินค้า

2️⃣ สร้างไฟล์ product_detail.php

<?php

include(“config.php”);
/* ตรวจสอบว่ามี id ส่งมาหรือไม่ */
if(isset($_GET[‘id’])){
$id = $_GET[‘id’];
/* ดึงข้อมูลสินค้า */
$sql = “SELECT * FROM products WHERE id=’$id'”;
$result = mysqli_query($conn,$sql);
/* ตรวจสอบว่ามีข้อมูลหรือไม่ */
$row = mysqli_fetch_assoc($result);
if(!$row){
echo “ไม่พบข้อมูลสินค้า”;
exit();
}
}else{
echo “ไม่พบสินค้า”;
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″>
<title>รายละเอียดสินค้า</title>
<style>
body{
font-family:Tahoma;
background:#f2f6fc;
margin:0;
padding:40px;
}
/* กล่องสินค้า */
.container{
max-width:900px;
margin:auto;
background:white;
padding:30px;
border-radius:12px;
box-shadow:0 6px 20px rgba(0,0,0,0.15);
}
/* Layout */
.product-box{
display:flex;
gap:30px;
align-items:flex-start;
}
/* รูปสินค้า */
.product-img img{
width:350px;
border-radius:10px;
transition:0.3s;
}
.product-img img:hover{
transform:scale(1.05);
}
/* รายละเอียดสินค้า */
.product-detail{
flex:1;
}
.product-detail h2{
margin-top:0;
color:#333;
}
.product-detail p{
line-height:1.6;
color:#555;
}
/* ราคา */
.price{
color:#e63946;
font-size:26px;
font-weight:bold;
margin-top:15px;
}
/* ปุ่ม */
.btn{
display:inline-block;
margin-top:15px;
padding:10px 18px;
background:#2c7be5;
color:white;
text-decoration:none;
border-radius:6px;
margin-right:10px;
transition:0.3s;
}
.btn:hover{
background:#1a5fd1;
}
/* ปุ่มรีวิว */
.btn-review{
background:#28a745;
}
.btn-review:hover{
background:#1e7e34;
}
</style>
</head>
<body>
<div class=”container”>
<div class=”product-box”>
<div class=”product-img”>
<img src=”images/<?php echo $row[‘image’]; ?>”>
</div>
<div class=”product-detail”>
<h2><?php echo $row[‘product_name’]; ?></h2>
<p><?php echo $row[‘description’]; ?></p>
<p class=”price”>
ราคา : <?php echo $row[‘price’]; ?> บาท
</p>
<a class=”btn” href=”products.php”>
← กลับหน้าสินค้า
</a>
<a class=”btn btn-review” href=”reviews.php?product_id=<?php echo $row[‘id’]; ?>”>
⭐ ดูรีวิวสินค้า
</a>
</div>
</div>
</div>
</body>
</html>

สิ่งที่นักศึกษาจะได้เรียนรู้จากบทนี้

1 การรับค่าจาก URL

$_GET['id']

2 การดึงข้อมูลเฉพาะรายการ

SELECT * FROM products WHERE id=1

3 การเชื่อมโยงหน้าระบบเว็บไซต์

products


product_detail

อธิบายหน้าเพิ่มสินค้า add_Product.php

ตัวอย่างชุดคำสั่ง

<?php
session_start();
/* ตรวจสอบสิทธิ์ Admin */
if(!isset($_SESSION[‘admin’])){
header(“location:index.php”);
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″>
<title>เพิ่มสินค้า</title>
<style>
body{
font-family:Tahoma, Arial;
background:#f4f6f9;
margin:0;
padding:0;
}
/* กล่องฟอร์ม */
.container{
width:500px;
margin:60px auto;
background:white;
padding:25px;
border-radius:10px;
box-shadow:0 4px 12px rgba(0,0,0,0.15);
}
h2{
text-align:center;
color:#333;
margin-bottom:20px;
}
/* label */
label{
font-weight:bold;
display:block;
margin-top:10px;
}
/* input */
input, textarea{
width:100%;
padding:10px;
margin-top:5px;
border:1px solid #ccc;
border-radius:5px;
box-sizing:border-box;
}
/* ปุ่ม */
button{
margin-top:20px;
width:100%;
padding:12px;
background:#28a745;
border:none;
color:white;
font-size:16px;
border-radius:6px;
cursor:pointer;
}
button:hover{
background:#218838;
}
/* ปุ่มกลับ */
.back{
display:block;
text-align:center;
margin-top:15px;
text-decoration:none;
color:#007bff;
}
</style>
</head>
<body>
<div class=”container”>
<h2>เพิ่มสินค้า</h2>
<form action=”save_product.php” method=”POST” enctype=”multipart/form-data”>
<label>ชื่อสินค้า</label>
<input type=”text” name=”product_name” required>
<label>รายละเอียดสินค้า</label>
<textarea name=”description” rows=”4″></textarea>
<label>ราคา</label>
<input type=”number” name=”price” required>
<label>ประเภทสินค้า</label>
<select name=”category” required>
<option value=””>– เลือกประเภทสินค้า –</option>
<option value=”อาหาร”>อาหาร</option>
<option value=”ผลไม้”>ผลไม้</option>
<option value=”ผ้า”>ผ้า</option>
<option value=”ของฝาก”>ของฝาก</option>
<option value=”สมุนไพร”>สมุนไพร</option>
</select>
<label>รูปภาพสินค้า</label>
<input type=”file” name=”image” accept=”image/*”>
<button type=”submit”>บันทึกสินค้า</button>
</form>
<a class=”back” href=”products.php”>← กลับหน้ารายการสินค้า</a>
</div>
</body>
</html>

อธิบายชุดคำสั่งที่สำคัญ

1 เริ่มต้น Session

session_start();
ใช้สำหรับ เก็บข้อมูลผู้ที่ Login

2 ตรวจสอบสิทธิ์ Admin

if(!isset($_SESSION['admin'])){
header("location:index.php");
exit();
}

ความหมาย

ถ้าไม่ได้ Login เป็น Admin
→ กลับไปหน้า index

ดังนั้นเฉพาะ Admin เท่านั้นที่เพิ่มสินค้าได้


3 ฟอร์มเพิ่มสินค้า

<form action="save_product.php" method="POST" enctype="multipart/form-data">

อธิบาย

คำสั่งความหมาย
POSTส่งข้อมูลไปบันทึก
save_product.phpหน้าเก็บข้อมูล
multipart/form-dataใช้สำหรับ Upload รูป

4️⃣ ช่องกรอกข้อมูลสินค้า

ชื่อสินค้า

<input type="text" name="product_name">

รายละเอียดสินค้า

<textarea name="description"></textarea>

ราคา

<input type="number" name="price">

รูปสินค้า

<input type="file" name="image">

ใช้สำหรับ

Upload รูปสินค้า

5️⃣ ปุ่มบันทึก

<button type="submit">บันทึกสินค้า</button>

เมื่อกดปุ่ม

ข้อมูลจะถูกส่งไป save_product.php

6️⃣ CSS ที่ใช้สอนนักศึกษา

กล่องฟอร์ม

container

ทำให้ฟอร์มอยู่ตรงกลาง


ปุ่ม

button:hover

ทำให้

เอาเมาส์ชี้แล้วเปลี่ยนสี

7️⃣ สิ่งที่นักศึกษาจะได้เรียนรู้

จากหน้านี้จะเข้าใจ

Session
การตรวจสอบสิทธิ์
Form HTML
POST Method
Upload รูปภาพ
CSS Layout

การบันทึกสินค้าที่เพิ่ม

หลังจากสร้าง add_product.php แล้ว ต้องสอนต่อทันทีคือ หน้า save_product.php

หน้านี้คือไฟล์ save_product.php ซึ่งเป็นหน้าที่ทำหน้าที่ รับข้อมูลจากฟอร์มเพิ่มสินค้า แล้วบันทึกลงฐานข้อมูล พร้อมอัปโหลดรูปภาพสินค้า ถือเป็นหน้าที่สำคัญมากของระบบ Admin เพราะเป็นส่วนที่ทำให้ สินค้าใหม่ถูกเพิ่มเข้าสู่เว็บไซต์

ซึ่งจะสอน

Upload รูปภาพ
move_uploaded_file
INSERT ข้อมูลลง database

ตัวอย่าง SQL

INSERT INTO products
(product_name,description,price,image)
VALUES(...)

ตัวอย่างหน้าจอ

ตัวอย่างชุดคำสั่ง หน้า Save_product.ph

<?php
session_start();
if(!isset($_SESSION[‘admin’])){
header(“location:index.php”);
exit();
}
?>
<?php
include(“config.php”);
/* ตรวจสอบว่ามาจากฟอร์มหรือไม่ */
if($_SERVER[“REQUEST_METHOD”] == “POST”){
$name = $_POST[‘product_name’];
$desc = $_POST[‘description’];
$price = $_POST[‘price’];
$category = $_POST[‘category’];
$image = $_FILES[‘image’][‘name’];
$tmp = $_FILES[‘image’][‘tmp_name’];
/* อัปโหลดรูป */
move_uploaded_file($tmp,”images/”.$image);
/* บันทึกข้อมูล */
$sql = “INSERT INTO products
(product_name,description,price,image)
VALUES
(‘$name’,’$desc’,’$price’,’$image’)”;
mysqli_query($conn,$sql);
echo “เพิ่มสินค้าสำเร็จ”;
}else{
echo “ไม่สามารถเข้าหน้านี้โดยตรงได้”;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset=”UTF-8″>
<title>บันทึกสินค้า</title>
<style>
body{
margin:0;
font-family:Tahoma;
background:#f4f6f9;
}
/* HEADER */
.header{
background:#ff7a00;
color:white;
padding:15px 40px;
display:flex;
justify-content:space-between;
align-items:center;
}
.logo{
font-size:22px;
font-weight:bold;
}
.menu a{
color:white;
text-decoration:none;
margin-left:20px;
font-size:16px;
}
/* CONTENT */
.container{
width:500px;
margin:80px auto;
background:white;
padding:30px;
border-radius:10px;
box-shadow:0 3px 10px rgba(0,0,0,0.2);
text-align:center;
}
.success{
color:green;
font-size:20px;
margin-bottom:20px;
}
/* BUTTON */
.btn{
display:inline-block;
padding:10px 16px;
border-radius:6px;
text-decoration:none;
color:white;
margin:5px;
}
.home{
background:#007bff;
}
.product{
background:#28a745;
}
.btn:hover{
opacity:0.8;
}
</style>
</head>
<body>
<!– HEADER –>
<div class=”header”>
<div class=”logo”>
เว็บไซต์แนะนำผลิตภัณฑ์ ของดีเมืองศรีสะเกษ
</div>
<div class=”menu”>
<a href=”index.php”>หน้าแรก</a>
<a href=”products.php”>สินค้า</a>
<a href=”add_product.php”>เพิ่มสินค้า</a>
</div>
</div>
<!– CONTENT –>
<div class=”container”>
<div class=”success”>
✅ เพิ่มสินค้าสำเร็จ
</div>
<a href=”index.php” class=”btn home”>
🏠 กลับหน้าหลัก
</a>
<a href=”products.php” class=”btn product”>
📦 ดูรายการสินค้า
</a>
</div>
</body>
</html>

จุดสำคัญของโค้ดหน้านี้

1️⃣ การเริ่มต้น Session และตรวจสอบสิทธิ์ Admin

session_start();if(!isset($_SESSION['admin'])){
header("location:index.php");
exit();
}

ความหมาย

  • session_start()
    ใช้สำหรับ เปิดระบบ Session
  • $_SESSION['admin']
    เก็บข้อมูลผู้ที่ Login เป็น Admin

การทำงาน

ถ้าไม่ได้ Login เป็น Admin
→ กลับไปหน้า index

ดังนั้น

เฉพาะ Admin เท่านั้นที่เพิ่มสินค้าได้

นี่คือแนวคิด Security ของระบบ


2️⃣ เชื่อมต่อฐานข้อมูล

include("config.php");
ไฟล์ config.php จะมีคำสั่ง
$conn = mysqli_connect("localhost","root","","sisaket");

หน้าที่คือ เชื่อมต่อเว็บไซต์กับฐานข้อมูล


3️⃣ ตรวจสอบว่าข้อมูลมาจากฟอร์มหรือไม่

if($_SERVER["REQUEST_METHOD"] == "POST")

ความหมาย

ตรวจสอบว่าหน้านี้ถูกเรียกจาก Form เพราะฟอร์มใช้ method="POST" ถ้าไม่มีการส่งฟอร์มมา จะขึ้นข้อความไม่สามารถเข้าหน้านี้โดยตรงได้

4️⃣ รับค่าจากฟอร์ม

$name = $_POST['product_name'];
$desc = $_POST['description'];
$price = $_POST['price'];

ข้อมูลที่รับมา

ตัวแปรมาจากฟอร์ม
$nameชื่อสินค้า
$descรายละเอียดสินค้า
$priceราคา

ตัวอย่างค่าที่รับมา

$name = "ทุเรียนภูเขาไฟ"
$price = 1200

5️⃣ รับไฟล์รูปภาพ

$image = $_FILES['image']['name'];
$tmp = $_FILES['image']['tmp_name'];

อธิบาย

เมื่อผู้ใช้เลือกไฟล์ <input type=”file” name=”image”> ระบบจะเก็บข้อมูลใน $_FILES

ตัวแปรความหมาย
nameชื่อไฟล์
tmp_nameที่เก็บไฟล์ชั่วคราว

6️⃣ อัปโหลดรูปภาพ

move_uploaded_file($tmp,"images/".$image);

ความหมาย

ย้ายไฟล์จาก Temporary Folder ไปยัง images/
ตัวอย่าง
temp/image123.jpg
→ images/image123.jpg


7️⃣ คำสั่งบันทึกข้อมูลลงฐานข้อมูล

$sql = "INSERT INTO products
(product_name,description,price,image)
VALUES
('$name','$desc','$price','$image')";

ความหมาย

เพิ่มข้อมูลสินค้าใหม่

ตัวอย่างข้อมูล

product_namedescriptionpriceimage
ทุเรียนภูเขาไฟทุเรียน GI ศรีสะเกษ1200durian.jpg

คำสั่ง SQL

INSERT INTO products

หมายถึง เพิ่มข้อมูลใหม่ในตาราง


8️⃣ สั่งให้ฐานข้อมูลทำงาน

mysqli_query($conn,$sql);

ความหมาย ส่งคำสั่ง SQL ไปยังฐานข้อมูล


9️⃣ แสดงผลลัพธ์เมื่อเพิ่มสินค้าสำเร็จ

หน้า HTML ด้านล่างจะแสดงข้อความ

เพิ่มสินค้าสำเร็จ พร้อมปุ่ม กลับหน้าหลัก ดูรายการสินค้า
โค้ดส่วนนี้คือ
<div class="success">
✅ เพิ่มสินค้าสำเร็จ
</div>

🔟 โครงสร้างการทำงานของระบบเพิ่มสินค้า

Admin Login


add_product.php

กรอกข้อมูลสินค้า


save_product.php

Upload รูป

Insert Database

แสดงข้อความสำเร็จ

สิ่งสำคัญที่นักศึกษาจะได้เรียนรู้จากหน้านี้

นักศึกษาจะเข้าใจเรื่อง

Session
Security Admin
POST Method
Upload File
PHP + MySQL
INSERT Database

ซึ่งเป็นพื้นฐานของ Web Application Development

หน้านี้คือไฟล์ edit_product.php (หน้าแก้ไขสินค้า)
มีหน้าที่ แสดงข้อมูลสินค้าเดิมจากฐานข้อมูล แล้วให้ Admin แก้ไขข้อมูล ก่อนส่งไปอัปเดตในฐาน

ตัวอย่างหน้าจอการแก้ไข

<?php
session_start();

if(!isset($_SESSION['admin'])){
header("location:index.php");
exit();
}
?>
<?php
include("config.php");

/* ตรวจสอบว่ามี id หรือไม่ */
if(isset($_GET['id'])){

$id = $_GET['id'];

$sql = "SELECT * FROM products WHERE id='$id'";
$result = mysqli_query($conn,$sql);

$row = mysqli_fetch_assoc($result);

if(!$row){
echo "ไม่พบข้อมูลสินค้า";
exit();
}

}else{
echo "ไม่พบรหัสสินค้า";
exit();
}
?>

<!DOCTYPE html>
<html>
<head>

<title>แก้ไขสินค้า</title>

<style>

body{
font-family:Tahoma;
background:#f5f5f5;
padding:30px;
}

.container{
width:500px;
margin:auto;
background:white;
padding:20px;
box-shadow:0 2px 10px rgba(0,0,0,0.2);
border-radius:10px;
}

input, textarea, select{
width:100%;
padding:8px;
margin-top:5px;
margin-bottom:15px;
}

button{
background:#28a745;
color:white;
border:none;
padding:10px 15px;
border-radius:5px;
cursor:pointer;
}

button:hover{
background:#218838;
}

</style>

</head>

<body>

<div class="container">

<h2>แก้ไขข้อมูลสินค้า</h2>

<form action="update_product.php" method="POST">

<input type="hidden" name="id" value="<?php echo $row['id']; ?>">

<label>ชื่อสินค้า</label>
<input type="text" name="product_name"
value="<?php echo $row['product_name']; ?>">

<label>รายละเอียดสินค้า</label>
<textarea name="description"><?php echo $row['description']; ?></textarea>

<label>ราคา</label>
<input type="number" name="price"
value="<?php echo $row['price']; ?>">
<label>ประเภทสินค้า</label>
<select name="category">
<option value="อาหาร" <?php if($row['category']=="อาหาร") echo "selected"; ?>>อาหาร</option>
<option value="ผลไม้" <?php if($row['category']=="ผลไม้") echo "selected"; ?>>ผลไม้</option>
<option value="ผ้า" <?php if($row['category']=="ผ้า") echo "selected"; ?>>ผ้า</option>
<option value="ของฝาก" <?php if($row['category']=="ของฝาก") echo "selected"; ?>>ของฝาก</option>
<option value="สมุนไพร" <?php if($row['category']=="สมุนไพร") echo "selected"; ?>>สมุนไพร</option>
</select>
<br><br>
<label>รูปภาพปัจจุบัน</label><br>
<img src="images/<?php echo $row['image']; ?>" width="150">
<br>
<button type="submit">บันทึกการแก้ไข</button>

</form>

</div>

</body>
</html>

1️⃣ หน้าที่ของหน้าแก้ไขสินค้า

หน้าที่หลักคือดึงข้อ มูลสินค้าเดิมจากฐานข้อมูล → แสดงในฟอร์ม → ให้ Admin แก้ไข → ส่งข้อมูลไป update_product.php

โครงสร้างการทำงาน
products.php

คลิกปุ่ม “แก้ไข”


edit_product.php?id=5

ดึงข้อมูลสินค้า

แสดงในฟอร์ม


update_product.php

UPDATE Database


2️⃣ สิ่งสำคัญส่วนที่ 1 : ตรวจสอบสิทธิ์ Admin

session_start();if(!isset($_SESSION['admin'])){
header("location:index.php");
exit();
}
ความหมาย ถ้าไม่ได้ Login เป็น Admin→ ห้ามเข้าแก้ไขสินค้า เหตุผลเพื่อความปลอดภัยของระบบ

3️⃣ สิ่งสำคัญส่วนที่ 2 : รับค่า id จาก URL

$id = $_GET['id'];
ตัวอย่าง URL 
edit_product.php?id=3
ความหมาย id = รหัสสินค้า ใช้สำหรับ ดึงข้อมูลสินค้าเฉพาะรายการ

4️⃣ สิ่งสำคัญส่วนที่ 3 : ดึงข้อมูลจากฐานข้อมูล

$sql = "SELECT * FROM products WHERE id='$id'";
$result = mysqli_query($conn,$sql);$row = mysqli_fetch_assoc($result);
คำสั่ง SQL
SELECT * FROM products
ความหมาย ดึงข้อมูลสินค้าจากตาราง products
ตัวอย่างข้อมูลที่ได้
idproduct_nameprice
3ทุเรียนภูเขาไฟ1200

5️⃣ ตรวจสอบว่ามีข้อมูลหรือไม่

if(!$row){
echo "ไม่พบข้อมูลสินค้า";
exit();
}
ความหมาย ถ้าไม่มีสินค้า id นี้ในฐานข้อมูล → แจ้งเตือนผู้ใช้

6️⃣ สิ่งสำคัญส่วนที่ 4 : ฟอร์มแก้ไขสินค้า

<form action="update_product.php" method="POST">
ความหมาย
ส่งข้อมูลที่แก้ไข ไปยังหน้า update_product.php
ใช้ method
POST

7️⃣ ส่ง id แบบ Hidden

<input type="hidden" name="id" value="<?php echo $row['id']; ?>">
ความหมาย ส่งรหัสสินค้าไปด้วย เพื่อให้ระบบรู้ว่าจะแก้ไขสินค้าใด ตัวอย่างค่าที่ส่ง  id = 3

8️⃣ แสดงข้อมูลเดิมในช่องกรอก

ชื่อสินค้า

<input type="text" name="product_name"
value="<?php echo $row['product_name']; ?>">
ตัวอย่างที่แสดง
ทุเรียนภูเขาไฟ

รายละเอียดสินค้า

<textarea name="description">
<?php echo $row['description']; ?>
</textarea>

ราคา

<input type="number" name="price"
value="<?php echo $row['price']; ?>">

9️⃣ แสดงรูปภาพสินค้าเดิม

<img src="images/<?php echo $row['image']; ?>" width="150">

ความหมาย

แสดงรูปสินค้าเดิม
เพื่อให้ Admin เห็นก่อนแก้ไข

ตัวอย่าง

images/durian.jpg

🔟 ปุ่มบันทึกการแก้ไข

<button type="submit">บันทึกการแก้ไข</button>

เมื่อกดปุ่ม ข้อมูลจะถูกส่งไป update_product.php เพื่อทำ UPDATE Database


1️⃣1️⃣ CSS ที่ใช้ในหน้านี้

กล่องฟอร์ม

.container ทำให้ฟอร์ม อยู่ตรงกลางหน้าจอ

ปุ่ม

button:hover ทำให้ เอาเมาส์วางแล้วสีเปลี่ยน

1️⃣2️⃣ สิ่งที่นักศึกษาจะได้เรียนรู้

จากหน้านี้นักศึกษาจะเข้าใจ

Session
Security
GET Method
SELECT Database
Form Editing
การส่งข้อมูล POST

ซึ่งเป็นพื้นฐานของ Web Application

หน้าอัปเดตข้อมูลสินค้า

หน้านี้คือไฟล์ update_product.php (หน้าแก้ไขสินค้า) มีหน้าที่ รับข้อมูลที่แก้ไขจากฟอร์ม แล้วอัปเดตข้อมูลสินค้าในฐานข้อมูล โดยสามารถ เปลี่ยนข้อมูลสินค้า และเปลี่ยนรูปภาพสินค้าได้
เหมาะมากสำหรับใช้สอนนักศึกษาเรื่อง UPDATE Database + Upload File


ส่วนสำคัญของโค้ด อธิบายดังนี้


<?php
session_start();

if(!isset($_SESSION['admin'])){
header("location:index.php");
exit();
}
?>
<?php
include("config.php");

/* รับค่าจากฟอร์ม */
$id = $_POST['id'];
$name = $_POST['product_name'];
$desc = $_POST['description'];
$price= $_POST['price'];
$category=$_POST['category'];


/* ตรวจสอบว่ามีการอัปโหลดรูปใหม่หรือไม่ */
if(isset($_FILES['image']) && $_FILES['image']['name'] != ""){

$image = $_FILES['image']['name'];
$tmp = $_FILES['image']['tmp_name'];

/* อัปโหลดรูป */
move_uploaded_file($tmp,"images/".$image);

/* อัปเดตข้อมูลพร้อมรูป */
$sql = "UPDATE products
SET product_name='$name',
description='$desc',
price='$price',
category='$category'
image='$image'
WHERE id='$id'";

}else{

/* อัปเดตข้อมูลโดยไม่เปลี่ยนรูป */
$sql="UPDATE products SET
product_name='$name',
description='$desc',
price='$price',
category='$category'
WHERE id='$id'";
}

/* สั่งให้ฐานข้อมูลทำงาน */
mysqli_query($conn,$sql);

/* กลับไปหน้ารายการสินค้า */
header("Location: products.php");

?>

หน้า update_product.php

ไฟล์นี้คือ update_product.php ซึ่งเป็นหน้าที่ใช้ บันทึกการแก้ไขสินค้า (Update Product) หลังจากที่ Admin แก้ไขข้อมูลในหน้า edit_product.php แล้วกดปุ่มบันทึก ระบบจะส่งข้อมูลมาที่หน้านี้เพื่อ อัปเดตข้อมูลในฐานข้อมูล

หน้านี้ถือเป็นส่วนสำคัญของระบบ CRUD (Update)

1️⃣ หน้าที่ของหน้า update_product.php

หน้าที่หลักคือ รับข้อมูลที่แก้ไขจากฟอร์ม
→ ตรวจสอบรูปภาพใหม่
→ อัปเดตข้อมูลสินค้าในฐานข้อมูล
→ กลับไปหน้ารายการสินค้า

โครงสร้างการทำงาน

edit_product.php

แก้ไขสินค้า


update_product.php

UPDATE Database


products.php

2️⃣ ตรวจสอบสิทธิ์ Admin (Security)

session_start();if(!isset($_SESSION['admin'])){
header("location:index.php");
exit();
}

ความหมาย เปิดระบบ Session

  • ตรวจสอบว่า ผู้ใช้เป็น Admin หรือไม่

การทำงาน

ถ้าไม่ได้ Login เป็น Admin
→ ไม่สามารถแก้ไขสินค้าได้
→ ระบบจะกลับไปหน้า index

เหตุผล เพื่อป้องกันผู้ใช้ทั่วไปแก้ไขข้อมูลสินค้า


3️⃣ เชื่อมต่อฐานข้อมูล

include("config.php");
หน้าที่ เชื่อมต่อเว็บไซต์กับฐานข้อมูล MySQL ตัวอย่างใน config.php
$conn = mysqli_connect("localhost","root","","sisaket");

4️⃣ รับข้อมูลจากฟอร์ม

$id   = $_POST['id'];
$name = $_POST['product_name'];
$desc = $_POST['description'];
$price= $_POST['price'];
ข้อมูลที่รับมาจากฟอร์ม
ตัวแปรข้อมูล
idรหัสสินค้า
product_nameชื่อสินค้า
descriptionรายละเอียดสินค้า
priceราคา

ตัวอย่าง

id = 3
product_name = ทุเรียนภูเขาไฟ
price = 1200

5️⃣ ตรวจสอบว่ามีการอัปโหลดรูปใหม่หรือไม่

if(isset($_FILES['image']) && $_FILES['image']['name'] != "")

ความหมาย ตรวจสอบว่าผู้ใช้เลือกอัปโหลดรูปใหม่หรือไม่ จะแบ่งออกเป็น 2 กรณี
กรณีที่ 1 เปลี่ยนรูปใหม่ระบบจะอัปโหลดรูปใหม่และอัปเดตชื่อรูปในฐานข้อมูล

กรณีที่ 2 ไม่เปลี่ยนรูป

ระบบจะอัปเดตเฉพาะข้อมูลสินค้าโดยใช้รูปเดิม
นี่คือแนวคิดสำคัญของระบบ Edit Data

6️⃣ การอัปโหลดรูปภาพ

$image = $_FILES['image']['name'];
$tmp = $_FILES['image']['tmp_name'];move_uploaded_file($tmp,"images/".$image);

การทำงาน รับชื่อไฟล์ รับตำแหน่งไฟล์ชั่วคราว ย้ายไฟล์ไปเก็บในโฟลเดอร์ images ตัวอย่าง
temp/abc.jpg
→ images/abc.jpg


7️⃣ คำสั่ง UPDATE ฐานข้อมูล

กรณีเปลี่ยนรูป

$sql = "UPDATE products 
SET product_name='$name',
description='$desc',
price='$price',
image='$image'
WHERE id='$id'";

ความหมายแก้ไขข้อมูลสินค้า พร้อมเปลี่ยนรูปใหม่


กรณีไม่เปลี่ยนรูป

$sql = "UPDATE products 
SET product_name='$name',
description='$desc',
price='$price'
WHERE id='$id'";

ความหมาย แก้ไขเฉพาะชื่อ รายละเอียด และราคา รูปภาพยังใช้รูปเดิม


8️⃣ สั่งให้ฐานข้อมูลทำงาน

mysqli_query($conn,$sql);

หน้าที่ส่งคำสั่ง SQL ไปให้ MySQL ทำงาน


9️⃣ กลับไปหน้ารายการสินค้า

header("Location: products.php");

ความหมายหลังจากแก้ไขเสร็จ
→ กลับไปหน้าแสดงรายการสินค้า

เหตุผลเพื่อให้ Admin เห็นรายการสินค้าที่อัปเดตแล้ว


🔟 สิ่งสำคัญที่นักศึกษาจะได้เรียนรู้จากหน้านี้

จากไฟล์นี้นักศึกษาจะเข้าใจ

  • Session และการตรวจสอบสิทธิ์
  • การรับค่าจากฟอร์ม (POST)
  • การอัปโหลดไฟล์
  • เงื่อนไข if / else
  • การใช้คำสั่ง UPDATE ในฐานข้อมูล
  • การ Redirect หน้าเว็บ

ซึ่งทั้งหมดเป็นพื้นฐานของการพัฒนา Web Application


“แก้ไข (Edit)” กับ “Update” จริง ๆ แล้ว ความหมายใกล้กัน แต่หน้าที่ในระบบเว็บต่างกัน


1️⃣ แก้ไข (Edit)

Edit คือ หน้าแบบฟอร์มสำหรับแก้ไขข้อมูล

หน้าที่ของ Edit ดึงข้อมูลเดิมจากฐานข้อมูล
→ แสดงในฟอร์ม
→ ให้ผู้ใช้แก้ไข
ตัวอย่างไฟล์ edit_product.php
ตัวอย่าง URL
edit_product.php?id=3
หน้าจอที่เห็น
ชื่อสินค้า : ทุเรียนภูเขาไฟ
รายละเอียด : ทุเรียน GI ศรีสะเกษ
ราคา : 1200[บันทึกการแก้ไข]
ดังนั้น
Edit = หน้าแสดงข้อมูลเพื่อแก้ไข


2️⃣ Update

Update คือ การบันทึกข้อมูลที่แก้ไขลงฐานข้อมูล
หน้าที่ของ Update
รับข้อมูลจากฟอร์ม
→ แก้ไขข้อมูลในฐานข้อมูล
→ บันทึกข้อมูลใหม่
ตัวอย่างไฟล์
update_product.php
ตัวอย่าง SQL
UPDATE products
SET product_name=’ทุเรียนภูเขาไฟ’,
price=’1200′
WHERE id=’3′
ดังนั้น
Update = การบันทึกข้อมูลที่แก้ไขลง Database


3️⃣ เปรียบเทียบให้เข้าใจง่าย

คำความหมายตัวอย่างไฟล์
Editหน้าแก้ไขข้อมูลedit_product.php
Updateบันทึกข้อมูลที่แก้ไขupdate_product.php

4️⃣ ลำดับการทำงานจริงในระบบ

products.php

คลิกปุ่ม แก้ไข


edit_product.php

แก้ไขข้อมูลสินค้า

กดปุ่มบันทึก


update_product.php

UPDATE Database

products.php

5️⃣ เปรียบเทียบให้เข้าใจง่าย (ตัวอย่างชีวิตจริง)

เหมือนกับ

แก้ไข (Edit)
= เปิดเอกสาร Word เพื่อแก้ข้อความUpdate
= กด Save บันทึกไฟล์

6️⃣ สิ่งที่นักศึกษาควรเข้าใจ

ในระบบเว็บไซต์

Edit = หน้า Form
Update = การบันทึก Database

ทั้งสองอย่างทำงานร่วมกัน

Edit → Update

💡 เทคนิคสอนนักศึกษาให้เข้าใจเร็ว

ให้จำสูตรนี้

Edit = Form
Update = Database

หน้าลบสินค้า

ไฟล์นี้คือ delete_product.php (หน้าลบสินค้า) มีหน้าที่ ลบข้อมูลสินค้าออกจากฐานข้อมูล และลบรูปภาพสินค้าออกจากโฟลเดอร์ในเว็บไซต์ โดยอนุญาตให้ เฉพาะ Admin เท่านั้นที่สามารถลบสินค้าได้

หน้านี้เป็นส่วนหนึ่งของระบบ CRUD ในส่วนของ

D = Delete

1️⃣ หน้าที่ของหน้า delete_product.php

หน้าที่หลักคือ

รับรหัสสินค้า (id)
→ ค้นหารูปภาพของสินค้า
→ ลบรูปภาพในโฟลเดอร์
→ ลบข้อมูลสินค้าในฐานข้อมูล
→ กลับไปหน้ารายการสินค้า

โครงสร้างการทำงาน

products.php

คลิกปุ่ม ลบสินค้า


delete_product.php?id=3

ลบรูปภาพ
ลบข้อมูลใน database


กลับไปหน้า products.php

2️⃣ ตรวจสอบสิทธิ์ Admin (Security)

session_start();if(!isset($_SESSION['admin'])){
header("location:index.php");
exit();
}

ความหมาย

  • เปิดระบบ Session
  • ตรวจสอบว่าผู้ใช้เป็น Admin

การทำงาน

ถ้าไม่ได้ Login เป็น Admin
→ ไม่สามารถลบสินค้าได้

เหตุผลเพื่อป้องกันผู้ใช้ทั่วไปลบสินค้า


3️⃣ เชื่อมต่อฐานข้อมูล

include("config.php");

หน้าที่

เชื่อมต่อเว็บไซต์กับฐานข้อมูล MySQL

4️⃣ รับค่า id ของสินค้า

$id = $_GET['id'];
ตัวอย่าง URL
delete_product.php?id=5
ความหมาย
id = รหัสสินค้า
ใช้สำหรับ
ระบุว่าสินค้าไหนต้องถูกลบ

5️⃣ ค้นหารูปภาพของสินค้า

$sql = "SELECT image FROM products WHERE id='$id'";
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($result);$image = $row['image'];

คำสั่ง SQL
SELECT image FROM products WHERE id=’5′
ความหมาย
ดึงชื่อไฟล์รูปภาพของสินค้า

ตัวอย่างข้อมูล
image = durian.jpg


6️⃣ ลบรูปภาพออกจากโฟลเดอร์

if(file_exists("images/".$image)){
unlink("images/".$image);}

อธิบาย

คำสั่งความหมาย
file_exists()ตรวจสอบว่าไฟล์มีอยู่หรือไม่
unlink()ลบไฟล์

การทำงาน
ถ้ามีไฟล์รูป
→ ลบรูปออกจากโฟลเดอร์ images

ตัวอย่าง
images/durian.jpg
→ ถูกลบออก

เหตุผลที่ต้องลบรูปเพื่อไม่ให้มีไฟล์ค้างในระบบ


7️⃣ ลบข้อมูลสินค้าในฐานข้อมูล

$sql = "DELETE FROM products WHERE id='$id'";
mysqli_query($conn,$sql);

คำสั่ง SQL
DELETE FROM products WHERE id=’5′
ความหมาย
ลบข้อมูลสินค้าออกจากตาราง products


8️⃣ กลับไปหน้ารายการสินค้า

header("location:products.php");

ความหมาย
หลังจากลบสินค้า
→ กลับไปหน้ารายการสินค้า

เหตุผลให้ผู้ใช้เห็นรายการสินค้าที่อัปเดตแล้ว


9️⃣ สิ่งสำคัญที่นักศึกษาจะได้เรียนรู้จากหน้านี้

จากไฟล์นี้นักศึกษาจะเข้าใจเรื่อง

  • Session และการตรวจสอบสิทธิ์
  • การรับค่าจาก URL (GET)
  • การใช้คำสั่ง DELETE ในฐานข้อมูล
  • การจัดการไฟล์ใน PHP
  • การลบไฟล์ด้วย unlink()
  • การ Redirect หน้าเว็บ

ซึ่งเป็นพื้นฐานของการสร้าง Web Application


🔟 สรุประบบ CRUD ของเว็บไซต์นี้

Create  → add_product.php
Read → products.php
Update → edit_product.php + update_product.php
Delete → delete_product.php

💡 คำแนะนำสำหรับการสอนนักศึกษา

ในหน้า products.php ควรเพิ่มปุ่มลบแบบนี้

<a href="delete_product.php?id=<?php echo $row['id']; ?>"
onclick="return confirm('ต้องการลบสินค้านี้หรือไม่?')">
ลบสินค้า
</a>

ตัวอย่างการแสดงผลหน้าจอ

<?php
session_start();
include("config.php");
/* ตรวจสอบว่าเป็น Admin หรือไม่ */
if(!isset($_SESSION['admin'])){
header("location:index.php");
exit();
}
/* รับค่า id */
$id = $_GET['id'];
/* ค้นหารูปภาพก่อนลบ */
$sql = "SELECT image FROM products WHERE id='$id'";
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($result);
$image = $row['image'];
/* ลบรูปภาพในโฟลเดอร์ */
if(file_exists("images/".$image)){
unlink("images/".$image);
}
/* ลบข้อมูลสินค้า */
$sql = "DELETE FROM products WHERE id='$id'";
mysqli_query($conn,$sql);
/* กลับไปหน้ารายการสินค้า */
header("location:products.php");
?>

หน้า reviews.php (ระบบรีวิวสินค้า)
ใช้สำหรับ แสดงรีวิวของลูกค้า และให้ลูกค้าเขียนรีวิวสินค้าได้ โดยรีวิวจะถูกบันทึกลงในตาราง reviews ในฐานข้อมูล สรุป ส่วนสำคัญของหน้านี้ ได้ดังนี้


ชุดคำสั่ง

<?php
include("config.php");
/* ตรวจสอบว่ามี product_id หรือไม่ */
if(isset($_GET['product_id'])){
$product_id = $_GET['product_id'];
}else{
echo "ไม่พบสินค้า";
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>รีวิวสินค้า</title>
<style>
body{
font-family:Tahoma;
background:#f2f6fc;
margin:0;
padding:40px;
}
/* container */
.container{
max-width:800px;
margin:auto;
background:white;
padding:30px;
border-radius:12px;
box-shadow:0 6px 20px rgba(0,0,0,0.15);
}
/* หัวข้อ */
h2{
margin-top:0;
}
/* กล่องรีวิว */
.review-box{
border-bottom:1px solid #eee;
padding:15px 0;
}
.review-name{
font-weight:bold;
color:#333;
font-size:16px;
}
.review-star{
color:#f4b400;
font-size:18px;
margin-top:3px;
}
.review-comment{
margin-top:5px;
color:#555;
}
.review-date{
font-size:12px;
color:#888;
margin-top:5px;
}
/* ฟอร์มรีวิว */
.form-box{
margin-top:30px;
padding:20px;
background:#fafafa;
border-radius:10px;
border:1px solid #eee;
}
input,select,textarea{
width:100%;
padding:10px;
margin-top:5px;
margin-bottom:15px;
border:1px solid #ddd;
border-radius:6px;
}
button{
background:#2c7be5;
color:white;
border:none;
padding:10px 20px;
border-radius:6px;
cursor:pointer;
font-size:15px;
}
button:hover{
background:#1a5fd1;
}
.back-btn{
display:inline-block;
margin-bottom:20px;
text-decoration:none;
color:white;
background:#6c757d;
padding:8px 15px;
border-radius:6px;
}
.back-btn:hover{
background:#555;
}
.no-review{
color:#888;
margin-bottom:20px;
}
</style>
</head>
<body>
<div class="container">
<a class="back-btn" href="products.php">← กลับหน้าสินค้า</a>
<h2>รีวิวจากลูกค้า</h2>
<?php
$sql="SELECT * FROM reviews WHERE product_id='$product_id' ORDER BY id DESC";
$result=mysqli_query($conn,$sql);
if(mysqli_num_rows($result) > 0){
while($row=mysqli_fetch_assoc($result)){
?>
<div class="review-box">
<div class="review-name">
<?php echo htmlspecialchars($row['customer_name']); ?>
</div>
<div class="review-star">
<?php echo str_repeat("⭐",$row['rating']); ?>
</div>
<div class="review-comment">
<?php echo htmlspecialchars($row['comment']); ?>
</div>
<div class="review-date">
<?php echo $row['review_date']; ?>
</div>
</div>
<?php
}
}else{
echo "<p class='no-review'>ยังไม่มีรีวิวสินค้า</p>";
}
?>
<div class="form-box">
<h3>เขียนรีวิวสินค้า</h3>
<form action="save_review.php" method="post">
<input type="hidden" name="product_id" value="<?php echo $product_id; ?>">
<label>ชื่อผู้รีวิว</label>
<input type="text" name="customer_name" required>
<label>คะแนน</label>
<select name="rating">
<option value="5">⭐⭐⭐⭐⭐ (5 ดาว)</option>
<option value="4">⭐⭐⭐⭐ (4 ดาว)</option>
<option value="3">⭐⭐⭐ (3 ดาว)</option>
<option value="2">⭐⭐ (2 ดาว)</option>
<option value="1">⭐ (1 ดาว)</option>
</select>
<label>ความคิดเห็น</label>
<textarea name="comment" rows="4" required></textarea>
<button type="submit">
ส่งรีวิว
</button>
</form>
</div>
</div>
</body>
</html>

1️⃣ หน้าที่ของระบบรีวิวสินค้า

หน้าที่หลักของไฟล์นี้คือ รับ product_id
→ แสดงรีวิวของสินค้านั้น
→ แสดงฟอร์มให้ลูกค้าเขียนรีวิว
→ ส่งข้อมูลไปบันทึกที่ save_review.php

โครงสร้างการทำงาน

product_detail.php

กดปุ่ม รีวิวสินค้า


reviews.php?product_id=3

แสดงรีวิวทั้งหมด

ลูกค้าเขียนรีวิว


save_review.php

บันทึกลง Database

2️⃣ ตรวจสอบว่าเลือกสินค้าหรือไม่

if(isset($_GET['product_id'])){
$product_id = $_GET['product_id'];
}else{
echo "ไม่พบสินค้า";
exit();
}

ความหมาย ตรวจสอบว่า URL มี product_id หรือไม่ ตัวอย่าง URL
reviews.php?product_id=3
ถ้าไม่มี
ไม่พบสินค้า


3️⃣ ดึงรีวิวจากฐานข้อมูล

$sql="SELECT * FROM reviews WHERE product_id='$product_id' ORDER BY id DESC";
$result=mysqli_query($conn,$sql);

คำสั่ง SQL

SELECT * FROM reviews
WHERE product_id='3'
ORDER BY id DESC

ความหมาย ดึงรีวิวของสินค้านั้น
เรียงจากรีวิวล่าสุดก่อน


4️⃣ แสดงข้อมูลรีวิว

while($row=mysqli_fetch_assoc($result)){

ข้อมูลที่แสดงในรีวิว

ฟิลด์ความหมาย
customer_nameชื่อผู้รีวิว
ratingคะแนนดาว
commentความคิดเห็น
review_dateวันที่รีวิว

5️⃣ ป้องกัน XSS (ความปลอดภัย)

htmlspecialchars($row['customer_name'])
และ
htmlspecialchars($row['comment'])
หน้าที่
ป้องกันการแทรกโค้ด HTML หรือ JavaScript
ตัวอย่าง

ถ้ามีคนพิมพ์<
script>alert(“hack”)</script>

ระบบจะไม่รันโค้ด


6️⃣ แสดงดาวรีวิว

<?php echo str_repeat("⭐",$row['rating']); ?>

ความหมาย สร้างดาวตามจำนวนคะแนน ตัวอย่าง

ratingผลลัพธ์
5⭐⭐⭐⭐⭐
3⭐⭐⭐

7️⃣ แสดงข้อความเมื่อไม่มีรีวิว

if(mysqli_num_rows($result) > 0)
ถ้าไม่มีรีวิว
echo "<p class='no-review'>ยังไม่มีรีวิวสินค้า</p>";
ผู้ใช้จะเห็น
ยังไม่มีรีวิวสินค้า

8️⃣ ฟอร์มเขียนรีวิวสินค้า

<form action="save_review.php" method="post">

ข้อมูลที่จะส่งไปบันทึก

fieldความหมาย
product_idรหัสสินค้า
customer_nameชื่อผู้รีวิว
ratingคะแนน
commentความคิดเห็น

9️⃣ ส่ง product_id แบบ hidden

<input type="hidden" name="product_id" value="<?php echo $product_id; ?>">

ความหมาย

ส่งรหัสสินค้าไปด้วย
เพื่อให้รู้ว่ารีวิวสินค้าอะไร

🔟 ระบบให้คะแนนดาว

<select name="rating">

ตัวเลือก

⭐⭐⭐⭐⭐ (5 ดาว)
⭐⭐⭐⭐ (4 ดาว)
⭐⭐⭐ (3 ดาว)
⭐⭐ (2 ดาว)
⭐ (1 ดาว)

ข้อมูลจะถูกบันทึกเป็นตัวเลข 1 – 5


1️⃣1️⃣ CSS ที่ใช้ในหน้านี้

ส่วนสำคัญ กล่องรีวิว .review-box ทำให้รีวิว แสดงเป็นรายการ
มีเส้นแบ่ง


ฟอร์มรีวิว

.form-box

ทำให้ ฟอร์มดูเป็นกล่องสวยขึ้น


1️⃣2️⃣ โครงสร้างตาราง reviews

ตารางในฐานข้อมูล reviews โครงสร้าง

fieldtype
idint
product_idint
customer_namevarchar
commenttext
ratingint
review_datedatetime

ไฟล์นี้คือ save_review.php

    ไฟล์นี้คือ save_review.php มีหน้าที่ รับข้อมูลรีวิวจากฟอร์ม แล้วบันทึกลงฐานข้อมูลจากนั้นจะพาผู้ใช้กลับไปหน้ารีวิวสินค้า เพื่อให้เห็นรีวิวที่เพิ่งส่ง
หน้านี้ทำงานร่วมกับหน้า reviews.php
โครงสร้างการทำงานของระบบรีวิว

reviews.php

ลูกค้าเขียนรีวิว

กดปุ่ม "ส่งรีวิว"


save_review.php

บันทึกข้อมูลลง Database


กลับไป reviews.php

<?php
include(“config.php”);
/* ตรวจสอบว่ามีการส่งข้อมูลมาหรือไม่ */
if(isset($_POST[‘product_id’])){
$product_id = $_POST[‘product_id’];
$customer_name = $_POST[‘customer_name’];
$comment = $_POST[‘comment’];
$rating = $_POST[‘rating’];
/* ป้องกัน XSS */
$customer_name = htmlspecialchars($customer_name);
$comment = htmlspecialchars($comment);
/* บันทึกข้อมูลรีวิว */
$sql=”INSERT INTO reviews(product_id,customer_name,comment,rating,review_date)
VALUES(‘$product_id’,’$customer_name’,’$comment’,’$rating’,NOW())”;
mysqli_query($conn,$sql);
/* กลับไปหน้ารีวิว */
header(“location:reviews.php?product_id=$product_id”);
exit();
}else{
echo “ไม่พบข้อมูล”;
}
?>

1️⃣ เชื่อมต่อฐานข้อมูล

include("config.php");
หน้าที่ เชื่อมต่อเว็บไซต์กับฐานข้อมูล MySQL ตัวอย่างในไฟล์ config.php
$conn = mysqli_connect("localhost","root","","sisaket");

2️⃣ ตรวจสอบว่ามีการส่งข้อมูลมาหรือไม่

if(isset($_POST['product_id'])){
ความหมาย ตรวจสอบว่าฟอร์มถูกส่งมาจริงหรือไม่
ถ้ามีการกดปุ่ม ส่งรีวิว ข้อมูลจะถูกส่งมาแบบ POST
ตัวอย่างข้อมูลที่ส่งมา
product_id = 3
customer_name = สมชาย
rating = 5
comment = สินค้าดีมาก

3️⃣ รับค่าจากฟอร์ม

$product_id = $_POST['product_id'];
$customer_name = $_POST['customer_name'];
$comment = $_POST['comment'];
$rating = $_POST['rating'];

ข้อมูลที่รับมาจากฟอร์ม

ตัวแปรความหมาย
product_idรหัสสินค้า
customer_nameชื่อผู้รีวิว
commentความคิดเห็น
ratingคะแนนดาว

4️⃣ ป้องกัน XSS (Security)

$customer_name = htmlspecialchars($customer_name);
$comment = htmlspecialchars($comment);
หน้าที่
ป้องกันการแทรกโค้ด HTML หรือ JavaScript
ตัวอย่าง ถ้ามีคนพิมพ์ <script>alert("hack")</script> ระบบจะไม่รันโค้ดนั้น แต่จะแสดงเป็นข้อความธรรมดา

5️⃣ บันทึกข้อมูลลงฐานข้อมูล

$sql="INSERT INTO reviews(product_id,customer_name,comment,rating,review_date)
VALUES('$product_id','$customer_name','$comment','$rating',NOW())";
คำสั่ง SQL
INSERT INTO reviews
ความหมายเพิ่มข้อมูลใหม่ลงในตาราง reviews
ข้อมูลที่บันทึก
fieldข้อมูล
product_idรหัสสินค้า
customer_nameชื่อผู้รีวิว
commentความคิดเห็น
ratingคะแนน
review_dateวันที่รีวิว

6️⃣ ฟังก์ชัน NOW()

NOW() ความหมายบันทึกวันและเวลาปัจจุบัน
ตัวอย่าง 2026-03-16 10:25:30

7️⃣ สั่งให้ฐานข้อมูลทำงาน

mysqli_query($conn,$sql);
หน้าที่ ส่งคำสั่ง SQL ไปให้ MySQL ทำงาน 
ผลลัพธ์
รีวิวถูกบันทึกลงฐานข้อมูล

8️⃣ กลับไปหน้ารีวิวสินค้า

header("location:reviews.php?product_id=$product_id");
exit();

ความหมาย หลังจากบันทึกรีวิว→ กลับไปหน้า reviews
ตัวอย่าง URL
reviews.php?product_id=3

ผู้ใช้จะเห็นรีวิวที่เพิ่งส่ง


9️⃣ กรณีไม่มีข้อมูลส่งมา

}else{
echo "ไม่พบข้อมูล";
}

ความหมายถ้ามีคนเปิดไฟล์ save_review.php โดยตรง
ระบบจะแจ้งว่า “ไม่พบข้อมูล”เพื่อป้องกันการใช้งานผิดวิธี


🔟 สิ่งสำคัญที่นักศึกษาจะได้เรียนรู้

จากหน้านี้ นักศึกษาจะเข้าใจ

  • การรับข้อมูลจาก POST
  • การบันทึกข้อมูลด้วย INSERT
  • การใช้ NOW()
  • การป้องกัน XSS
  • การ Redirect หน้าเว็บ
  • การทำงานของ Form + Database

ซึ่งเป็นพื้นฐานของการพัฒนา Web Application

หน้ารายงาน report.php

<?php
session_start();
include("config.php");

$sql="SELECT * FROM products";
$result=mysqli_query($conn,$sql);

$total=mysqli_num_rows($result);
?>

<!DOCTYPE html>
<html>
<head>

<meta charset="UTF-8">
<title>รายงานสินค้า</title>

<style>

body{
font-family:'Segoe UI', Tahoma;
background:#eef2f7;
margin:0;
}

/* HEADER */

.header{
background:linear-gradient(90deg,#ff7a00,#ff9a3c);
color:white;
padding:15px 40px;
display:flex;
justify-content:space-between;
align-items:center;
}

.logo{
font-size:22px;
font-weight:bold;
}

.menu a{
color:white;
text-decoration:none;
margin-left:20px;
padding:6px 10px;
border-radius:5px;
transition:0.3s;
}

.menu a:hover{
background:rgba(255,255,255,0.2);
}

/* CONTAINER */

.container{
max-width:1000px;
margin:30px auto;
background:white;
padding:25px;
border-radius:12px;
box-shadow:0 5px 20px rgba(0,0,0,0.15);
}

/* TITLE */

h2{
margin-top:0;
display:flex;
justify-content:space-between;
align-items:center;
}

/* SEARCH + BUTTON */

.top-bar{
display:flex;
justify-content:space-between;
align-items:center;
flex-wrap:wrap;
gap:10px;
margin-bottom:15px;
}

.search-box input{
padding:8px;
width:250px;
border:1px solid #ccc;
border-radius:6px;
}

/* BUTTON */

.btn{
padding:8px 14px;
border:none;
border-radius:6px;
cursor:pointer;
color:white;
font-size:14px;
transition:0.3s;
}

.print{ background:#28a745; }
.print:hover{ background:#1e7e34; }

.home{ background:#007bff; }

.btn:hover{
transform:translateY(-2px);
}

/* TABLE */

table{
width:100%;
border-collapse:collapse;
margin-top:10px;
overflow:hidden;
border-radius:10px;
}

th{
background:#007bff;
color:white;
padding:12px;
text-align:left;
}

td{
padding:10px;
border-bottom:1px solid #eee;
}

tr:hover{
background:#f5f7fa;
}

/* PRICE */

.price{
color:#e60000;
font-weight:bold;
}

/* FOOTER */

.footer{
margin-top:15px;
padding-top:10px;
border-top:1px solid #ddd;
color:#555;
font-size:14px;
}

/* PRINT MODE */

@media print{
.menu, .top-bar button{
display:none;
}
body{
background:white;
}
.container{
box-shadow:none;
}
}

</style>

<script>

function searchProduct(){

let input=document.getElementById("search");
let filter=input.value.toLowerCase();
let table=document.getElementById("productTable");
let tr=table.getElementsByTagName("tr");

for(let i=1;i<tr.length;i++){

let td=tr[i].getElementsByTagName("td")[1];

if(td){

let text=td.textContent || td.innerText;

tr[i].style.display = text.toLowerCase().includes(filter) ? "" : "none";

}

}

}

</script>

</head>

<body>

<!-- HEADER -->
<div class="header">

<div class="logo">📊 ระบบรายงานสินค้า</div>

<div class="menu">
<a href="index.php">หน้าแรก</a>
<a href="products.php">สินค้า</a>
<a href="report.php">รายงาน</a>

<?php if(isset($_SESSION['admin'])){ ?>
<a href="add_product.php">เพิ่มสินค้า</a>
<a href="logout.php">ออกจากระบบ</a>
<?php }else{ ?>
<a href="login.php">Login</a>
<?php } ?>
</div>

</div>

<!-- CONTENT -->
<div class="container">

<h2>
📦 รายงานสินค้า
<a href="products.php" class="btn home">← กลับ</a>
</h2>

<div class="top-bar">

<div class="search-box">
<input type="text" id="search" onkeyup="searchProduct()" placeholder="🔍 ค้นหาสินค้า...">
</div>

<button class="btn print" onclick="window.print()">🖨 พิมพ์</button>

</div>

<table id="productTable">

<tr>
<th>ลำดับ</th>
<th>ชื่อสินค้า</th>
<th>ราคา</th>
<th>ประเภท</th>
</tr>

<?php
$i=1;
while($row=mysqli_fetch_assoc($result)){
?>

<tr>
<td><?php echo $i++; ?></td>
<td><?php echo $row['product_name']; ?></td>
<td class="price"><?php echo number_format($row['price']); ?> บาท</td>
<td><?php echo $row['category']; ?></td>
</tr>

<?php } ?>

</table>

<div class="footer">
📌 จำนวนสินค้าทั้งหมด <b><?php echo $total; ?></b> รายการ
</div>

</div>

</body>
</html>