Mini Shell
# ระบบลงทะเบียนผู้ใช้งาน - คู่มือการติดตั้ง
## คำอธิบายทั่วไป
ระบบลงทะเบียนผู้ใช้งานนี้ช่วยให้ผู้ใช้สามารถลงทะเบียนตัวเองได้ผ่านหน้า login โดยไม่ต้องติดต่อผู้ดูแลระบบ
## ขั้นตอนการติดตั้ง
### 1. สร้างตาราง user_confirm และนำเข้าข้อมูล
- เปิด URL: `http://localhost/fertilizer/setup_ui.html`
- คลิกปุ่ม "ตั้งค่าระบบ"
- ระบบจะสร้างตาราง `user_confirm` และนำเข้าข้อมูลจากไฟล์ `user_confirm.csv` อัตโนมัติ
### 2. ตรวจสอบการติดตั้ง
หลังจากการติดตั้งสำเร็จ คุณจะเห็นข้อความแจ้งจำนวนข้อมูลที่นำเข้า
### 3. ทดสอบระบบลงทะเบียน
- เปิดหน้า login: `http://localhost/fertilizer/login.php`
- คลิกปุ่ม "ลงทะเบียน"
- ทดสอบฟีเจอร์ต่อไปนี้:
- ค้นหาชื่อผู้ใช้จากรายชื่อ
- กรอกชื่อผู้ใช้งาน
- กรอกรหัสผ่าน (อย่างน้อย 8 ตัวอักษร)
- ยืนยันรหัสผ่าน
- คลิกปุ่มลงทะเบียน
## ไฟล์ที่สร้างหรือแก้ไข
### ไฟล์ใหม่:
1. **register_api.php** - API สำหรับจัดการลงทะเบียน
- `get_users_confirm` - ดึงข้อมูลผู้ใช้สำหรับค้นหา
- `check_username` - ตรวจสอบชื่อผู้ใช้งานซ้ำ
- `check_duplicate_name` - ตรวจสอบชื่อซ้ำในระบบ
- `register` - ลงทะเบียนผู้ใช้ใหม่
2. **assets/js/register.js** - JavaScript จัดการ modal และการตรวจสอบ
3. **setup.php** - Script ตั้งค่าระบบ (สร้างตารางและนำเข้าข้อมูล)
4. **setup_ui.html** - UI สำหรับการตั้งค่าระบบ
5. **setup_user_confirm.sql** - SQL script สำหรับสร้างตารางและนำเข้าข้อมูล
### ไฟล์ที่แก้ไข:
1. **login.php** - เพิ่มปุ่ม "ลงทะเบียน" และ modal
## โครงสร้างตาราง user_confirm
```sql
CREATE TABLE `user_confirm` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`last_name` varchar(255) NOT NULL,
`position` varchar(255) NULL,
`agency` varchar(255) NULL,
PRIMARY KEY (`id`),
INDEX `idx_name` (`name`, `last_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
## ฟีเจอร์ของระบบลงทะเบียน
### 1. การค้นหาและเลือกชื่อ
- ผู้ใช้ต้องค้นหาและเลือกชื่อตัวเอง จากตาราง `user_confirm`
- บังคับให้เลือก (ไม่สามารถเว้นว่างได้)
- ตรวจสอบว่าชื่อไม่ซ้ำกับตาราง `user` หากซ้ำให้แจ้งเตือน
### 2. การกรอกชื่อผู้ใช้งาน
- ตรวจสอบว่าชื่อผู้ใช้ไม่ซ้ำในตาราง `user`
- แจ้งเตือนแบบ real-time เมื่อกรอก username
### 3. การกรอกรหัสผ่าน
- บังคับให้มีความยาวอย่างน้อย 8 ตัวอักษร
- แสดงแจ้งเตือนความสั้นยาว
- ต้องกรอกการยืนยันรหัสผ่านให้ตรงกัน
### 4. การเข้ารหัสรหัสผ่าน
- ใช้วิธี `hash_hmac('sha256', password, salt)` เหมือนใน user.php
- Salt: `tikde78uj4ujuhlaoikiksakei896`
### 5. การบันทึกข้อมูล
- บันทึกลงตาราง `user` กับ field:
- `name` - ชื่อ
- `last_name` - นามสกุล
- `position` - ตำแหน่ง
- `agency` - หน่วยงาน
- `username` - ชื่อผู้ใช้งาน
- `password` - รหัสผ่าน (เข้ารหัสแล้ว)
- `login_status` - 100 (ผ่านการตรวจสอบ)
- `admin_status` - 0 (ไม่ใช่ Admin)
### 6. การแจ้งเตือน
- ใช้ Sweet Alert สำหรับแจ้งเตือนทั้งหมด
- แจ้งสำเร็จ / ข้อผิดพลาด / คำเตือน
## ฟังก์ชันใน register_api.php
### get_users_confirm
ดึงข้อมูลรายชื่อสำหรับการค้นหา
```
POST action=get_users_confirm&search=ชื่อ
Response: {status: 'success', data: [...]}
```
### check_username
ตรวจสอบชื่อผู้ใช้งานซ้ำหรือไม่
```
POST action=check_username&username=ชื่อผู้ใช้
Response: {status: 'success/error', message: '...'}
```
### check_duplicate_name
ตรวจสอบชื่อ-นามสกุลซ้ำในระบบ
```
POST action=check_duplicate_name&name=ชื่อ&last_name=นามสกุล
Response: {status: 'success/error', message: '...'}
```
### register
ลงทะเบียนผู้ใช้งานใหม่
```
POST action=register&confirm_id=ID&username=...&password=...&confirm_password=...
Response: {status: 'success/error/warning', message: '...'}
```
## การแก้ไขปัญหา
### ปัญหา: ไม่พบไฟล์ user_confirm.csv
**วิธีแก้**: ตรวจสอบว่าไฟล์ `user_confirm.csv` อยู่ในโฟลเดอร์ `/Applications/XAMPP/xamppfiles/htdocs/fertilizer/`
### ปัญหา: ไม่สามารถสร้างตาราง
**วิธีแก้**:
1. ตรวจสอบสิทธิ์ผู้ใช้ฐานข้อมูล
2. ลองลบตาราง `user_confirm` เก่า (ถ้ามี) แล้วสร้างใหม่
3. ใช้ phpMyAdmin เพื่อรัน setup_user_confirm.sql ด้วยตนเอง
### ปัญหา: การค้นหาไม่ทำงาน
**วิธีแก้**:
1. เปิด Browser DevTools (F12)
2. ดูข้อความใน Console
3. ตรวจสอบว่า register_api.php ทำงานถูกต้อง
### ปัญหา: ลงทะเบียนไม่สำเร็จ
**วิธีแก้**:
1. ตรวจสอบชื่อผู้ใช้ว่าซ้ำหรือไม่
2. ตรวจสอบว่า password มีอย่างน้อย 8 ตัวอักษร
3. ตรวจสอบว่า password และ confirm_password ตรงกัน
4. ตรวจสอบว่าเลือกชื่อแล้ว
## ความปลอดภัย
- รหัสผ่านเข้ารหัส hash_hmac(sha256) เหมือนระบบเดิม
- มีการตรวจสอบ SQL injection ผ่าน mysqli_real_escape_string
- มีการตรวจสอบความซ้ำ (duplicate) ของ username และชื่อ-นามสกุล
## ข้อมูลติดต่อ
หากมีปัญหาเพิ่มเติม กรุณาติดต่อ: Taveesak Tohlee
Zerion Mini Shell 1.0