Show sourcecode
The following files exists in this folder. Click to view.
webbserverprogrammering/submissions/projekt-quiz/
README.md
admin/
create_admin.php
create_quiz.php
css/
dashboard.php
debug_questions.php
includes/
index.php
leaderboard.php
login.php
logout.php
my_results.php
quiz.php
quiz_result.php
register.php
sqlcredentials
quiz_result.php
187 lines UTF-8 Unix (LF)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
<?php
session_start();
require_once 'includes/db_connect.php';
require_once 'includes/session_config.php';
requireLogin();
// Determine user_id based on session type
if (isset($_SESSION['admin_logged_in']) && $_SESSION['admin_logged_in'] === true) {
$current_user_id = $_SESSION['admin_id'];
} else {
$current_user_id = $_SESSION['user_id'];
}
$attempt_id = isset($_GET['attempt_id']) ? intval($_GET['attempt_id']) : 0;
if (!$attempt_id) {
header("Location: dashboard.php");
exit();
}
// Hämta attempt-info
$stmt = $pdo->prepare("
SELECT qa.*, q.title as quiz_title
FROM quiz_attempts qa
JOIN quizzes q ON qa.quiz_id = q.id
WHERE qa.id = :id AND qa.user_id = :user_id
");
$stmt->execute([
':id' => $attempt_id,
':user_id' => $current_user_id
]);
$attempt = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$attempt) {
header("Location: dashboard.php");
exit();
}
// Hämta alla frågor och svar med användarens val
$stmt = $pdo->prepare("
SELECT
q.id as question_id,
q.question_text,
ua.answer_id as user_answer_id,
ua.is_correct as user_is_correct
FROM questions q
LEFT JOIN user_answers ua ON q.id = ua.question_id AND ua.attempt_id = :attempt_id
WHERE q.quiz_id = :quiz_id
ORDER BY q.question_order
");
$stmt->execute([
':attempt_id' => $attempt_id,
':quiz_id' => $attempt['quiz_id']
]);
$questions = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Hämta svar för varje fråga
foreach ($questions as &$question) {
$stmt = $pdo->prepare("
SELECT id, answer_text, is_correct
FROM answers
WHERE question_id = :question_id
ORDER BY answer_order
");
$stmt->execute([':question_id' => $question['question_id']]);
$question['answers'] = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
$page_title = 'Resultat - ' . $attempt['quiz_title'];
require_once 'includes/header.php';
?>
<style>
.answer-correct {
background: rgba(46, 204, 113, 0.15);
border-left: 4px solid var(--success);
padding: 15px 20px;
margin: 8px 0;
border-radius: 0 8px 8px 0;
color: #4cd787;
}
.answer-incorrect {
background: rgba(231, 76, 60, 0.15);
border-left: 4px solid var(--danger);
padding: 15px 20px;
margin: 8px 0;
border-radius: 0 8px 8px 0;
color: #ff6b5b;
}
.answer-neutral {
padding: 15px 20px;
margin: 8px 0;
background: var(--bg-input);
border-radius: 8px;
color: var(--text-secondary);
}
.score-display {
text-align: center;
margin: 40px 0;
padding: 40px;
background: var(--bg-card);
border-radius: 16px;
border: 1px solid var(--border-color);
}
.score-display .score-value {
font-size: 4em;
font-weight: 700;
background: linear-gradient(135deg, var(--purple-light), var(--accent-pink));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 10px;
}
.score-display .score-text {
font-size: 1.3em;
color: var(--text-secondary);
}
.question-result {
background: var(--bg-card);
padding: 25px;
margin: 25px 0;
border-radius: 16px;
border: 1px solid var(--border-color);
}
.question-result h3 {
color: var(--purple-light);
margin-bottom: 20px;
font-size: 1.1em;
}
</style>
</head>
<body>
<div class="container">
<div class="result-container">
<h1>Resultat: <?php echo htmlspecialchars($attempt['quiz_title']); ?></h1>
<div class="score-display">
<div class="score-value"><?php echo $attempt['score']; ?>/<?php echo $attempt['total_questions']; ?></div>
<div class="score-text">
Du fick <?php echo round(($attempt['score'] / $attempt['total_questions']) * 100); ?>% rätt!
</div>
</div>
<h2>Dina svar</h2>
<?php foreach ($questions as $index => $question): ?>
<div class="question-result">
<h3>Fråga <?php echo ($index + 1); ?>: <?php echo htmlspecialchars($question['question_text']); ?></h3>
<?php foreach ($question['answers'] as $answer): ?>
<?php
$is_user_answer = ($answer['id'] == $question['user_answer_id']);
$is_correct_answer = $answer['is_correct'];
$class = 'answer-neutral';
$label = '';
if ($is_user_answer && $is_correct_answer) {
$class = 'answer-correct';
$label = ' (Ditt svar - Rätt!)';
} elseif ($is_user_answer && !$is_correct_answer) {
$class = 'answer-incorrect';
$label = ' (Ditt svar - Fel)';
} elseif (!$is_user_answer && $is_correct_answer) {
$class = 'answer-correct';
$label = ' (Rätt svar)';
}
?>
<div class="<?php echo $class; ?>">
<?php echo htmlspecialchars($answer['answer_text']); ?><?php echo $label; ?>
</div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
<div class="form-actions">
<a href="quiz.php?id=<?php echo $attempt['quiz_id']; ?>" class="btn btn-primary">Gör om quiz</a>
<a href="my_results.php" class="btn btn-secondary">Mina resultat</a>
<a href="dashboard.php" class="btn btn-secondary">Tillbaka till Dashboard</a>
</div>
</div>
</div>
<?php require_once 'includes/footer.php'; ?>