Show sourcecode
The following files exists in this folder. Click to view.
create_test.php
create_test_fuckingtrasig.php
hash.php
index.php
login.php
main.php
personal_results.php
setup.php
sign_up.php
test_correcting.php
tests.php
user_administration.php
verification.php
create_test.php
193 lines UTF-8 Windows (CRLF)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
<?php
session_start(["gc_maxlifetime" => 86400]);
?>
<!DOCTYPE html>
<html lang="sv">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Skapa test</title>
<style>
fieldset {
border: 3px solid black;
}
.ans_fieldset {
border-color: gray;
}
.correct_select_fieldset {
border-color: darkgreen;
}
.button {
/* Kan inte använda <button> då formuläret tror man försöker lämna in det */
border: 1px solid black;
background-color: lightgray;
width: 10vw;
padding: 2px;
cursor: pointer;
}
#submit_button {
background-color: lightgreen;
}
</style>
</head>
<body>
<h1>Lägg till fråga i test</h1>
<form method="post">
<?php
try {
/** @var PDO $dbconn */
include("../databaser/dbconnection.php");
$admin_required = true; // Kontrolleras i verification.php
include("verification.php");
if (isset($_POST["test_name"])) {
// Börjar med att kolla om testet redan finns, annars skapar det.------------------------------
$sql = "SELECT * FROM quiz_tests WHERE name = ?";
$stmt = $dbconn->prepare($sql);
$stmt->execute([$_POST["test_name"]]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
// Skapar testet om det inte redan finns
if($result){
$test_id = $result["id"];
} else{
// Lägger till i testet
$sql = "INSERT INTO quiz_tests (name) VALUES (?)";
$stmt = $dbconn->prepare($sql);
$stmt->execute([$_POST["test_name"]]);
$test_id = $dbconn->lastInsertId();
}
//----------------------------------------------------------------------------------------------
// Lägger till frågan och alla svar
$answer_count = $_POST["answer_count"];
$question = $_POST["question"];
// Skapa frågan i databasen
// Av någon anledning så skapas frågorna igen om man laddar om sidan men svaren gör inte det HM
$sql = "INSERT INTO quiz_questions (text, correct, test_id) VALUES (?,?,?)";
$stmt = $dbconn->prepare($sql);
$data = [$question, $_POST["correct_a"], $test_id];
$stmt->execute($data);
$question_id = $dbconn->lastInsertId();
$sql = "INSERT INTO quiz_answers (text, answer_num, question_id) VALUES (?,?,?)";
$stmt = $dbconn->prepare($sql); // Används i loopen
for ($i=1; $i<=$answer_count; $i++){
// Börjar på 1, inte 0. Lägger till alla svar i databasen.
$data = [$_POST["a" . $i], $i, $question_id];
$stmt->execute($data);
}
}
} catch (PDOException $e) {
echo ($e->getMessage());
}
if (isset($_POST["test_name"])) {
// Om testet redan är påbörjat så fortsätter man på det
echo ("<h2>Testnamn: " . $_POST["test_name"] . "</h2>");
echo ('<input type="hidden" name="test_name" value="' . $_POST["test_name"] . '">');
} else {
// Om det inte är påbörjat så får man välja namn
echo ('<input type="text" maxlength="100" required name="test_name" id="test_name"><label for="test_name">Namn på testet</label><br><p>Om du anger namn på redan existerande test läggs frågorna till på det. Nytt namn skapar nytt test.</p>');
}
?>
<input type="hidden" name="answer_count" id="answer_count" value="1"><!--Uppdateras av JS-->
<input type="text" required id="question" name="question" maxlength="255" placeholder="Vad är 2+2?"><label for="question"> Frågeställning</label><br>
<fieldset id="answers_fieldset" class="ans_fieldset">
<legend>Svar</legend>
<div id="a1_container"><input type="text" required id="a1" name="a1" maxlength="255" placeholder="4"><label for="a1"> Svar 1</label><br></div>
</fieldset>
<fieldset id="correct_fieldset" class="correct_select_fieldset">
<!-- Här får man välja vilket svar som är korrekt. Det läggs till fler knappar allteftersom fler svar skapas. -->
<legend>Vilket svar är korrekt?</legend>
<div id="correct_1_container"><input type="radio" name="correct_a" id="correct_1" value="1"><label for="correct_1"> 1</label><br></div>
</fieldset>
<br>
<div class="button" id="add_answer">Lägg till nytt svar</div>
<br>
<div class="button" id="remove_answer">Ta bort svar</div>
<hr>
<button type="submit" id="submit_button">Lägg till fråga och gå vidare</button>
</form>
<a href="main.php">Klar (se till att lägga till sista frågan först)</a>
<script>
function get(id) {
return (document.getElementById(id));
}
let answer_count = 1; // Börjar med 1 svar på frågan
function addAnswer() {
answer_count += 1;
get("answer_count").value = answer_count;
// // Lägger till ett nytt svar. innerHTML += ... tömmer alla sparade values.
// get("answers_fieldset").innerHTML += '<div id="a' + answer_count + '_container"><input type="text" required id="a' + answer_count + '" name="a' + answer_count + '" maxlength="255" placeholder="4"><label for="a' + answer_count + '"> Svar ' + answer_count + '</label><br></div>'
// Lägger till en ny radio för att välja korrekt svar
get("correct_fieldset").innerHTML += '<div id="correct_' + answer_count + '_container"><input type="radio" name="correct_a" id="correct_' + answer_count + '" value="' + answer_count + '"><label for="correct_' + answer_count + '"> ' + answer_count + '</label><br></div>'
// AI skrivet för att lägga till ett nytt svar utan att behöva köra innerHTML += .... då detta tömmer information-------------------------------
/* ====== SVAR ====== */
const answerContainer = document.createElement("div");
answerContainer.id = "a" + answer_count + "_container";
const input = document.createElement("input");
input.type = "text";
input.required = true;
input.id = "a" + answer_count;
input.name = "a" + answer_count;
input.maxLength = 255;
input.placeholder = "4";
const label = document.createElement("label");
label.htmlFor = input.id;
label.textContent = " Svar " + answer_count;
answerContainer.appendChild(input);
answerContainer.appendChild(label);
answerContainer.appendChild(document.createElement("br"));
get("answers_fieldset").appendChild(answerContainer);
}
function removeAnswer() {
if (answer_count > 1) {
// Tar inte bort om det bar finns ett svar
// Containers används för att kunna ta bort input, label och <br> samtidigt
const answer_id = "a" + answer_count + "_container";
get(answer_id).remove();
const radio_name = "correct_" + answer_count + "_container";
get(radio_name).remove();
answer_count -= 1;
}
}
get("add_answer").addEventListener("click", addAnswer); // Kallar på funktionen när man klickar knappen
get("remove_answer").addEventListener("click", removeAnswer); // Kallar på funktionen när man klickar knappen
</script>
</body>
</html>