Show sourcecode
The following files exists in this folder. Click to view.
public_html/exercises/quizproject/quiz/
createquiz.php
submission.php
submit_quiz.php
takequiz.php
viewquizzes.php
viewsubmissions.php
submission.php
221 lines UTF-8 Windows (CRLF)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
<?php
session_start();
// Auth så att användare är inloggad och/eller admin
$loggedIn = isset($_SESSION['logged_in']) && $_SESSION['logged_in'] == 1;
$isAdmin = isset($_SESSION['is_admin']) && $_SESSION['is_admin'] == 1;
include('../dbconnection.php');
if (!$dbconn) {
die("Connection failed: Can't connect to database.");
}
// Check auth
if (!$loggedIn || $loggedIn != 1) {
header("Location: ../login.php");
exit;
}
// Must have submission_id
if (!isset($_GET['submission_id']) || empty($_GET['submission_id'])) {
header("Location: ../index.php");
exit;
}
$submission_id = intval($_GET['submission_id']);
$user_id = $_SESSION['user_id'] ?? null;
try {
// Hämta submission info innan html för att få all data direkt
$stmt = $dbconn->prepare("
SELECT s.submission_id, s.quiz_id, s.user_id, s.submitted_time, s.score, q.quiz_name, u.username
FROM submissions s
JOIN quizzes q ON s.quiz_id = q.quiz_id
JOIN users u ON s.user_id = u.user_id
WHERE s.submission_id = ?
");
$stmt->execute([$submission_id]);
$submission = $stmt->fetch(PDO::FETCH_ASSOC);
// Skicka tillbaks om inga submissions finns
if (!$submission) {
header("Location: ../index.php");
exit;
}
// Authorization: user who submitted or admin
if (($submission['user_id'] != $user_id) && ($_SESSION['is_admin'] != 1)) {
header("Location: ../index.php");
exit;
}
} catch (PDOException $e) {
header("Location: ../index.php");
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Quizzer | Submission Review</title>
<link rel="stylesheet" href="../quiz_styles.css">
<link rel="shortcut icon" href="../icons/google-quiz-icon.svg" type="image/x-icon">
<style>
/**Lite extra syle för svar */
.answer-option {
padding: 12px;
margin: 8px 0;
border: 2px solid #ddd;
border-radius: 4px;
cursor: pointer;
}
.answer-option.correct {
border-color: #28a745;
}
.answer-option.incorrect {
border-color: #dc3545;
}
.answer-option.user-selected {
border-width: 3px;
font-weight: bold;
}
.result-badge {
display: inline-block;
padding: 4px 12px;
border-radius: 12px;
font-size: 0.9em;
margin-left: 8px;
}
.result-badge.correct {
background-color: #28a745;
color: white;
}
.result-badge.incorrect {
background-color: #dc3545;
color: white;
}
</style>
</head>
<body>
<div class="page page-narrow">
<div class="page-header">
<div>
<h1 class="page-title">Submission View</h1>
<p class="page-subtitle">View quiz submission.</p>
</div>
<div class="actions">
<a class="btn btn-ghost"
href="./viewsubmissions.php?quiz_id=<?php echo htmlspecialchars($submission['quiz_id']); ?>">← Back to
submissions</a>
</div>
</div>
<div class="quiz-container">
<?php
try {
echo "<h1 class='page-title'>" . htmlspecialchars($submission['quiz_name']) . "</h1>";
echo "<p><strong>Submitted by:</strong> " . htmlspecialchars($submission['username']) . "</p>";
echo "<p><strong>Date:</strong> " . htmlspecialchars($submission['submitted_time']) . "</p>";
echo "<p><strong>Score:</strong> " . htmlspecialchars($submission['score'] ?? 'Not graded') . "</p>";
// Get questions and user answers
$stmt = $dbconn->prepare("
SELECT DISTINCT q.question_id, q.question
FROM questions q
WHERE q.quiz_id = ?
ORDER BY q.question_id
");
$stmt->execute([$submission['quiz_id']]);
$questions = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($questions)) {
echo "<div class='alert alert-warning'>No questions found for this quiz.</div>";
exit;
}
foreach ($questions as $index => $question) {
// Get all answers for this question
$stmt = $dbconn->prepare("
SELECT answer_id, answer, is_correct
FROM answers
WHERE question_id = ?
ORDER BY answer_id
");
$stmt->execute([$question['question_id']]);
$answers = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Get user's answer(s) for this question
$stmt = $dbconn->prepare("SELECT answer_id, is_correct FROM submission_answers WHERE submission_id = ? AND question_id = ?");
$stmt->execute([$submission_id, $question['question_id']]);
$userAnswers = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Mappa alla svar till en array map
$userAnswerIds = array_map(function($a) { return $a['answer_id']; }, $userAnswers);
$questionCorrect = !empty($userAnswers) && count(array_filter($userAnswers, function($a) { return $a['is_correct']; })) === count($userAnswers);
// Skriv ut alla frågor samt om de är korrekt eller ej
echo "<div class='card'>";
echo "<h3>Question " . ($index + 1) . ": " . htmlspecialchars($question['question']);
// Sätt style för fel / rätt svar
echo "<span class='result-badge " . ($questionCorrect ? "correct" : "incorrect") . "'>";
echo $questionCorrect ? "✓ Correct" : "✗ Incorrect";
echo "</span></h3>";
// Skriv ut alla svar med rätt / fel
foreach ($answers as $answer) {
$isCorrect = $answer['is_correct'] == 1;
$userSelected = in_array($answer['answer_id'], $userAnswerIds);
// Sätt rätt färg
$classes = "answer-option";
if ($isCorrect) {
$classes .= " correct";
} elseif ($userSelected) {
$classes .= " incorrect";
}
// Sätt svarad av användare
if ($userSelected) {
$classes .= " user-selected";
}
echo "<div class='" . $classes . "'>";
echo htmlspecialchars($answer['answer']);
// Sätt correct badge på svar
if ($isCorrect) {
echo " <strong style='color: #28a745;'>✓ Correct</strong>";
}
// Användare och fel
if ($userSelected && !$isCorrect) {
echo " <strong style='color: #dc3545;'>✗ Your answer</strong>";
}
// Användare och korrekt
if ($userSelected && $isCorrect) {
echo " <strong style='color: #28a745;'>✓ Your answer</strong>";
}
echo "</div>";
}
echo "</div>";
}
} catch (PDOException $e) {
echo "<div class='alert alert-error'>Error: " . htmlspecialchars($e->getMessage()) . "</div>";
echo '<div class="actions"><a class="btn btn-secondary" href="../index.php">Back to dashboard -></a></div>';
}
$dbconn = null;
?>
</div>
</div>
</body>
</html>