const express = require('express'); const path = require('path'); const bcrypt = require('bcryptjs'); const session = require('express-session'); const mysql = require('mysql2'); const app = express(); // การตั้งค่าการเชื่อมต่อกับฐานข้อมูล const pool = mysql.createConnection({ host: 'localhost', user: 'root', password: '', database: 'proj3' }); // ตั้งค่า view engine เป็น EJS app.set('view engine', 'ejs'); app.set('views', path.join(__dirname, 'views')); // ใช้ session สำหรับเก็บข้อมูลของผู้ใช้ app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: true, })); // ให้บริการไฟล์จากโฟลเดอร์ public app.use(express.static(path.join(__dirname, 'public'))); // รับข้อมูลจากฟอร์ม app.use(express.urlencoded({ extended: true })); // หน้าแรก app.get('/', (req, res) => { res.render('home'); }); // หน้า home (เปิดให้ทุกคนเข้าถึงได้) app.get('/home', (req, res) => { res.render('home'); }); // หน้า login app.get('/login', (req, res) => { res.render('login'); }); // ตรวจสอบการ login app.post('/login', (req, res) => { const { username, password } = req.body; const query = 'SELECT * FROM users WHERE username = ?'; pool.query(query, [username], (err, results) => { if (err) return res.send('Error occurred while logging in'); if (results.length > 0) { bcrypt.compare(password, results[0].password, (err, isMatch) => { if (err) return res.send('Error occurred while comparing password'); if (isMatch) { req.session.username = username; req.session.user_id = results[0].id; res.redirect('/products'); } else { res.render('login', { error: 'รหัสผ่านไม่ถูกต้อง' }); } }); } else { res.render('login', { error: 'ไม่พบผู้ใช้' }); } }); }); // หน้า register app.get('/register', (req, res) => { res.render('register'); }); // สมัครสมาชิก app.post('/register', (req, res) => { const { username, password, email } = req.body; bcrypt.hash(password, 10, (err, hashedPassword) => { if (err) return res.send('Error occurred while registering'); const query = 'INSERT INTO users (username, password, email) VALUES (?, ?, ?)'; pool.query(query, [username, hashedPassword, email], (err, result) => { if (err) return res.send('Error occurred while registering'); res.redirect('/login'); }); }); }); // หน้า products app.get('/products', (req, res) => { if (!req.session.username || !req.session.user_id) return res.redirect('/login'); // ดึงข้อมูลบล็อกที่เกี่ยวข้องกับ user_id const query = ` SELECT blogs.*, tags.name AS tag_name FROM blogs LEFT JOIN tags ON blogs.tag_id = tags.id WHERE blogs.user_id = ? `; pool.query(query, [req.session.user_id], (err, blogs) => { if (err) return res.send('เกิดข้อผิดพลาดในการดึงบล็อก'); res.render('products', { blogs, username: req.session.username }); }); }); // หน้า create-blog app.get('/create-blog', (req, res) => { if (!req.session.username) return res.redirect('/login'); // ดึงข้อมูล tags จากฐานข้อมูล const query = 'SELECT * FROM tags'; pool.query(query, (err, tags) => { if (err) return res.send('เกิดข้อผิดพลาดในการดึงข้อมูลแท็ก'); res.render('create-blog', { tags }); }); }); // /อัปเดต blog app.post('/create-blog', (req, res) => { const { title, content, tag_id } = req.body; if (!req.session.user_id) return res.redirect('/login'); const query = 'INSERT INTO blogs (title, content, user_id, tag_id) VALUES (?, ?, ?, ?)'; pool.query(query, [title, content, req.session.user_id, tag_id], (err, result) => { if (err) return res.send('เกิดข้อผิดพลาดในการสร้างบล็อก'); res.redirect('/products'); }); }); // ลบบล็อก app.get('/delete-blog/:id', (req, res) => { const blogId = req.params.id; const query = 'DELETE FROM blogs WHERE id = ? AND user_id = ?'; pool.query(query, [blogId, req.session.user_id], (err, result) => { if (err) return res.send('Error occurred while deleting blog'); res.redirect('/products'); }); }); // แก้ไขบล็อก (GET) app.get('/edit-blog/:id', (req, res) => { const blogId = req.params.id; const query = ` SELECT blogs.*, tags.name AS tag_name, tags.id AS tag_id FROM blogs LEFT JOIN tags ON blogs.tag_id = tags.id WHERE blogs.id = ? AND blogs.user_id = ? `; pool.query(query, [blogId, req.session.user_id], (err, result) => { if (err) return res.send('เกิดข้อผิดพลาดในการดึงข้อมูลบล็อก'); if (result.length > 0) { const blog = result[0]; const tagsQuery = 'SELECT * FROM tags'; pool.query(tagsQuery, (err, tags) => { if (err) return res.send('เกิดข้อผิดพลาดในการดึงข้อมูลแท็ก'); res.render('edit-blog', { blog, tags }); }); } else { res.send('ไม่พบบล็อก'); } }); }); // แก้ไขบล็อก (POST) app.post('/edit-blog/:id', (req, res) => { const blogId = req.params.id; const { title, content, tag_id } = req.body; const query = 'UPDATE blogs SET title = ?, content = ?, tag_id = ? WHERE id = ?'; pool.query(query, [title, content, tag_id, blogId], (err, result) => { if (err) return res.send('เกิดข้อผิดพลาดในการแก้ไขบล็อก'); res.redirect('/products'); }); }); // ค้นหา blog app.get('/search-blog', (req, res) => { const searchQuery = req.query.query; const sql = 'SELECT * FROM blogs WHERE title LIKE ? OR content LIKE ?'; pool.query(sql, [`%${searchQuery}%`, `%${searchQuery}%`], (err, results) => { if (err) return res.status(500).json({ error: 'เกิดข้อผิดพลาด' }); res.json(results); }); }); app.listen(3000, () => console.log('Server Running on port 3000'));