# Skolēnu pārvaldības sistēma

Tīmekļa lietotne skolas skolēnu, klašu un vecāku pārvaldībai.

## Projekta struktūra

```
3 logi uzlabots/
├── frontend/
│   ├── students.html          # 1. logs — skolēnu saraksts
│   ├── add_student.html       # 2. logs — jauna skolēna pievienošana
│   ├── student_profile.html   # 3. logs — profils un rediģēšana
│   ├── css/
│   │   └── style.css          # Galvenā stillapsa (tumšais dizains)
│   └── js/
│       ├── students.js        # Saraksta loģika
│       ├── add_student.js     # Pievienošanas formas loģika
│       ├── profile.js         # Profila loģika
│       └── notify.js          # Stilizētu paziņojumu sistēma
├── backend/
│   ├── db.php                 # PDO datubāzes savienojums (singleton)
│   └── api/
│       ├── students.php       # REST API skolēniem (GET/POST/PUT/DELETE)
│       ├── parents.php        # REST API vecākiem (GET/POST)
│       └── classes.php        # REST API klasēm (GET/POST ar upsert)
├── db/
│   └── create_tables.sql      # Datubāzes shēma un testa dati
├── README.md                  # Šis fails
└── RESOURCES.md               # Izmantotie resursi un atsauces
```

## Funkcionalitāte

**1. logs — Skolēnu saraksts (`students.html`)**
- Parāda visus skolēnus no datubāzes
- Filtrēšana pēc klases
- Meklēšana pēc vārda un uzvārda
- Kārtošana pēc kolonnu virsrakstiem
- Pāreja uz skolēna profilu

**2. logs — Pievienot skolēnu (`add_student.html`)**
- Ievada jauna skolēna vārdu, uzvārdu, klasi
- Izvēlas esošu vecāku vai pievieno jaunu
- Validācija klientā un serverī
- Dati tiek saglabāti datubāzē

**3. logs — Skolēna profils (`student_profile.html`)**
- Parāda skolēna datus (vārds, uzvārds, klase, vecāks)
- Rediģēšanas režīms ar formu
- Skolēna dzēšana ar stilizētu apstiprinājuma dialogu
- Stilizēti paziņojumi par darbību rezultātiem

## Uzstādīšana

1. Augšupielādē projektu uz servera
2. Izveido datubāzi, izpildot `db/create_tables.sql`
3. Pielāgo savienojuma datus failā `backend/db.php`:
   - `$dbHost` — servera adrese un ports
   - `$dbName` — datubāzes nosaukums
   - `$dbUser` — lietotājvārds
   - `$dbPass` — parole
4. Pielāgo CORS `$allowedOrigins` masīvu `backend/api/*.php` failos atbilstoši savai domēna adresei
5. Atver `frontend/students.html` pārlūkprogrammā

## Izmantotās tehnoloģijas

- **Frontend:** HTML5, CSS3 (Grid, Flexbox, CSS mainīgie), Vanilla JavaScript (ES6+, Fetch API)
- **Backend:** PHP 8 (PDO, REST API, sagatavoti priekšraksti)
- **Datubāze:** MySQL ar InnoDB dzinēju, ārējās atslēgas, UTF-8

## Drošība

- Visi datubāzes vaicājumi izmanto **sagatavotus priekšrakstus** (prepared statements) — aizsardzība pret SQL injekcijām
- **Ievades sanitizācija** serverī (`htmlspecialchars`, `filter_var`) — aizsardzība pret XSS
- **ID validācija** — tikai pozitīvi veseli skaitļi tiek pieņemti kā derīgi ID
- **CORS galvenes** — kontrolēta piekļuve no atļautiem domēniem
- **Drošības HTTP galvenes** — `X-Content-Type-Options`, `X-Frame-Options`, `Cache-Control`
- **Telefona formāta validācija** — serverī pārbauda vecāka tālruņa formātu
- Klientā tiek veikta papildu validācija pirms nosūtīšanas

## Paziņojumu sistēma

Lietotne izmanto 4 paziņojumu tipus (fails `notify.js`):
- `success` — veiksmīgas darbības (piem., skolēns pievienots)
- `error` — kļūdas (piem., neizdevās ielādēt datus)
- `warning` — brīdinājumi (piem., aizpildi visus laukus)
- `info` — informatīvi paziņojumi (piem., ielādē datus...)
