style update + server checking answers

This commit is contained in:
Yarcio 2025-05-31 17:39:35 +02:00
parent 1bca27612f
commit d7262080f8
11 changed files with 101 additions and 23 deletions

8
js/functions.js Normal file
View file

@ -0,0 +1,8 @@
//msg
export function msg(message) {
const output = document.getElementById("info");
output.innerHTML = result.msg;
output.style.display = "block";
}
//password show

View file

@ -31,7 +31,6 @@ session_destroy();
<a href="/login/register/">Zarejestruj się</a>
</main>
</div>
<h1></h1>
</body>
</html>

View file

@ -31,7 +31,6 @@ session_destroy();
<p><a href="/login/">Powróć do strony logowania</a></p>
</main>
</div>
<h1></h1>
</body>
</html>

View file

@ -19,7 +19,6 @@ include $_SERVER["DOCUMENT_ROOT"] . "/php/pages.php";
</main>
</div>
<h1></h1>
</body>
</html>

24
sql/index.php Normal file
View file

@ -0,0 +1,24 @@
<?php
include $_SERVER["DOCUMENT_ROOT"] . "/php/functions.php";
// $conn = connectDB();
// $file = fopen("insert3.sql", "r");
// if (!$file) {
// die("Unable to open file!");
// }
// $sql = fread($file, filesize("insert3.sql"));
// fclose($file);
// if ($conn->multi_query($sql)) {
// do {
// if ($result = $conn->store_result()) {
// $result->free();
// }
// } while ($conn->more_results() && $conn->next_result());
// } else {
// echo "SQL Error: " . $conn->error;
// }
// $conn->close();
exit("DISABLED!!!");

View file

@ -14,6 +14,7 @@ body {
display: flex;
flex-direction: column;
min-height: 100vh;
padding-bottom: 60px;
}
main {

View file

@ -2,4 +2,13 @@
main form p span.bigger {
font-size: larger;
}
}
main div.question {
margin: 50px auto;
border: 1px solid var(--border-basic);
width: 90%;
}
main div.question div.answer {
text-align: left;
padding: 0 20px 20px 20px;
}

View file

@ -16,7 +16,6 @@
</main>
</div>
<h1></h1>
</body>
</html>

View file

@ -21,23 +21,23 @@ include $_SERVER["DOCUMENT_ROOT"] . "/php/pages.php";
<form id="startForm">
<?php
if (isset($_GET["own"]))
echo "<p><span class='bigger'>Długość testu:</span><br><input type='number' name='testLength' value='20' min='2' max='99'>pytań</p>";
echo "<p><span class='bigger'>Długość testu:</span><br><input type='number' name='testLength' value='20' min='2' max='99'>pytań</p><script>const own = true;</script>";
else
echo "<input type='hidden' name='testLength' value='20'>";
echo "<input type='hidden' name='testLength' value='20'><script>const own = false;</script>";
?>
<p><input type="submit" value="Rozpocznij test"></p>
<?php
if (!isset($_SESSION["username"]))
echo "<p id='info' style='display: block;'>Nie jesteś zalogowany,<br>więc żaden postęp nie zostanie zapisany!</p>";
echo "<p id='info' style='display: block;'>Nie jesteś zalogowany,<br>więc żaden postęp nie zostanie zapisany!</p><script>const logged = false;</script>";
else
echo "<p id='info'></p>"
echo "<p id='info'></p><script>const logged = true;</script>"
?>
</form>
<h4>Jednak nie chcesz zacząć?</h4>
<p><a href="/">Powrót do strony głównej</a></p>
</main>
</div>
<h1></h1>
<!-- <h1></h1> -->
</body>
</html>

View file

@ -4,6 +4,7 @@ document.addEventListener("DOMContentLoaded", function () {
document.getElementById("startForm").addEventListener("submit", async function (formE) {
formE.preventDefault();
formData = new FormData(formE.target);
formData.append("testStart", "true")
const response = await fetch("test.php", {
method: "POST",
body: formData,
@ -16,27 +17,47 @@ document.addEventListener("DOMContentLoaded", function () {
output.innerHTML = result.msg;
output.style.display = "block";
if (result.questions) setTimeout(function () {
window.addEventListener('beforeunload', function (e) { e.preventDefault(); });
contentHTML = "<form id='test'>";
console.log(result.questions); // DEBUG
i = 0;
testLenght = result.questions.length;
testLength = result.questions.length;
result.questions.forEach(question => {
contentHTML +=
`<div class="question">
<h4>Pytanie ${++i}/${testLenght} <sub>w bazie nr ${question.QID}</sub></h4>
contentHTML +=
`<div class="question">
<h4>Pytanie ${++i}/${testLength} <sub>w bazie nr ${question.QID}</sub></h4>
<h3>${question.content}</h3>
<div class="answer">
<input type="radio" name="${question.QID}" value="A"/>${question.answerA}<br/>
<input type="radio" name="${question.QID}" value="B"/>${question.answerB}<br/>
<input type="radio" name="${question.QID}" value="C"/>${question.answerC}<br/>
<input type="radio" name="${question.QID}" value="D"/>${question.answerD}<br/>
<input type="hidden" name="${"q"+question.QID}" value="${i}"/>
<input type="hidden" name="${question.QID}" value="-"/>
<input type="radio" name="${question.QID}" value="A"/><b>A.</b> ${question.answerA}<br/>
<input type="radio" name="${question.QID}" value="B"/><b>B.</b> ${question.answerB}<br/>
<input type="radio" name="${question.QID}" value="C"/><b>C.</b> ${question.answerC}<br/>
<input type="radio" name="${question.QID}" value="D"/><b>D.</b> ${question.answerD}<br/>
</div>
</div>`;
});
contentHTML += `
<p>Zapisać wynik? <input type="checkbox" name="save"/><br/><input type="submit" value="Zakończ Test"/></p>
contentHTML += `<p>`;
if (logged) contentHTML += `Zapisać wynik? <input type="checkbox" name="save"/><br/>`;
if (logged && !own) contentHTML += `Zapisać w rankingu? <input type="checkbox" name="rank"/>`;
contentHTML += `</p>
<input type="submit" value="Zakończ Test"/>
</form>`;
mainContent.innerHTML = contentHTML
mainContent.innerHTML = contentHTML;
document.getElementById("test").addEventListener("submit", async function (formE) {
formE.preventDefault();
formData = new FormData(formE.target);
formData.append("testEnd", "true");
const response = await fetch("test.php", {
method: "POST",
body: formData,
credentials: "include",
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
});
const result = await response.json();
console.log(result);
});
}, 300);
});
});

View file

@ -4,7 +4,7 @@ if (!checkLogin()) {
jsonMsg("Nie jesteś zalogowany");
exit();
}
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST["testLength"])) {
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST["testStart"])) {
if ($_POST["testLength"] > 100)
jsonMsg("Test nie może być dłuższy niż 100 pytań");
$conn = connectDB();
@ -39,5 +39,24 @@ if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST["testLength"])) {
$conn->close();
$result["msg"] = "Wygenerowano " . count($result["questions"]) . " pytań";
echo json_encode($result);
} else if ($_SERVER['REQUEST_METHOD'] == "POST" && isset($_POST["testEnd"])) {
$allTestAnswers = [];
$answersQIDs = [];
foreach ($_POST as $key => $value) {
if (in_array($key, ["save", "rank", "testEnd", "testLenght"]) || !is_numeric($key)) continue;
$allTestAnswers[(int)$key] = ["ans" => $value, "pos" => $_POST["q$key"], "cor" => false];
$answersQIDs[] = (int)$key;
}
$conn = connectDB();
$filler = implode(",", array_fill(0, count($allTestAnswers), "?"));
$stmt = $conn->prepare("SELECT QID, answerChar FROM questions WHERE QID IN ($filler)");
$types = str_repeat("i", count($allTestAnswers));
$stmt->bind_param($types, ...$answersQIDs);
$stmt->execute();
$stmt->bind_result($QID, $answerChar);
while ($stmt->fetch()) if ($answerChar==$allTestAnswers[$QID]["ans"]) $allTestAnswers[$QID]["cor"] = true;
$stmt->close();
$conn->close();
echo json_encode($allTestAnswers);
} else
jsonMsg("Nieprawidłowy request");