prepare("SELECT id FROM participants WHERE email = ?");
$stmt->execute([$email]);
if ($stmt->fetch()) {
$error = 'Questo indirizzo email ha già partecipato. È consentito un solo invio per email.';
} else {
$pdo->beginTransaction();
// Insert participant
$stmt = $pdo->prepare("INSERT INTO participants (email, nickname) VALUES (?, ?)");
$stmt->execute([$email, $nickname]);
$participant_id = $pdo->lastInsertId();
// Insert submissions
$stmt_submission = $pdo->prepare("INSERT INTO submissions (participant_id, question_id, answer_id) VALUES (?, ?, ?)");
foreach ($answers as $question_id => $answer_id) {
$stmt_submission->execute([$participant_id, $question_id, $answer_id]);
}
$pdo->commit();
// Send confirmation email
$subject = 'Grazie per aver partecipato al nostro Quiz!';
$body = "Ciao {$nickname},
Grazie per aver inviato le tue risposte. I risultati saranno pubblicati al termine del concorso.
In bocca al lupo!";
MailService::sendMail($email, $subject, $body, strip_tags($body));
$message = 'Grazie per aver partecipato! Hai inviato con successo le tue risposte e riceverai una mail di conferma a breve.';
$submitted_successfully = true;
}
} catch (Exception $e) {
if ($pdo->inTransaction()) {
$pdo->rollBack();
}
$error = "Si è verificato un errore durante l'invio. Riprova. Dettagli: " . $e->getMessage();
}
}
}
// Fetch questions and answers for the form
$questions = [];
if (!$submitted_successfully) {
try {
$stmt = $pdo->query("SELECT id, question_text, points FROM questions ORDER BY id");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$question_id = $row['id'];
$row['answers'] = [];
$stmt_answers = $pdo->prepare("SELECT id, answer_text FROM answers WHERE question_id = ? ORDER BY id");
$stmt_answers->execute([$question_id]);
$row['answers'] = $stmt_answers->fetchAll(PDO::FETCH_ASSOC);
$questions[] = $row;
}
} catch (Exception $e) {
$error = "Impossibile caricare le domande del quiz. Dettagli: " . $e->getMessage();
}
}
?>