561 lines
17 KiB
Markdown
561 lines
17 KiB
Markdown
# 🧘♀️ Pilates Platform
|
|
|
|
Piattaforma completa per vendere videolezioni e lezioni live di Pilates. Sviluppata in PHP puro con design minimale bianco e celeste.
|
|
|
|
## 📋 Caratteristiche Principali
|
|
|
|
### Area Pubblica
|
|
- **Homepage** con lezioni demo gratuite
|
|
- **Sistema di autenticazione** completo (login, registrazione)
|
|
- **Recupero password** con token sicuro e scadenza temporale
|
|
- **Reset password** via email con link univoco
|
|
- **Visualizzazione lezioni** con integrazione video (YouTube, Vimeo, locale)
|
|
- **Pagamento sicuro** tramite PayPal
|
|
|
|
### Area Utente
|
|
- **Dashboard personale** con lezioni acquistate
|
|
- **Catalogo completo** con filtri per tipo e livello
|
|
- **Gestione profilo** (dati personali e cambio password)
|
|
- **Accesso illimitato** alle lezioni acquistate
|
|
|
|
### Area Amministratore
|
|
- **Dashboard** con statistiche in tempo reale (utenti, lezioni, acquisti, revenue)
|
|
- **Gestione lezioni** (crea, modifica, elimina, attiva/disattiva)
|
|
- **Modifica lezioni** con form completo per videolezioni e lezioni live
|
|
- **Gestione utenti** (visualizza, blocca/sblocca, statistiche acquisti)
|
|
- **Storico acquisti** con dettagli pagamenti PayPal e grafici
|
|
- **Report e analisi** vendite con totali formattati
|
|
|
|
### Funzionalità Tecniche
|
|
- ✅ **Sicurezza**: Password crittografate con bcrypt (PHP 8.1+ compatibile)
|
|
- ✅ **Database**: MySQL con PDO per prevenire SQL injection
|
|
- ✅ **Sessioni**: Gestione sicura con timeout automatico (30 minuti)
|
|
- ✅ **Reset password**: Token sicuri con scadenza 1 ora
|
|
- ✅ **Responsive**: Design mobile-first con CSS moderno
|
|
- ✅ **Codice commentato**: Ogni funzione è documentata per facilità di manutenzione
|
|
- ✅ **Log attività**: Tracciamento delle azioni importanti
|
|
- ✅ **Soft delete**: I dati eliminati non sono rimossi definitivamente
|
|
- ✅ **Gestione errori**: Controllo null values per compatibilità PHP 8.1+
|
|
- ✅ **Flash messages**: Sistema di messaggi temporanei per feedback utente
|
|
|
|
---
|
|
|
|
## 🚀 Installazione
|
|
|
|
### Requisiti
|
|
- **PHP** 7.4 o superiore
|
|
- **MySQL** 5.7 o superiore (o MariaDB 10.3+)
|
|
- **Web Server** (Apache, Nginx, o PHP built-in server per sviluppo)
|
|
- **Account PayPal** Sandbox (per test) o Business (per produzione)
|
|
|
|
### Passo 1: Copia i File
|
|
```bash
|
|
# Copia tutti i file nella cartella del tuo web server
|
|
# Esempio per XAMPP/WAMP:
|
|
C:\xampp\htdocs\pilates-platform\
|
|
|
|
# Esempio per Linux:
|
|
/var/www/html/pilates-platform/
|
|
```
|
|
|
|
### Passo 2: Crea il Database
|
|
1. Apri phpMyAdmin (o il tuo client MySQL preferito)
|
|
2. Esegui lo script `database/schema.sql`
|
|
3. Questo creerà:
|
|
- Il database `pilates_platform` (con underscore, non trattino!)
|
|
- Tutte le tabelle necessarie (users, lessons, purchases, activity_log)
|
|
- Un utente amministratore di default
|
|
- Alcune lezioni demo di esempio
|
|
- Campi per reset password (reset_token, reset_expires)
|
|
|
|
**Credenziali Admin di Default:**
|
|
- Email: `admin@pilatesstudio.com`
|
|
- Password: `admin123`
|
|
- ⚠️ **IMPORTANTE**: Cambia questa password subito dopo il primo accesso!
|
|
|
|
**Se hai problemi con la password admin:**
|
|
1. Esegui lo script `database/reset_admin_password.sql` in phpMyAdmin
|
|
2. Oppure usa `test_password.php` per verificare l'hash della password
|
|
3. La password verrà reimpostata a `admin123`
|
|
|
|
### Passo 3: Configura l'Applicazione
|
|
Apri il file `includes/config.php` e modifica:
|
|
|
|
#### Database
|
|
```php
|
|
define('DB_HOST', 'localhost'); // Host del database
|
|
define('DB_NAME', 'pilates_platform'); // Nome database (usa underscore!)
|
|
define('DB_USER', 'root'); // Username (es: root per localhost)
|
|
define('DB_PASS', ''); // Password database
|
|
```
|
|
|
|
#### Sito
|
|
```php
|
|
define('SITE_URL', 'http://localhost/pilates-platform'); // URL del sito
|
|
define('ADMIN_EMAIL', 'tua-email@esempio.com'); // Tua email
|
|
```
|
|
|
|
#### Sicurezza
|
|
```php
|
|
// Genera una chiave casuale sicura (es: usando password_hash)
|
|
define('SECRET_KEY', 'CAMBIA-QUESTA-CHIAVE-CON-STRINGA-CASUALE-LUNGA-E-SICURA');
|
|
```
|
|
|
|
#### PayPal Sandbox (per Test)
|
|
1. Vai su [PayPal Developer](https://developer.paypal.com/)
|
|
2. Accedi con il tuo account PayPal
|
|
3. Vai su "My Apps & Credentials"
|
|
4. Crea un'app nella sezione Sandbox
|
|
5. Copia Client ID e Secret
|
|
|
|
```php
|
|
define('PAYPAL_SANDBOX', true); // true per test, false per produzione
|
|
define('PAYPAL_CLIENT_ID', 'il-tuo-client-id-sandbox');
|
|
define('PAYPAL_SECRET', 'il-tuo-secret-sandbox');
|
|
```
|
|
|
|
### Passo 4: Configura i Permessi (Linux/Mac)
|
|
```bash
|
|
# Rendi scrivibile la cartella uploads e sottocartelle
|
|
chmod -R 755 uploads/
|
|
chmod -R 755 uploads/lessons/demo/
|
|
chmod -R 755 uploads/lessons/pay/
|
|
chmod -R 755 uploads/images/
|
|
```
|
|
|
|
### Passo 5: Avvia il Server
|
|
#### Con PHP Built-in (per sviluppo)
|
|
```bash
|
|
cd pilates-platform
|
|
php -S localhost:8000
|
|
```
|
|
Poi apri: `http://localhost:8000`
|
|
|
|
#### Con XAMPP/WAMP
|
|
1. Avvia Apache e MySQL
|
|
2. Apri: `http://localhost/pilates-platform`
|
|
|
|
---
|
|
|
|
## 📖 Guida all'Uso
|
|
|
|
### Per Amministratori
|
|
|
|
#### Primo Accesso
|
|
1. Vai su `http://tuo-sito/login.php`
|
|
2. Accedi con le credenziali di default
|
|
3. Vai su "Area Admin" → "Profilo" e cambia la password
|
|
|
|
#### Creare una Nuova Lezione
|
|
1. **Area Admin** → **Gestione Lezioni** → **Nuova Lezione**
|
|
2. Compila i campi:
|
|
- **Titolo**: Nome della lezione
|
|
- **Descrizione**: Descrizione dettagliata
|
|
- **Tipo**: Scegli Video o Live
|
|
- **Per Video**:
|
|
- Piattaforma: Local, YouTube, Vimeo, o S3
|
|
- URL Video: Link al video
|
|
- Durata: Minuti
|
|
- **Per Live**:
|
|
- Piattaforma: Zoom, Google Meet, ecc.
|
|
- Link: URL della sessione
|
|
- Data e Ora: Quando si terrà
|
|
- **Livello**: Principiante, Intermedio, Avanzato
|
|
- **Categoria**: Es. Mat Work, Reformer, Stretching
|
|
- **Prezzo**: In euro
|
|
- **Opzioni**:
|
|
- ✓ Lezione Demo (gratuita per tutti)
|
|
- ✓ Lezione Attiva (visibile agli utenti)
|
|
3. Clicca **Crea Lezione**
|
|
|
|
#### Gestire gli Utenti
|
|
1. **Area Admin** → **Gestione Utenti**
|
|
2. Puoi vedere:
|
|
- Tutti gli utenti registrati
|
|
- Numero acquisti per utente
|
|
- Totale speso
|
|
- Data ultimo accesso
|
|
3. Azioni disponibili:
|
|
- **Blocca/Sblocca**: Disabilita temporaneamente un account
|
|
|
|
#### Visualizzare le Statistiche
|
|
La **Dashboard** mostra:
|
|
- 📊 Utenti registrati
|
|
- 🎥 Lezioni totali
|
|
- 💰 Acquisti completati
|
|
- 💵 Guadagni totali
|
|
- 📈 Lezioni più vendute
|
|
- 📋 Ultimi acquisti
|
|
|
|
### Per Utenti
|
|
|
|
#### Registrazione
|
|
1. Vai su `http://tuo-sito/register.php`
|
|
2. Compila il form con:
|
|
- Nome e Cognome
|
|
- Email
|
|
- Password (min 6 caratteri)
|
|
3. Verrai automaticamente loggato
|
|
|
|
#### Navigare il Catalogo
|
|
1. **Dashboard Utente** → **Catalogo**
|
|
2. Usa i filtri per:
|
|
- Tipo (Video/Live)
|
|
- Livello (Principiante/Intermedio/Avanzato)
|
|
3. Clicca su una lezione per vedere i dettagli
|
|
|
|
#### Acquistare una Lezione
|
|
1. Apri una lezione dal catalogo
|
|
2. Se non è demo, vedrai il prezzo
|
|
3. Clicca sul pulsante PayPal
|
|
4. Completa il pagamento
|
|
5. La lezione apparirà in "Le Mie Lezioni"
|
|
|
|
#### Guardare una Lezione
|
|
1. **Dashboard** → **Le Mie Lezioni**
|
|
2. Clicca su **Guarda** (per video) o **Partecipa** (per live)
|
|
3. Accesso illimitato per sempre!
|
|
|
|
#### Modificare il Profilo
|
|
1. **Dashboard** → **Profilo**
|
|
2. Puoi cambiare:
|
|
- Nome e Cognome
|
|
- Email
|
|
- Telefono
|
|
- Password
|
|
|
|
#### Recuperare la Password
|
|
1. Vai su `login.php`
|
|
2. Clicca su "Password dimenticata?"
|
|
3. Inserisci la tua email
|
|
4. Riceverai un link valido per 1 ora
|
|
5. Clicca sul link e imposta una nuova password
|
|
6. Accedi con le nuove credenziali
|
|
|
|
---
|
|
|
|
## 🎨 Personalizzazione
|
|
|
|
### Colori
|
|
Apri `assets/css/style.css` e modifica le variabili CSS:
|
|
|
|
```css
|
|
:root {
|
|
--primary-color: #4A90E2; /* Celeste principale */
|
|
--primary-light: #7AB8F5; /* Celeste chiaro */
|
|
--primary-dark: #357ABD; /* Celeste scuro */
|
|
--secondary-color: #E8F4F8; /* Celeste molto chiaro */
|
|
}
|
|
```
|
|
|
|
### Logo e Foto Istruttrice ⭐ **AGGIORNATO**
|
|
1. **Logo**: Carica `logo.png` in `uploads/images/`
|
|
- Dimensioni consigliate: 200x60px
|
|
- Formato: PNG con sfondo trasparente
|
|
- Il logo viene mostrato automaticamente nell'header se presente
|
|
|
|
2. **Foto Istruttrice**: Carica `instructor.jpg` in `uploads/images/`
|
|
- Dimensioni consigliate: 400x400px
|
|
- Formato: JPG o PNG
|
|
- Viene mostrata nella sezione "Chi Sono" della homepage
|
|
|
|
3. **Hero Image**: Carica `hero-bg.jpg` in `uploads/images/`
|
|
- Dimensioni: 1920x600px
|
|
- Immagine di sfondo homepage
|
|
|
|
### Email
|
|
Per usare SMTP invece di `mail()` PHP, decomenta in `includes/config.php`:
|
|
```php
|
|
define('SMTP_HOST', 'smtp.gmail.com');
|
|
define('SMTP_PORT', 587);
|
|
define('SMTP_USERNAME', 'tua-email@gmail.com');
|
|
define('SMTP_PASSWORD', 'tua-app-password');
|
|
define('SMTP_ENCRYPTION', 'tls');
|
|
```
|
|
|
|
---
|
|
|
|
## 🎥 Hosting Video
|
|
|
|
### Opzione 1: File Locali (Upload Diretto) ⭐ **NUOVO**
|
|
1. Nella creazione/modifica lezione, seleziona **File Locale**
|
|
2. Clicca su "Scegli file" e seleziona il video dal tuo PC
|
|
3. Il sistema carica automaticamente il file in:
|
|
- `uploads/lessons/demo/` per lezioni gratuite
|
|
- `uploads/lessons/pay/` per lezioni a pagamento
|
|
4. Formati supportati: MP4, WebM, OGG, MOV
|
|
5. ✅ **Vantaggi**: Upload automatico, nessun inserimento manuale del path
|
|
6. ⚠️ Limiti: Dimensione massima upload dipende da `php.ini` (default ~2MB)
|
|
|
|
**Per aumentare il limite di upload:**
|
|
Modifica `php.ini`:
|
|
```ini
|
|
upload_max_filesize = 500M
|
|
post_max_size = 500M
|
|
max_execution_time = 300
|
|
```
|
|
|
|
### Opzione 2: YouTube (Consigliato per Video Grandi)
|
|
1. Carica video su YouTube come **Non in elenco**
|
|
2. Copia l'URL (es: `https://youtube.com/watch?v=ABC123`)
|
|
3. Quando crei la lezione:
|
|
- Piattaforma: YouTube
|
|
- URL: Incolla il link
|
|
|
|
### Opzione 3: Vimeo
|
|
1. Carica su Vimeo
|
|
2. Imposta privacy su "Nascosto"
|
|
3. Copia URL e usa come YouTube
|
|
|
|
### Opzione 4: AWS S3 (Professionale)
|
|
Per grandi quantità di video, usa Amazon S3:
|
|
1. Crea un bucket S3
|
|
2. Configura in `includes/config.php`:
|
|
```php
|
|
define('AWS_ACCESS_KEY', 'tua-key');
|
|
define('AWS_SECRET_KEY', 'tua-secret');
|
|
define('AWS_REGION', 'eu-west-1');
|
|
define('AWS_BUCKET', 'pilates-videos');
|
|
```
|
|
3. Carica video su S3
|
|
4. Usa URL S3 nelle lezioni
|
|
|
|
---
|
|
|
|
## 💳 Configurare PayPal
|
|
|
|
### Modalità Test (Sandbox)
|
|
1. Vai su [developer.paypal.com](https://developer.paypal.com)
|
|
2. Crea un'app Sandbox
|
|
3. Copia Client ID e Secret in `config.php`
|
|
4. Usa gli account test per simulare pagamenti
|
|
|
|
### Modalità Produzione (Reale)
|
|
1. Vai su [paypal.com/businessmanage](https://www.paypal.com/businessmanage)
|
|
2. Crea app Live
|
|
3. Copia credenziali Live
|
|
4. In `config.php`:
|
|
```php
|
|
define('PAYPAL_SANDBOX', false); // Passa a false!
|
|
define('PAYPAL_LIVE_CLIENT_ID', 'tuo-client-id-live');
|
|
define('PAYPAL_LIVE_SECRET', 'tuo-secret-live');
|
|
```
|
|
|
|
---
|
|
|
|
## 🔒 Sicurezza
|
|
|
|
### Checklist Produzione
|
|
Prima di mettere online:
|
|
|
|
- [ ] Cambia password admin di default
|
|
- [ ] Cambia `SECRET_KEY` in `config.php`
|
|
- [ ] Imposta `DEBUG_MODE` a `false`
|
|
- [ ] Usa HTTPS (certificato SSL)
|
|
- [ ] Limita permessi cartelle (755 per cartelle, 644 per file)
|
|
- [ ] Backup regolari del database
|
|
- [ ] Configura SMTP per email
|
|
- [ ] Testa tutti i flussi di pagamento
|
|
- [ ] Verifica che `includes/config.php` NON sia accessibile via web
|
|
|
|
### File .htaccess (per Apache)
|
|
Crea `.htaccess` nella cartella `includes/`:
|
|
```apache
|
|
# Nega accesso a config.php
|
|
<Files "config.php">
|
|
Require all denied
|
|
</Files>
|
|
```
|
|
|
|
---
|
|
|
|
## 🛠️ Risoluzione Problemi
|
|
|
|
### Errore: "Errore connessione database"
|
|
- Verifica che MySQL sia avviato
|
|
- Controlla credenziali in `config.php`
|
|
- Assicurati che il database `pilates_platform` esista (NON pilates-platform)
|
|
- MySQL non accetta trattini nei nomi database, usa underscore
|
|
|
|
### Le email non vengono inviate
|
|
- Configura SMTP in `config.php`
|
|
- Verifica che `mail()` PHP funzioni sul tuo server
|
|
- Controlla la cartella spam
|
|
|
|
### I video non si vedono
|
|
- Verifica che l'URL sia corretto
|
|
- Per YouTube/Vimeo: usa URL diretti al video
|
|
- Per file locali caricati: controlla che esistano in `uploads/lessons/demo/` o `pay/`
|
|
- Verifica permessi cartella uploads (755)
|
|
- Per video grandi, verifica limiti upload in `php.ini`
|
|
|
|
### Errore durante upload video
|
|
- Controlla `upload_max_filesize` e `post_max_size` in `php.ini`
|
|
- Verifica che la cartella `uploads/lessons/` sia scrivibile
|
|
- Assicurati che il formato sia supportato (MP4, WebM, OGG, MOV)
|
|
|
|
### PayPal non funziona
|
|
- Verifica Client ID e Secret
|
|
- In test, usa modalità Sandbox
|
|
- Controlla console browser per errori JavaScript
|
|
|
|
### La pagina è bianca / Errore 500
|
|
- Attiva `DEBUG_MODE` in `config.php`
|
|
- Controlla log errori PHP
|
|
- Verifica permessi file (644) e cartelle (755)
|
|
- Controlla percorsi `require_once` nei file (devono essere relativi corretti)
|
|
|
|
### Errore "Deprecated: Passing null to parameter"
|
|
- Questo è un warning di PHP 8.1+
|
|
- La piattaforma è già aggiornata per gestire valori null
|
|
- Se vedi ancora warning, verifica che tutti i file siano aggiornati
|
|
|
|
### Reset Password non funziona
|
|
- Verifica che le email vengano inviate correttamente
|
|
- Configura SMTP in `config.php` se `mail()` non funziona
|
|
- Il token scade dopo 1 ora per sicurezza
|
|
- Controlla che la tabella `users` abbia i campi `reset_token` e `reset_expires`
|
|
|
|
---
|
|
|
|
## 📁 Struttura File
|
|
|
|
```
|
|
pilates-platform/
|
|
│
|
|
├── admin/ # Area amministratore
|
|
│ ├── dashboard.php # Dashboard admin con statistiche
|
|
│ ├── lessons.php # Gestione lezioni (lista, elimina)
|
|
│ ├── lesson_create.php # Crea nuova lezione
|
|
│ ├── lesson_edit.php # Modifica lezione esistente
|
|
│ ├── users.php # Gestione utenti
|
|
│ └── purchases.php # Storico acquisti e revenue
|
|
│
|
|
├── assets/ # Risorse statiche
|
|
│ ├── css/
|
|
│ │ └── style.css # Stili principali
|
|
│ └── js/
|
|
│ └── main.js # JavaScript
|
|
│
|
|
├── database/
|
|
│ ├── schema.sql # Script creazione database
|
|
│ └── reset_admin_password.sql # Reset password admin
|
|
│
|
|
├── includes/ # File PHP condivisi
|
|
│ ├── config.php # Configurazione
|
|
│ ├── functions.php # Funzioni comuni
|
|
│ └── logout.php # Script logout
|
|
│
|
|
├── uploads/ # File caricati
|
|
│ ├── lessons/ # Video lezioni
|
|
│ │ ├── demo/ # Video lezioni gratuite
|
|
│ │ ├── pay/ # Video lezioni a pagamento
|
|
│ │ └── .htaccess # Protezione accesso diretto
|
|
│ ├── images/ # Logo e foto istruttrice
|
|
│ └── thumbnails/ # Anteprime lezioni (future)
|
|
│
|
|
├── user/ # Area utente
|
|
│ ├── dashboard.php # Dashboard utente
|
|
│ ├── catalog.php # Catalogo lezioni
|
|
│ └── profile.php # Profilo utente
|
|
│
|
|
├── index.php # Homepage pubblica
|
|
├── login.php # Login utenti e admin
|
|
├── register.php # Registrazione nuovi utenti
|
|
├── forgot_password.php # Recupero password (richiesta token)
|
|
├── reset_password.php # Reset password (con token)
|
|
├── lesson.php # Visualizza lezione e acquisto
|
|
├── process_payment.php # Elabora pagamento PayPal
|
|
├── test_password.php # Utility test hash password (debug)
|
|
└── README.md # Questo file
|
|
```
|
|
|
|
---
|
|
|
|
## 🎓 Concetti per Neofiti
|
|
|
|
### Cos'è PHP?
|
|
PHP è il linguaggio che "genera" le pagine HTML dinamicamente. Quando visiti `index.php`, il server:
|
|
1. Esegue il codice PHP
|
|
2. Genera l'HTML finale
|
|
3. Lo invia al browser
|
|
|
|
### Cos'è il Database?
|
|
MySQL è dove vengono salvati i dati:
|
|
- Utenti registrati
|
|
- Lezioni create
|
|
- Acquisti effettuati
|
|
|
|
### Come Funziona il Login?
|
|
1. Utente inserisce email e password
|
|
2. PHP cerca l'email nel database
|
|
3. Verifica la password (hashata)
|
|
4. Se corretta, crea una "sessione"
|
|
5. La sessione ricorda che sei loggato
|
|
|
|
### Come Funziona PayPal?
|
|
1. Utente clicca "Acquista"
|
|
2. Si apre popup PayPal
|
|
3. Utente paga
|
|
4. PayPal conferma il pagamento
|
|
5. `process_payment.php` registra l'acquisto nel DB
|
|
|
|
### Dove Modificare il Codice?
|
|
- **Aspetto grafico**: `assets/css/style.css`
|
|
- **Comportamento**: File `.php` specifici
|
|
- **Database**: Usa phpMyAdmin o client MySQL
|
|
- **Impostazioni**: `includes/config.php`
|
|
|
|
---
|
|
|
|
## 📞 Supporto e Manutenzione
|
|
|
|
### Backup Database
|
|
Esegui regolarmente (es: settimanalmente):
|
|
```bash
|
|
mysqldump -u root -p pilatesplatform > backup_$(date +%Y%m%d).sql
|
|
```
|
|
|
|
### Aggiornare PHP
|
|
Quando aggiorni PHP, testa la piattaforma in locale prima di aggiornare in produzione.
|
|
|
|
### Log Attività
|
|
La tabella `activity_log` traccia:
|
|
- Login/Logout
|
|
- Acquisti
|
|
- Modifiche importanti
|
|
|
|
Usa per debug e sicurezza.
|
|
|
|
---
|
|
|
|
## 📝 Licenza
|
|
|
|
Questo progetto è stato creato come piattaforma custom. Sei libero di modificarlo e usarlo come preferisci.
|
|
|
|
---
|
|
|
|
## ✅ Checklist Prossimi Passi
|
|
|
|
Dopo l'installazione:
|
|
- [ ] Cambia password admin (profilo o reset_admin_password.sql)
|
|
- [ ] Configura SMTP per invio email
|
|
- [ ] Testa recupero password
|
|
- [ ] Configura PayPal Sandbox
|
|
- [ ] Carica almeno 3 lezioni demo
|
|
- [ ] Testa registrazione utente
|
|
- [ ] Testa acquisto lezione (in sandbox)
|
|
- [ ] Testa modifica lezioni esistenti
|
|
- [ ] Personalizza colori e logo
|
|
- [ ] Configura backup automatici database
|
|
- [ ] Passa a produzione PayPal
|
|
- [ ] Attiva HTTPS (certificato SSL)
|
|
- [ ] Testa tutti i flussi su produzione
|
|
- [ ] Lancia! 🚀
|
|
|
|
---
|
|
|
|
**Buon lavoro con la tua piattaforma Pilates! 🧘♀️**
|
|
|
|
Per domande o problemi, verifica sempre i log errori PHP e la console browser.
|