🧘♀️ 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
# 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
- Apri phpMyAdmin (o il tuo client MySQL preferito)
- Esegui lo script
database/schema.sql - 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)
- Il database
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:
- Esegui lo script
database/reset_admin_password.sqlin phpMyAdmin - Oppure usa
test_password.phpper verificare l'hash della password - La password verrà reimpostata a
admin123
Passo 3: Configura l'Applicazione
Apri il file includes/config.php e modifica:
Database
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
define('SITE_URL', 'http://localhost/pilates-platform'); // URL del sito
define('ADMIN_EMAIL', 'tua-email@esempio.com'); // Tua email
Sicurezza
// 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)
- Vai su PayPal Developer
- Accedi con il tuo account PayPal
- Vai su "My Apps & Credentials"
- Crea un'app nella sezione Sandbox
- Copia Client ID e Secret
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)
# 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)
cd pilates-platform
php -S localhost:8000
Poi apri: http://localhost:8000
Con XAMPP/WAMP
- Avvia Apache e MySQL
- Apri:
http://localhost/pilates-platform
📖 Guida all'Uso
Per Amministratori
Primo Accesso
- Vai su
http://tuo-sito/login.php - Accedi con le credenziali di default
- Vai su "Area Admin" → "Profilo" e cambia la password
Creare una Nuova Lezione
- Area Admin → Gestione Lezioni → Nuova Lezione
- 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)
- Clicca Crea Lezione
Gestire gli Utenti
- Area Admin → Gestione Utenti
- Puoi vedere:
- Tutti gli utenti registrati
- Numero acquisti per utente
- Totale speso
- Data ultimo accesso
- 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
- Vai su
http://tuo-sito/register.php - Compila il form con:
- Nome e Cognome
- Password (min 6 caratteri)
- Verrai automaticamente loggato
Navigare il Catalogo
- Dashboard Utente → Catalogo
- Usa i filtri per:
- Tipo (Video/Live)
- Livello (Principiante/Intermedio/Avanzato)
- Clicca su una lezione per vedere i dettagli
Acquistare una Lezione
- Apri una lezione dal catalogo
- Se non è demo, vedrai il prezzo
- Clicca sul pulsante PayPal
- Completa il pagamento
- La lezione apparirà in "Le Mie Lezioni"
Guardare una Lezione
- Dashboard → Le Mie Lezioni
- Clicca su Guarda (per video) o Partecipa (per live)
- Accesso illimitato per sempre!
Modificare il Profilo
- Dashboard → Profilo
- Puoi cambiare:
- Nome e Cognome
- Telefono
- Password
Recuperare la Password
- Vai su
login.php - Clicca su "Password dimenticata?"
- Inserisci la tua email
- Riceverai un link valido per 1 ora
- Clicca sul link e imposta una nuova password
- Accedi con le nuove credenziali
🎨 Personalizzazione
Colori
Apri assets/css/style.css e modifica le variabili 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
-
Logo: Carica
logo.pnginuploads/images/- Dimensioni consigliate: 200x60px
- Formato: PNG con sfondo trasparente
- Il logo viene mostrato automaticamente nell'header se presente
-
Foto Istruttrice: Carica
instructor.jpginuploads/images/- Dimensioni consigliate: 400x400px
- Formato: JPG o PNG
- Viene mostrata nella sezione "Chi Sono" della homepage
-
Hero Image: Carica
hero-bg.jpginuploads/images/- Dimensioni: 1920x600px
- Immagine di sfondo homepage
Per usare SMTP invece di mail() PHP, decomenta in includes/config.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
- Nella creazione/modifica lezione, seleziona File Locale
- Clicca su "Scegli file" e seleziona il video dal tuo PC
- Il sistema carica automaticamente il file in:
uploads/lessons/demo/per lezioni gratuiteuploads/lessons/pay/per lezioni a pagamento
- Formati supportati: MP4, WebM, OGG, MOV
- ✅ Vantaggi: Upload automatico, nessun inserimento manuale del path
- ⚠️ Limiti: Dimensione massima upload dipende da
php.ini(default ~2MB)
Per aumentare il limite di upload:
Modifica php.ini:
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 300
Opzione 2: YouTube (Consigliato per Video Grandi)
- Carica video su YouTube come Non in elenco
- Copia l'URL (es:
https://youtube.com/watch?v=ABC123) - Quando crei la lezione:
- Piattaforma: YouTube
- URL: Incolla il link
Opzione 3: Vimeo
- Carica su Vimeo
- Imposta privacy su "Nascosto"
- Copia URL e usa come YouTube
Opzione 4: AWS S3 (Professionale)
Per grandi quantità di video, usa Amazon S3:
- Crea un bucket S3
- Configura in
includes/config.php:
define('AWS_ACCESS_KEY', 'tua-key');
define('AWS_SECRET_KEY', 'tua-secret');
define('AWS_REGION', 'eu-west-1');
define('AWS_BUCKET', 'pilates-videos');
- Carica video su S3
- Usa URL S3 nelle lezioni
💳 Configurare PayPal
Modalità Test (Sandbox)
- Vai su developer.paypal.com
- Crea un'app Sandbox
- Copia Client ID e Secret in
config.php - Usa gli account test per simulare pagamenti
Modalità Produzione (Reale)
- Vai su paypal.com/businessmanage
- Crea app Live
- Copia credenziali Live
- In
config.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_KEYinconfig.php - Imposta
DEBUG_MODEafalse - 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.phpNON sia accessibile via web
File .htaccess (per Apache)
Crea .htaccess nella cartella includes/:
# 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_platformesista (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/opay/ - Verifica permessi cartella uploads (755)
- Per video grandi, verifica limiti upload in
php.ini
Errore durante upload video
- Controlla
upload_max_filesizeepost_max_sizeinphp.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_MODEinconfig.php - Controlla log errori PHP
- Verifica permessi file (644) e cartelle (755)
- Controlla percorsi
require_oncenei 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.phpsemail()non funziona - Il token scade dopo 1 ora per sicurezza
- Controlla che la tabella
usersabbia i campireset_tokenereset_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:
- Esegue il codice PHP
- Genera l'HTML finale
- Lo invia al browser
Cos'è il Database?
MySQL è dove vengono salvati i dati:
- Utenti registrati
- Lezioni create
- Acquisti effettuati
Come Funziona il Login?
- Utente inserisce email e password
- PHP cerca l'email nel database
- Verifica la password (hashata)
- Se corretta, crea una "sessione"
- La sessione ricorda che sei loggato
Come Funziona PayPal?
- Utente clicca "Acquista"
- Si apre popup PayPal
- Utente paga
- PayPal conferma il pagamento
process_payment.phpregistra l'acquisto nel DB
Dove Modificare il Codice?
- Aspetto grafico:
assets/css/style.css - Comportamento: File
.phpspecifici - Database: Usa phpMyAdmin o client MySQL
- Impostazioni:
includes/config.php
📞 Supporto e Manutenzione
Backup Database
Esegui regolarmente (es: settimanalmente):
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.