108 lines
4.9 KiB
PHP
108 lines
4.9 KiB
PHP
<?php
|
|
session_start();
|
|
if (!isset($_SESSION['user_id'])) {
|
|
header('Location: login.php');
|
|
exit;
|
|
}
|
|
require_once 'db/config.php';
|
|
$db = db();
|
|
|
|
$skill_id = $_GET['skill_id'] ?? 0;
|
|
$user_id = $_SESSION['user_id'];
|
|
|
|
// Fetch skill details
|
|
$stmt = $db->prepare("SELECT title FROM skills WHERE id = ?");
|
|
$stmt->execute([$skill_id]);
|
|
$skill_title = $stmt->fetchColumn();
|
|
|
|
if (!$skill_title) {
|
|
die('Skill not found!');
|
|
}
|
|
|
|
// Fetch quiz questions
|
|
$questions_stmt = $db->prepare("SELECT * FROM quizzes WHERE skill_id = ?");
|
|
$questions_stmt->execute([$skill_id]);
|
|
$questions = $questions_stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$score = 0;
|
|
$total_questions = count($questions);
|
|
|
|
foreach ($questions as $question) {
|
|
$question_id = $question['id'];
|
|
$user_answer = $_POST['question_' . $question_id] ?? '';
|
|
if ($user_answer === $question['correct_option']) {
|
|
$score++;
|
|
}
|
|
}
|
|
|
|
$percentage_score = ($total_questions > 0) ? round(($score / $total_questions) * 100) : 0;
|
|
|
|
// Save quiz attempt
|
|
$insert_stmt = $db->prepare("INSERT INTO quiz_attempts (user_id, skill_id, score) VALUES (?, ?, ?)");
|
|
$insert_stmt->execute([$user_id, $skill_id, $percentage_score]);
|
|
|
|
header("Location: learn.php?skill_id=$skill_id");
|
|
exit;
|
|
}
|
|
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Quiz: <?php echo htmlspecialchars($skill_title); ?></title>
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
<link rel="stylesheet" href="assets/css/custom.css?v=<?php echo time(); ?>">
|
|
</head>
|
|
<body>
|
|
<div class="container mt-5">
|
|
<a href="learn.php?skill_id=<?php echo $skill_id; ?>" class="btn btn-secondary mb-4">Back to Learning</a>
|
|
<h1>Quiz: <?php echo htmlspecialchars($skill_title); ?></h1>
|
|
|
|
<?php if (empty($questions)): ?>
|
|
<div class="alert alert-warning">No quiz questions available for this skill yet.</div>
|
|
<?php else: ?>
|
|
<form method="POST">
|
|
<?php foreach ($questions as $index => $question): ?>
|
|
<div class="card my-4">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">Question <?php echo $index + 1; ?></h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<p class="card-text"><?php echo htmlspecialchars($question['question']); ?></p>
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="radio" name="question_<?php echo $question['id']; ?>" id="q<?php echo $question['id']; ?>_a" value="a" required>
|
|
<label class="form-check-label" for="q<?php echo $question['id']; ?>_a">
|
|
<?php echo htmlspecialchars($question['option_a']); ?>
|
|
</label>
|
|
</div>
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="radio" name="question_<?php echo $question['id']; ?>" id="q<?php echo $question['id']; ?>_b" value="b">
|
|
<label class="form-check-label" for="q<?php echo $question['id']; ?>_b">
|
|
<?php echo htmlspecialchars($question['option_b']); ?>
|
|
</label>
|
|
</div>
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="radio" name="question_<?php echo $question['id']; ?>" id="q<?php echo $question['id']; ?>_c" value="c">
|
|
<label class="form-check-label" for="q<?php echo $question['id']; ?>_c">
|
|
<?php echo htmlspecialchars($question['option_c']); ?>
|
|
</label>
|
|
</div>
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="radio" name="question_<?php echo $question['id']; ?>" id="q<?php echo $question['id']; ?>_d" value="d">
|
|
<label class="form-check-label" for="q<?php echo $question['id']; ?>_d">
|
|
<?php echo htmlspecialchars($question['option_d']); ?>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
<button type="submit" class="btn btn-primary btn-lg">Submit Quiz</button>
|
|
</form>
|
|
<?php endif; ?>
|
|
</div>
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
|
|
</body>
|
|
</html>
|