Webbserverprogrammering 1

Show sourcecode

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

webbsrvprg/exercises/

formular7/
fragetavling.php
funktioner/
grunder/
index.php

fragetavling.php

272 lines UTF-8 Windows (CRLF)

<?php
session_start
();

$losenord = "1234";

$fragor = [
    
1 => [
        
"fraga" => "Vad heter Sveriges huvudstad?",
        
"A" => "Göteborg",
        
"B" => "Stockholm",
        
"C" => "Malmö",
        
"D" => "Uppsala",
        
"ratt" => "B"
    
],
    
2 => [
        
"fraga" => "Vad är 5 * 5?",
        
"A" => "10",
        
"B" => "20",
        
"C" => "25",
        
"D" => "30",
        
"ratt" => "C"
    
],
    
3 => [
        
"fraga" => "Vilket språk används för att skapa dynamiska webbsidor på en server?",
        
"A" => "CSS",
        
"B" => "PHP",
        
"C" => "Excel",
        
"D" => "Word",
        
"ratt" => "B"
    
]
];

if (!isset(
$_SESSION["steg"])) {
    
$_SESSION["steg"] = 0;
}

$fel = "";

// Logga in med lösenord
if (isset($_POST["loggain"])) {
    if (
$_POST["losenord"] == $losenord) {
        
session_regenerate_id(true);
        
$_SESSION["inloggad"] = true;
        
$_SESSION["steg"] = 1;
        unset(
$_SESSION["svar"]);
        unset(
$_SESSION["namn"]);
        unset(
$_SESSION["poang"]);
    } else {
        
$fel = "Fel lösenord!";
    }
}

// Spara namn
if (
    isset(
$_SESSION["inloggad"]) &&
    
$_SESSION["inloggad"] === true &&
    
$_SESSION["steg"] == 1 &&
    isset(
$_POST["namn"])
) {
    
$namn = trim($_POST["namn"]);

    if (
$namn != "") {
        
$_SESSION["namn"] = $namn;
        
$_SESSION["steg"] = 2;
    } else {
        
$fel = "Skriv ditt namn!";
    }
}

// Spara svar och visa nästa fråga
if (
    isset(
$_SESSION["inloggad"]) &&
    
$_SESSION["inloggad"] === true &&
    isset(
$_POST["svar"]) &&
    isset(
$_POST["fraga"])
) {
    
$nummer = (int) $_POST["fraga"];
    
$svar = $_POST["svar"];

    if (
        
$nummer == $_SESSION["steg"] - 1 &&
        isset(
$fragor[$nummer]) &&
        isset(
$fragor[$nummer][$svar]) &&
        
$nummer >= 1 &&
        
$nummer <= 3
    
) {
        
$_SESSION["svar"][$nummer] = $svar;

        if (
$nummer < 3) {
            
$_SESSION["steg"] = $nummer + 2;
        } else {
            
$_SESSION["steg"] = 5;
        }
    }
}

// Rätta svaren
if (
    isset(
$_SESSION["inloggad"]) &&
    
$_SESSION["inloggad"] === true &&
    
$_SESSION["steg"] == 5 &&
    isset(
$_POST["skicka"])
) {
    
$poang = 0;

    for (
$i = 1; $i <= 3; $i++) {
        if (
            isset(
$_SESSION["svar"][$i]) &&
            
$_SESSION["svar"][$i] == $fragor[$i]["ratt"]
        ) {
            
$poang++;
        }
    }

    
$_SESSION["poang"] = $poang;
    
$_SESSION["steg"] = 6;
}

// Skicka resultat via mejl

if (
    isset(
$_SESSION["inloggad"]) &&
    
$_SESSION["inloggad"] === true &&
    
$_SESSION["steg"] == 6 &&
    isset(
$_POST["skickamejl"])
) {
    
$mottagare = "jeslin25@varmdogymnasium.se";
    
$subject = "Resultat från frågetävlingen";
    
$message = $_SESSION["namn"] . " fick "
             
. $_SESSION["poang"] . " av 3 rätt.";

    
$headers = "From: No Reply <no-reply@labb.vgy.se>\r\n";
    
$headers .= "Reply-To: no-reply@labb.vgy.se\r\n";
    
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";

    if (
mail($mottagare, $subject, $message, $headers)) {
        
$mejlmeddelande = "Resultatet har skickats!";
    } else {
        
$mejlmeddelande = "Det gick inte att skicka resultatet.";
    }
}

// Börja om
if (isset($_POST["borjaom"])) {
    
session_unset();
    
session_destroy();

    
header("Location: " . $_SERVER["PHP_SELF"]);
    exit;
}
?>

<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="UTF-8">
    <title>Frågetävling</title>
</head>
<body>

<h1>Frågetävling</h1>

<?php

if (!isset($_SESSION["inloggad"]) || $_SESSION["inloggad"] !== true) {
?>

    <form method="post">
        Lösenord:
        <input type="password" name="losenord" required>
        <button type="submit" name="loggain">Logga in</button>
    </form>

    <?php echo htmlspecialchars($fel); ?>

<?php
} elseif ($_SESSION["steg"] == 1) {
?>

    <form method="post">
        Vad heter du?
        <input type="text" name="namn" required>
        <button type="submit">Börja</button>
    </form>

    <?php echo htmlspecialchars($fel); ?>

<?php
} elseif ($_SESSION["steg"] >= 2 && $_SESSION["steg"] <= 4) {

    
$nummer = $_SESSION["steg"] - 1;
    
$fraga = $fragor[$nummer];
?>

    <h2>Fråga <?php echo $nummer; ?> av 3</h2>

    <p><?php echo htmlspecialchars($fraga["fraga"]); ?></p>

    <form method="post">

        <?php
        
foreach (["A", "B", "C", "D"] as $bokstav) {
        
?>

            <input
                type="radio"
                name="svar"
                value="<?php echo $bokstav; ?>"
                required
            >

            <?php echo htmlspecialchars($fraga[$bokstav]); ?><br>

        <?php
        
}
        
?>

        <input
            type="hidden"
            name="fraga"
            value="<?php echo $nummer; ?>"
        >

        <button type="submit">Nästa</button>

    </form>

<?php
} elseif ($_SESSION["steg"] == 5) {
?>

    <p>Du har svarat på alla frågor!</p>

    <form method="post">
        <button type="submit" name="skicka">Skicka in svar</button>
    </form>

<?php
} elseif ($_SESSION["steg"] == 6) {
?>

    <h2>Resultat</h2>

    <p>
        <?php echo htmlspecialchars($_SESSION["namn"]); ?>,
        du fick <?php echo $_SESSION["poang"]; ?> av 3 rätt!
    </p>

    <form method="post">
        <button type="submit" name="skickamejl">
            Skicka resultat via mejl
        </button>
    </form>

    <?php
    
if (isset($mejlmeddelande)) {
        echo 
htmlspecialchars($mejlmeddelande);
    }
    
?>

    <form method="post">
        <button type="submit" name="borjaom">Börja om</button>
    </form>

<?php
}
?>

</body>
</html>