connect_error) { die("Connessione al database fallita: " . $conn->connect_error); } // Recupera parametri GET: idbookingclass e token if (isset($_GET['idbookingclass']) && isset($_GET['token'])) { $idbookingclass = $_GET['idbookingclass']; $token = $_GET['token']; // Verifica validità: token corrisponde, lezione futura e prima delle 12:00 del giorno $query = "SELECT * FROM bookingclass WHERE idbookingclass = ? AND cancellation_token = ? AND status = 'booked' AND bookingstart > NOW() AND NOW() <= DATE_ADD(DATE(bookingstart), INTERVAL 12 HOUR)"; $stmt = $conn->prepare($query); if ($stmt) { $stmt->bind_param("is", $idbookingclass, $token); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); $bookingstart = $row['bookingstart']; $newtimeformat = date("d-m-Y H:i", strtotime($bookingstart)); // Aggiorna status a 'cancelled' e invalida token $updateQuery = "UPDATE bookingclass SET status = 'cancelled', cancellation_token = NULL WHERE idbookingclass = ?"; $updateStmt = $conn->prepare($updateQuery); $updateStmt->bind_param("i", $idbookingclass); $updateStmt->execute(); // Recupera dati utente e servizio $dataQuery = "SELECT bookingclass.*, auth_users.*, service.* FROM bookingclass LEFT JOIN auth_users ON bookingclass.iduser = auth_users.id LEFT JOIN service ON bookingclass.idservice = service.idservice WHERE bookingclass.idbookingclass = ?"; $dataStmt = $conn->prepare($dataQuery); $dataStmt->bind_param("i", $idbookingclass); $dataStmt->execute(); $dataResult = $dataStmt->get_result(); $dataRow = $dataResult->fetch_assoc(); $emailuser = $dataRow['email']; $firstname = $dataRow['first_name'] ?? 'Utente'; // Prepara messaggio email $messagecancel = "

Ciao $firstname ,

La tua lezione è stata cancellata con successo!

Dettaglio: $newtimeformat


Per vedere e gestire le tue lezioni clicca qui: https://yogibook.yogasoul.it


Ci vediamo sul tappetino!

Il Team Yogasoul

"; // Definisci $messageedit per il template $messageedit = $messagecancel; // Definisci $buttonedit (pulsante generico) $buttonedit = " YogiBook - YogaSoul "; require 'phpmailer/src/Exception.php'; require 'phpmailer/src/PHPMailer.php'; require 'phpmailer/src/SMTP.php'; $mail = new PHPMailer(true); try { $mail->isSMTP(); $mail->Host = 'mail.yogasoul.it'; $mail->SMTPAuth = true; $mail->Username = 'info@yogasoul.it'; $mail->Password = '!Testolina88'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; // Verifica esistenza file template if (!file_exists('mail/emailtemplate2.php')) { throw new Exception("File emailtemplate2.php non trovato."); } include('mail/emailtemplate2.php'); // Verifica che $mailmessage1 esista if (!isset($mailmessage1)) { throw new Exception("Variabile \$mailmessage1 non definita in emailtemplate2.php."); } // Sostituisci placeholder (per compatibilità) $htmlContent = str_replace('{message}', $messagecancel, $mailmessage1); $mail->From = 'info@yogasoul.it'; $mail->FromName = 'YogiBook [YogaSoul]'; $mail->addAddress($emailuser); $mail->Subject = "YogiBook - Lezione cancellata con successo!"; $mail->Body = $htmlContent; $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; $mail->send(); // Mostra landing di conferma echo "

Cancellazione confermata

"; echo "

La lezione del $newtimeformat è stata cancellata con successo.

"; echo "Torna al portale"; } catch (Exception $e) { echo "Errore invio email: " . $mail->ErrorInfo; } } else { echo "Link non valido o scaduto."; } $stmt->close(); } else { echo "Errore nella preparazione della query: " . $conn->error; } } else { echo "Parametri mancanti."; } $conn->close();