Webbserverprogrammering 1

Show sourcecode

The following files exists in this folder. Click to view.

webbsrvprg/exercises/quiz/

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

personal_results.php

126 lines UTF-8 Windows (CRLF)
<?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>Dina resultat</title>
    <style>
        .correct {
            background-color: lightgreen;
        }

        .wrong {
            background-color: lightcoral;
        }

        .question_cont {
            border: 2px solid black;
            margin: 1px;
        }
        
        p {
            margin: 0;
        }
    </style>
</head>

<body>
    <a href="main.php">Tillbaka</a>
    <h1>Dina resultat. Klick på dem för att se mer.</h1>
    <?php
    
try {
        
/** @var PDO $dbconn */
        
include("../databaser/dbconnection.php");
        include(
"verification.php");

        echo (
'<h3>Inloggad som: <i>' $_SESSION["username"] . '</i></h3>');

        
// Sorterar efter testen med testets namn som rubrik.
        
$sql "SELECT * FROM quiz_tests";
        
$stmt $dbconn->prepare($sql);
        
$stmt->execute();
        while (
$test $stmt->fetch(PDO::FETCH_ASSOC)) {
            
// Körs för varje test som FINNS ATT TA
            
echo ('<h2>' $test["name"] . '</h2>');

            
$sql "SELECT * FROM quiz_results WHERE user_id = ? AND test_id = ?";
            
$results_stmt $dbconn->prepare($sql);
            
$data = [$_SESSION["user_id"], $test["id"]];
            
$results_stmt->execute($data);

            while (
$result $results_stmt->fetch(PDO::FETCH_ASSOC)) {
                
// Varje resultat den användaren har på det testet.
                
$total_questions intval((strlen($result["answers"]) + 1) / 2); // Kollar hur många frågor man svarade på. Vill ha detta här då antal frågor kan ha ökats sedan man gjorde testet.
                
echo ('<a href="personal_results.php?result_id=' $result["id"] . '">');
                echo (
$result["result"] . '/' $total_questions ' Poäng. Taget: ' $result["time"]);
                echo (
'</a><br>');
            }
        }

        if (isset(
$_GET["result_id"])) {
            
// Visar ett resultat i mer detalj
            // Man kan se andras resultat om man bara skriver in ett annat resultat_id i sökfältet men får vara så

            
$sql "SELECT * FROM quiz_results WHERE id = ?";
            
$stmt $dbconn->prepare($sql);
            
$data = [$_GET["result_id"]];
            
$stmt->execute($data);

            
$result $stmt->fetch(PDO::FETCH_ASSOC);
            
$test_id $result["test_id"];
            
$questions_answered intval((strlen($result["answers"]) + 1)/2); // Hur många frågor man besvarade. Stöd för att inte ha svarat på alla frågor om det lades till fler efteråt
            
$answers explode(","$result["answers"]); // Gör om till array

            
$sql "SELECT name FROM quiz_tests WHERE id = ?";
            
$stmt $dbconn->prepare($sql);
            
$data = [$test_id];
            
$stmt->execute($data);
            
$test_name $stmt->fetch(PDO::FETCH_ASSOC)["name"];

            echo (
"<h1>$test_name</h1> Taget: " $result["time"] . "<br><p>Rätt svar markerat i grönt. Om ditt svar ej var korrekt markeras ditt svar med rött och korrekt med grönt</p><br>");

            
$sql "SELECT * FROM quiz_questions WHERE test_id=? ORDER BY id";
            
$stmt $dbconn->prepare($sql);
            
$data = [$test_id]; // Samma som den var men tydligare att sätta om den.
            
$stmt->execute($data);

            for (
$question_num 1$question_num <= $questions_answered$question_num++){
                
// Loopar igenom alla frågor och håller koll på vilken de är i ordningen. Börjar på 1.
                
$question $stmt->fetch(PDO::FETCH_ASSOC);
                
$user_answer $answers[$question_num 1];

                
$sql "SELECT * FROM quiz_answers WHERE question_id =?";
                
$answer_stmt $dbconn->prepare($sql); // Nytt stmt för att inte sabba loopen
                
$data = [$question["id"]];
                
$answer_stmt->execute($data);

                echo (
'<div class="question_cont"><h2>' $question["text"] . '</h2>'); // Frågan och en container.
                
while ($answer $answer_stmt->fetch(PDO::FETCH_ASSOC)) {
                    
$is_correct = ($answer["answer_num"] == $question["correct"]);
                    
$is_user_answer = ($answer["answer_num"] == $user_answer);

                    if (
$is_correct) {
                        echo (
'<p class="correct">');
                    } else if (
$is_user_answer) {
                        echo (
'<p class="wrong">'); // Användarens svar om det inte är rätt
                    
} else {
                        echo (
"<p>"); // Varken användarsvar eller rätt
                    
}
                    
// Slutet av p-elementet och
                    
echo ($answer["text"] . '</p>');
                }
                echo (
"</div>");
            }
        }
    } catch (
PDOException $e) {
        echo (
$e->getMessage());
    }
    
?>
    <br><br><br>
</body>

</html>