Show sourcecode
The following files exists in this folder. Click to view.
webbserverprogrammering/projects/anton-quiz/setup/
create_admin.php
dbsetup.sql
drop_tables.php
install.php
show_tables.php
install.php
113 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
106
107
108
109
110
111
112
113
<?php
require __DIR__ . '/../../../envparser.php';
$envFilePath = __DIR__ . '/../../../credentials.env';
$envVars = parseEnvFile($envFilePath);
$hostname = 'localhost';
$username = $envVars["user"];
$password = $envVars["password"];
$db = "antonlm";
$conn = new mysqli($servername, $username, $password, $db);
// Kontrollera anslutning
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// // 1) Skapa databasen om den inte redan finns
// $sqlCreateDb = "CREATE DATABASE IF NOT EXISTS quizdb";
// if ($conn->query($sqlCreateDb) === false) {
// die("Fel vid skapande av databasen: " . $conn->error);
// }
// echo "Databasen 'quizdb' säkerställdes.\n";
// // 2) Använd databasen
// $sqlUseDb = "USE quizdb";
// if ($conn->query($sqlUseDb) === false) {
// die("Fel vid USE quizdb: " . $conn->error);
// }
// echo "Bytte till databasen 'quizdb'.\n";
// 3) Sätt samman alla CREATE TABLE-kommandon i en enda sträng (eller kör dem ett och ett).
// Ordningen i din kod är bra eftersom det inte uppstår FK-problem (users -> tests -> questions -> answers -> results -> user_answers).
$sqlTables = "
-- Tabell för användare (samma tabell används för vanliga användare och admins)
CREATE TABLE IF NOT EXISTS quizdb_users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
latest_login DATETIME DEFAULT CURRENT_TIMESTAMP,
is_admin TINYINT(1) NOT NULL DEFAULT 0 -- 0 = kund, 1 = admin
);
-- Tabell för frågetester
CREATE TABLE IF NOT EXISTS quizdb_tests (
id INT AUTO_INCREMENT PRIMARY KEY,
test_name VARCHAR(100) NOT NULL,
is_enabled TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Tabell för frågor
CREATE TABLE IF NOT EXISTS quizdb_questions (
id INT AUTO_INCREMENT PRIMARY KEY,
test_id INT NOT NULL,
question_text VARCHAR(255) NOT NULL,
is_enabled TINYINT(1) NOT NULL DEFAULT 1, -- 1 = aktiv, 0 = inaktiv
FOREIGN KEY (test_id) REFERENCES quizdb_tests(id) ON DELETE CASCADE
);
-- Tabell för svarsalternativ
CREATE TABLE IF NOT EXISTS quizdb_answers (
id INT AUTO_INCREMENT PRIMARY KEY,
question_id INT NOT NULL,
answer_text VARCHAR(255) NOT NULL,
is_correct TINYINT(1) NOT NULL DEFAULT 0,
is_enabled TINYINT(1) NOT NULL DEFAULT 1,
FOREIGN KEY (question_id) REFERENCES quizdb_questions(id) ON DELETE CASCADE
);
-- Tabell för resultat
CREATE TABLE IF NOT EXISTS quizdb_results (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
test_id INT NOT NULL,
score INT NOT NULL DEFAULT 0,
taken_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES quizdb_users(id) ON DELETE CASCADE,
FOREIGN KEY (test_id) REFERENCES quizdb_tests(id) ON DELETE CASCADE
);
-- Tabell för användarens svar (för att kunna visa vilka svar som är rätt och fel)
CREATE TABLE IF NOT EXISTS quizdb_user_answers (
id INT AUTO_INCREMENT PRIMARY KEY,
result_id INT NOT NULL,
question_id INT NOT NULL,
answer_id INT NOT NULL,
is_correct TINYINT(1) NOT NULL,
FOREIGN KEY (result_id) REFERENCES quizdb_results(id) ON DELETE CASCADE,
FOREIGN KEY (question_id) REFERENCES quizdb_questions(id) ON DELETE CASCADE,
FOREIGN KEY (answer_id) REFERENCES quizdb_answers(id) ON DELETE CASCADE
);
";
// 4) Använd "multi_query" för att köra alla kommandon i en enda körning
if ($conn->multi_query($sqlTables) === false) {
die("Fel vid skapande av tabeller: " . $conn->error);
}
// 5) Eftersom multi_query kan returnera flera resultat, loopar vi igenom dem (även om dessa CREATE statements inte returnerar data)
do {
if ($result = $conn->store_result()) {
$result->free();
}
} while ($conn->next_result());
// Avsluta och meddela klart
echo "Tabeller har skapats/uppdaterats enligt scriptet.\n";
$conn->close();