Mini Shell

Direktori : /var/www/vhosts/ccp.ac.th/backup_full/httpdocs/fertilizer/
Upload File :
Current File : /var/www/vhosts/ccp.ac.th/backup_full/httpdocs/fertilizer/REGISTRATION_SETUP.md

# ระบบลงทะเบียนผู้ใช้งาน - คู่มือการติดตั้ง

## คำอธิบายทั่วไป
ระบบลงทะเบียนผู้ใช้งานนี้ช่วยให้ผู้ใช้สามารถลงทะเบียนตัวเองได้ผ่านหน้า 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