Webbserverprogrammering 1

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)
<?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'?>