fix contact
This commit is contained in:
12
README.md
12
README.md
@@ -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
|
||||
```
|
||||
|
||||
|
||||
@@ -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
161
contact.php
Normal 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;
|
||||
?>
|
||||
@@ -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
|
||||
// ============================================
|
||||
|
||||
61
index.php
61
index.php
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user