fix contact

This commit is contained in:
Francesco Picone
2025-12-06 18:19:53 +01:00
parent 7192a247f9
commit 1f48a3a2a5
5 changed files with 341 additions and 2 deletions

View File

@@ -6,6 +6,8 @@ Piattaforma completa per vendere videolezioni e lezioni live di Pilates. Svilupp
### 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
@@ -92,7 +94,11 @@ 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
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
@@ -486,7 +492,8 @@ pilates-platform/
│ ├── catalog.php # Catalogo lezioni
│ └── profile.php # Profilo utente
├── index.php # Homepage pubblica
├── 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)
@@ -494,6 +501,7 @@ pilates-platform/
├── 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
```

View File

@@ -676,6 +676,101 @@ select.form-control {
margin-top: var(--spacing-md);
}
/* ============================================
SEZIONE CONTATTI
============================================ */
.contact-section {
padding: var(--spacing-2xl) 0;
background: var(--white);
}
.contact-content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--spacing-2xl);
align-items: start;
}
.contact-text h2 {
margin-bottom: var(--spacing-md);
}
.contact-text p {
color: var(--gray-700);
font-size: 1.1rem;
margin-bottom: var(--spacing-xl);
}
.contact-info {
display: flex;
flex-direction: column;
gap: var(--spacing-lg);
}
.contact-item {
display: flex;
align-items: center;
gap: var(--spacing-md);
padding: var(--spacing-md);
background: var(--secondary-color);
border-radius: var(--radius-md);
transition: all var(--transition-base);
}
.contact-item:hover {
background: var(--primary-light);
transform: translateX(5px);
}
.contact-icon {
font-size: 2rem;
flex-shrink: 0;
}
.contact-item div {
flex: 1;
}
.contact-item strong {
display: block;
color: var(--primary-color);
margin-bottom: 0.25rem;
font-size: 0.875rem;
}
.contact-item a {
color: var(--gray-800);
text-decoration: none;
font-weight: 500;
}
.contact-item a:hover {
color: var(--primary-color);
}
.contact-form-wrapper {
background: var(--gray-100);
padding: var(--spacing-xl);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-md);
}
.contact-form h3 {
color: var(--primary-color);
margin-bottom: var(--spacing-lg);
text-align: center;
}
.contact-form .form-group {
margin-bottom: var(--spacing-md);
}
.contact-form textarea {
resize: vertical;
min-height: 120px;
}
/* ============================================
RESPONSIVE
============================================ */
@@ -750,6 +845,16 @@ select.form-control {
max-width: 300px;
}
/* Sezione contatti */
.contact-content {
grid-template-columns: 1fr;
gap: var(--spacing-xl);
}
.contact-form-wrapper {
padding: var(--spacing-lg);
}
/* Tabelle responsive */
.table-container {
overflow-x: auto;

161
contact.php Normal file
View File

@@ -0,0 +1,161 @@
<?php
/**
* Gestione Form Contatti
*
* Riceve le richieste di contatto per lezioni live e invia email all'admin
*/
require_once 'includes/config.php';
require_once 'includes/functions.php';
session_start();
// Verifica che sia una richiesta POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header('Location: index.php');
exit;
}
// Recupera e sanitizza i dati
$name = sanitize_input($_POST['name'] ?? '');
$email = sanitize_input($_POST['email'] ?? '');
$phone = sanitize_input($_POST['phone'] ?? '');
$message = sanitize_input($_POST['message'] ?? '');
// Validazione
$errors = [];
if (empty($name)) {
$errors[] = 'Il nome è obbligatorio';
}
if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'Email non valida';
}
if (empty($message)) {
$errors[] = 'Il messaggio è obbligatorio';
}
// Se ci sono errori, torna indietro
if (!empty($errors)) {
set_flash_message('error', implode('. ', $errors));
header('Location: index.php#contact');
exit;
}
// Prepara email per l'amministratore
$subject = "Nuova Richiesta Lezione Live - " . SITE_NAME;
$email_body = "
<html>
<head>
<style>
body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
.container { max-width: 600px; margin: 0 auto; padding: 20px; background: #f8f9fa; }
.header { background: #4A90E2; color: white; padding: 20px; text-align: center; border-radius: 8px 8px 0 0; }
.content { background: white; padding: 20px; border-radius: 0 0 8px 8px; }
.info-row { margin: 15px 0; padding: 10px; background: #e8f4f8; border-left: 4px solid #4A90E2; }
.label { font-weight: bold; color: #4A90E2; }
.message-box { background: #f8f9fa; padding: 15px; border-radius: 4px; margin-top: 15px; }
.footer { text-align: center; margin-top: 20px; color: #666; font-size: 12px; }
</style>
</head>
<body>
<div class='container'>
<div class='header'>
<h2 style='margin: 0;'>📅 Nuova Richiesta Lezione Live</h2>
</div>
<div class='content'>
<p>Hai ricevuto una nuova richiesta di contatto per una lezione live:</p>
<div class='info-row'>
<span class='label'>👤 Nome:</span> " . htmlspecialchars($name) . "
</div>
<div class='info-row'>
<span class='label'>📧 Email:</span> <a href='mailto:" . htmlspecialchars($email) . "'>" . htmlspecialchars($email) . "</a>
</div>
" . (!empty($phone) ? "
<div class='info-row'>
<span class='label'>📱 Telefono:</span> <a href='tel:" . htmlspecialchars($phone) . "'>" . htmlspecialchars($phone) . "</a>
</div>
" : "") . "
<div class='message-box'>
<p class='label'>💬 Messaggio:</p>
<p>" . nl2br(htmlspecialchars($message)) . "</p>
</div>
<p style='margin-top: 20px; padding-top: 20px; border-top: 1px solid #e0e0e0;'>
<strong>Azioni suggerite:</strong><br>
• Rispondi direttamente via email<br>
" . (!empty($phone) ? "• Contatta telefonicamente al numero indicato<br>" : "") . "
• Verifica disponibilità sul calendario
</p>
</div>
<div class='footer'>
Inviato automaticamente da " . SITE_NAME . "<br>
" . date('d/m/Y H:i') . "
</div>
</div>
</body>
</html>
";
// Invia email all'amministratore
if (send_email(ADMIN_EMAIL, $subject, $email_body)) {
// Email di conferma al mittente (opzionale)
$confirm_subject = "Richiesta Ricevuta - " . SITE_NAME;
$confirm_body = "
<html>
<head>
<style>
body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
.container { max-width: 600px; margin: 0 auto; padding: 20px; }
.header { background: #4A90E2; color: white; padding: 20px; text-align: center; border-radius: 8px 8px 0 0; }
.content { background: #f8f9fa; padding: 20px; border-radius: 0 0 8px 8px; }
</style>
</head>
<body>
<div class='container'>
<div class='header'>
<h2 style='margin: 0;'>✅ Richiesta Ricevuta</h2>
</div>
<div class='content'>
<p>Ciao <strong>" . htmlspecialchars($name) . "</strong>,</p>
<p>Grazie per aver richiesto informazioni sulle nostre lezioni live!</p>
<p>Ho ricevuto il tuo messaggio e ti risponderò il prima possibile, generalmente entro 24 ore.</p>
<p style='background: white; padding: 15px; border-left: 4px solid #4A90E2; margin: 20px 0;'>
<strong>Il tuo messaggio:</strong><br>
" . nl2br(htmlspecialchars($message)) . "
</p>
<p>Nel frattempo, puoi esplorare le nostre videolezioni disponibili sul sito.</p>
<p>A presto,<br>
<strong>" . SITE_NAME . "</strong></p>
</div>
</div>
</body>
</html>
";
send_email($email, $confirm_subject, $confirm_body);
// Log attività
log_activity(null, 'contact_form', "Richiesta contatto da: $name ($email)");
set_flash_message('success', '✅ Messaggio inviato con successo! Ti risponderemo al più presto.');
} else {
set_flash_message('error', '❌ Errore durante l\'invio del messaggio. Riprova più tardi o contattaci direttamente via email.');
}
header('Location: index.php#contact');
exit;
?>

View File

@@ -24,6 +24,10 @@ define('SITE_NAME', 'Pilates Studio');
define('SITE_URL', 'http://localhost/pilates-platform'); // Modifica con il tuo dominio in produzione
define('ADMIN_EMAIL', 'admin@pilatesstudio.com'); // Email amministratore
// Contatti opzionali (lascia vuoto se non vuoi mostrarli)
define('CONTACT_PHONE', ''); // Es: '+39 123 456 7890'
define('CONTACT_WHATSAPP', ''); // Es: '+39 123 456 7890' (numero con prefisso internazionale)
// ============================================
// CONFIGURAZIONE SICUREZZA
// ============================================

View File

@@ -38,6 +38,7 @@ $demo_lessons = get_demo_lessons();
<h1 class="logo">Pilates Studio</h1>
<?php endif; ?>
<nav class="nav">
<a href="#contact" class="btn btn-outline">📅 Richiedi Lezione Live</a>
<?php if (is_logged_in()): ?>
<?php if (is_admin()): ?>
<a href="admin/dashboard.php" class="btn btn-secondary">Area Admin</a>
@@ -57,6 +58,7 @@ $demo_lessons = get_demo_lessons();
<!-- Hero Section -->
<section class="hero">
<div class="container">
<?php echo display_flash_message(); ?>
<div class="hero-content">
<h2 class="hero-title">Trasforma il tuo corpo con il Pilates</h2>
<p class="hero-subtitle">Videolezioni professionali e sessioni live per tutti i livelli</p>
@@ -163,6 +165,65 @@ $demo_lessons = get_demo_lessons();
</div>
</section>
<!-- Sezione Contatti per Lezioni Live -->
<section id="contact" class="contact-section">
<div class="container">
<div class="contact-content">
<div class="contact-text">
<h2 class="section-title">Richiedi una Lezione Live</h2>
<p>Vuoi prenotare una sessione live personalizzata? Contattami per maggiori informazioni e disponibilità.</p>
<div class="contact-info">
<div class="contact-item">
<span class="contact-icon">📧</span>
<div>
<strong>Email</strong>
<a href="mailto:<?php echo ADMIN_EMAIL; ?>"><?php echo ADMIN_EMAIL; ?></a>
</div>
</div>
<?php if (defined('CONTACT_PHONE') && !empty(CONTACT_PHONE)): ?>
<div class="contact-item">
<span class="contact-icon">📱</span>
<div>
<strong>Telefono</strong>
<a href="tel:<?php echo CONTACT_PHONE; ?>"><?php echo CONTACT_PHONE; ?></a>
</div>
</div>
<?php endif; ?>
<?php if (defined('CONTACT_WHATSAPP') && !empty(CONTACT_WHATSAPP)): ?>
<div class="contact-item">
<span class="contact-icon">💬</span>
<div>
<strong>WhatsApp</strong>
<a href="https://wa.me/<?php echo preg_replace('/[^0-9]/', '', CONTACT_WHATSAPP); ?>" target="_blank">
<?php echo CONTACT_WHATSAPP; ?>
</a>
</div>
</div>
<?php endif; ?>
</div>
</div>
<div class="contact-form-wrapper">
<form id="contact-form" class="contact-form" action="contact.php" method="POST">
<h3>Invia un Messaggio</h3>
<div class="form-group">
<input type="text" name="name" class="form-control" placeholder="Il tuo nome *" required>
</div>
<div class="form-group">
<input type="email" name="email" class="form-control" placeholder="La tua email *" required>
</div>
<div class="form-group">
<input type="tel" name="phone" class="form-control" placeholder="Telefono (opzionale)">
</div>
<div class="form-group">
<textarea name="message" class="form-control" rows="5" placeholder="Il tuo messaggio *" required></textarea>
</div>
<button type="submit" class="btn btn-primary" style="width: 100%;">Invia Richiesta</button>
</form>
</div>
</div>
</div>
</section>
<!-- Footer -->
<footer class="footer">
<div class="container">