Show sourcecode
The following files exists in this folder. Click to view.
webbserverprogrammering/projects/anton-quiz/endpoints/
admin/
check_answers.php
create-account.php
log-in.php
log-out.php
check_answers.php
105 lines UTF-8 Windows (CRLF)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
session_start();
if (!$_SESSION["id"]) {
header('Location: ../index.php');
die();
}
require_once __DIR__ . '/../dbconnect.php';
// Vi utgår från att test_id skickas via POST när användaren skickar in quizet
$test_id = $_POST["test_id"];
// Sätt in grundrad i results med score = 0
$zero = 0;
$stmt = $conn->prepare("
INSERT INTO quizdb_results (user_id, test_id, score)
VALUES (?, ?, ?)
");
$stmt->bind_param("iii", $_SESSION["id"], $test_id, $zero);
if (!$stmt->execute()) {
echo 'Kunde inte lägga till rad i results';
die();
}
// Hämta det nyskapade id:t för results-raden
$result_id = $conn->insert_id;
// Hämta frågor som tillhör testet
$stmt = $conn->prepare("
SELECT id
FROM quizdb_questions
WHERE test_id = ?
");
$stmt->bind_param("i", $test_id);
$stmt->execute();
$questionsResult = $stmt->get_result();
$score = 0; // Håll koll på antal rätta svar
// Loopar igenom varje fråga
while ($question = $questionsResult->fetch_assoc()) {
$questionId = $question["id"];
// Hämta alla *aktiva* svarsalternativ för denna fråga
$stmtAnswers = $conn->prepare("
SELECT id, answer_text, is_correct
FROM quizdb_answers
WHERE question_id = ?
AND is_enabled = 1
");
$stmtAnswers->bind_param("i", $questionId);
$stmtAnswers->execute();
$answersDbResult = $stmtAnswers->get_result();
// Hämta vilket svar användaren skickade in för denna fråga
// (OBS! Om en fråga saknar $_POST-värde, ex. ej besvarats, ger det null/inget)
$userPostedAnswer = $_POST["question-" . $questionId] ?? null;
// Jämför användarens postade svar med varje möjligt svarsalternativ
while ($answer = $answersDbResult->fetch_assoc()) {
// Om användarens postade svar matchar texten i databasen
if ($userPostedAnswer == $answer["answer_text"]) {
// Infoga rad i user_answers
$stmtUA = $conn->prepare("
INSERT INTO quizdb_user_answers (result_id, question_id, answer_id, is_correct)
VALUES (?, ?, ?, ?)
");
$stmtUA->bind_param("iiii",
$result_id,
$questionId,
$answer["id"],
$answer["is_correct"]
);
if (!$stmtUA->execute()) {
echo 'Kunde inte lägga till användarens svar i tabellen user_answers';
die();
}
// Öka poängen om svaret var korrekt
if ($answer["is_correct"] == 1) {
$score++;
}
// När vi väl har hittat användarens matchande svar
// kan vi bryta för denna fråga (förutsätter single-choice).
break;
}
}
}
// Nu när vi har loopat igenom alla frågor och vet total score, uppdaterar vi results-raden
$stmtUpdate = $conn->prepare("
UPDATE quizdb_results
SET score = ?
WHERE id = ?
");
$stmtUpdate->bind_param("ii", $score, $result_id);
$stmtUpdate->execute();
// Skicka användaren vidare när allt är färdigt
header('Location: ../logged-in/dashboard.php');
exit;