Francesco Picone d6db4960ab fix contacts
2025-12-09 16:23:34 +01:00
fix
2025-12-09 16:19:42 +01:00
fix
2025-12-06 18:34:12 +01:00
fix
2025-12-06 17:20:22 +01:00
2025-12-09 16:23:34 +01:00
2025-12-06 17:53:12 +01:00
2025-12-06 17:53:12 +01:00
fix
2025-12-06 18:50:57 +01:00
fix
2025-12-06 18:50:57 +01:00
2025-12-09 15:43:00 +01:00
2025-12-06 17:53:12 +01:00
2025-12-09 15:43:00 +01:00
2025-12-06 17:53:12 +01:00
2025-12-06 17:53:12 +01:00
fix
2025-12-03 18:35:21 +01:00
fix
2025-12-06 18:50:57 +01:00
2025-12-06 17:53:12 +01:00
2025-12-06 17:53:12 +01:00
2025-12-06 18:06:42 +01:00
fix
2025-12-06 17:20:22 +01:00

🧘‍♀️ 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
  • Form contatti per richiesta lezioni live personalizzate
  • Informazioni contatto (email, telefono, WhatsApp opzionali)
  • 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

  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

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');          // Riceve richieste contatti

// Contatti opzionali (mostrati nella homepage)
define('CONTACT_PHONE', '+39 123 456 7890');             // Telefono (lascia vuoto per nascondere)
define('CONTACT_WHATSAPP', '+39 123 456 7890');          // WhatsApp (lascia vuoto per nascondere)

Sicurezza

// Genera una chiave casuale sicura (es: usando password_hash)
define('SECRET_KEY', 'CAMBIA-QUESTA-CHIAVE-CON-STRINGA-CASUALE-LUNGA-E-SICURA');

Email SMTP con Gmail IMPORTANTE

Per inviare email (recupero password), configura Gmail SMTP:

  1. Abilita verifica 2 fattori sul tuo account Gmail
  2. Vai su Password per le app
  3. Seleziona "App: Posta" e "Dispositivo: Altro (nome personalizzato)"
  4. Inserisci "Pilates Platform" e clicca Genera
  5. Copia la password di 16 caratteri generata

In includes/config.php:

define('USE_SMTP', true); // Attiva SMTP
define('SMTP_HOST', 'smtp.gmail.com');
define('SMTP_PORT', 587);
define('SMTP_USERNAME', 'tua-email@gmail.com'); // La tua Gmail
define('SMTP_PASSWORD', 'abcd efgh ijkl mnop'); // Password app (16 caratteri)
define('SMTP_ENCRYPTION', 'tls');

⚠️ Non usare la password normale di Gmail, usa solo la password applicazione!

PayPal Sandbox (per Test)

  1. Vai su PayPal Developer
  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
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: Installa getID3 (Opzionale - per durata video automatica)

La piattaforma può estrarre automaticamente la durata dei video caricati usando getID3.

Metodo 1: Con Composer (raccomandato)

composer install

Metodo 2: Script Automatico

# Linux/Mac
bash install_getid3.sh

# Windows PowerShell
.\install_getid3.ps1

Metodo 3: Manuale

  1. Scarica getID3 da GitHub
  2. Estrai in vendor/getid3/getid3/
  3. Verifica che esista il file vendor/getid3/getid3/getid3.php

Nota: Se getID3 non è disponibile, la piattaforma proverà ad usare ffmpeg/ffprobe. Se anche questi non sono disponibili, dovrai inserire manualmente la durata.

Passo 5: 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/

Nota: Le cartelle demo/ e pay/ vengono create automaticamente all'upload se non esistono.

Passo 6: Avvia il Server

Con PHP Built-in (per sviluppo)

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 AdminGestione LezioniNuova 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 AdminGestione 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
  1. Dashboard UtenteCatalogo
  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. DashboardLe Mie Lezioni
  2. Clicca su Guarda (per video) o Partecipa (per live)
  3. Accesso illimitato per sempre!

Modificare il Profilo

  1. DashboardProfilo
  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:

: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 con Gmail SMTP

La piattaforma usa Gmail SMTP per inviare email in modo affidabile:

  1. Configurato di default in includes/config.php
  2. Inserisci le tue credenziali Gmail
  3. Usa Password per le app (non la password Gmail normale)
  4. Testa inviando una richiesta di reset password

Per disattivare SMTP e usare mail() PHP:

define('USE_SMTP', false); // In config.php

🎥 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:

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:
define('AWS_ACCESS_KEY', 'tua-key');
define('AWS_SECRET_KEY', 'tua-secret');
define('AWS_REGION', 'eu-west-1');
define('AWS_BUCKET', 'pilates-videos');
  1. Carica video su S3
  2. Usa URL S3 nelle lezioni

💳 Configurare PayPal

Modalità Test (Sandbox)

  1. Vai su 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
  2. Crea app Live
  3. Copia credenziali Live
  4. 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_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/:

# 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

  • Verifica credenziali Gmail in config.php (SMTP_USERNAME e SMTP_PASSWORD)
  • Usa Password per le app Gmail (non la password normale)
  • Verifica che USE_SMTP sia true
  • Controlla la cartella spam del destinatario
  • Verifica log errori PHP per messaggi "SMTP Error"
  • Assicurati che il server permetta connessioni SMTP in uscita (porta 587)

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)
  • Le cartelle demo/ e pay/ vengono create automaticamente se non esistono

La durata video non viene rilevata

  • Installa getID3 per estrazione automatica durata:
    • Con Composer: composer install
    • Manualmente (Linux/Mac): bash install_getid3.sh
    • Manualmente (Windows): .\install_getid3.ps1
  • Oppure usa ffmpeg/ffprobe (già installato sulla maggior parte dei server)
  • Se non disponibile, inserisci manualmente la durata nel form

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 con form contatti
├── contact.php               # Gestione form richiesta lezioni live
├── 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)
├── test_email.php            # Utility test invio email SMTP (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):

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 Gmail SMTP (obbligatorio per recupero password)
  • Genera password applicazione Gmail
  • Inserisci credenziali SMTP in config.php
  • 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.

Description
No description provided
Readme 140 KiB
Languages
PHP 90.2%
CSS 6.8%
Python 2.3%
JavaScript 0.7%