Webbserverprogrammering 1

Show sourcecode

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

webbsrvprg/exercises/

db-test.php
ovn_form1.php
ovn_form2.php
ovn_form3.php
ovn_form4.php
ovn_form5.php
ovn_form6.php
ovn_form7.php
ovn_form8.php
ovn_fragetavling.php
ovn_funk1.php
ovn_funk2.php
ovn_funk3.php
ovn_funk4.php
ovn_funk5.php
ovn_funk6.php
ovn_gr1.php
ovn_gr2.php
ovn_gr3.php
ovn_gr4.php
ovn_gr5.php
svar/
tarningsduellen.php

ovn_fragetavling.php

202 lines UTF-8 Unix (LF)
<?php
error_reporting
(-1);
ini_set('display_errors', 1);
ini_set('output_buffering', 0);

session_start();

$rattLosenord = "Axelärbäst";
$fragor = [
    
1 => [
        
"fraga" => "Hur hämtar PHP värden från ett formulär som skickas med metoden POST?",
        
"alternativ" => ["a" => '$_GET', "b" => '$_POST', "c" => '$_SERVER', "d" => '$_SESSION'],
        
"ratt" => "b"
    
],
    
2 => [
        
"fraga" => "Vilken funktion används för att visa användarens text säkert i HTML?",
        
"alternativ" => ["a" => "mail()", "b" => "include()", "c" => "htmlspecialchars()", "d" => "strlen()"],
        
"ratt" => "c"
    
],
    
3 => [
        
"fraga" => "Vilken formulärmetod skickar vanligtvis värdena i förfrågans innehåll i stället för i webbadressen?",
        
"alternativ" => ["a" => "GET", "b" => "POST", "c" => "LINK", "d" => "HTML"],
        
"ratt" => "b"
    
]
];

$felLosenord = false;
$fel = "";
$namn = isset($_POST["namn"]) && is_string($_POST["namn"]) ? trim($_POST["namn"]) : "";
$epost = isset($_POST["epost"]) && is_string($_POST["epost"]) ? trim($_POST["epost"]) : "";
$svar = [
    
1 => isset($_POST["svar1"]) && is_string($_POST["svar1"]) ? $_POST["svar1"] : "",
    
2 => isset($_POST["svar2"]) && is_string($_POST["svar2"]) ? $_POST["svar2"] : "",
    
3 => isset($_POST["svar3"]) && is_string($_POST["svar3"]) ? $_POST["svar3"] : ""
];

if (
$_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["losenord"])) {
    if (
is_string($_POST["losenord"]) && $_POST["losenord"] === $rattLosenord) {
        
$_SESSION["fragetavling_inloggad"] = true;
    } else {
        
$felLosenord = true;
    }
}

$inloggad = isset($_SESSION["fragetavling_inloggad"]) && $_SESSION["fragetavling_inloggad"] === true;
$steg = 1;
$visaResultat = false;
$mejlSkickat = false;
$antalRatt = 0;
$skickat = $_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["skicka"]);

if (
$inloggad && $skickat) {
    if (
$namn === "" || !filter_var($epost, FILTER_VALIDATE_EMAIL)) {
        
$fel = "Namn eller e-postadress saknas eller är ogiltig.";
    } else {
        foreach (
$fragor as $nummer => $fraga) {
            if (!
array_key_exists($svar[$nummer], $fraga["alternativ"])) {
                
$fel = "Ett eller flera svar saknas. Börja om och svara på alla frågor.";
                break;
            }
            if (
$svar[$nummer] === $fraga["ratt"]) {
                
$antalRatt++;
            }
        }
    }

    if (
$fel === "") {
        
$visaResultat = true;
        
$meddelande = "Resultat for " . $namn . ": " . $antalRatt . " av 3 ratt.\n\n";
        foreach (
$fragor as $nummer => $fraga) {
            
$meddelande .= "Fraga " . $nummer . ": " . $fraga["alternativ"][$svar[$nummer]] . "\n";
        }

        
$rubrik = "Quiz result";
        
$mejlhuvud = "From: " . $epost . "\r\nReply-To: " . $epost;
        
$mejlSkickat = mail($epost, $rubrik, $meddelande, $mejlhuvud);
    }
} elseif (
$inloggad && $_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["nasta"])) {
    
$forraSteget = (int)($_POST["steg"] ?? 0);

    if (
$forraSteget === 1) {
        if (
$namn === "" || !filter_var($epost, FILTER_VALIDATE_EMAIL) || !array_key_exists($svar[1], $fragor[1]["alternativ"])) {
            
$fel = "Fyll i namn, en giltig e-postadress och ett svar på fråga 1.";
        } else {
            
$steg = 2;
        }
    } elseif (
$forraSteget === 2) {
        if (!
array_key_exists($svar[1], $fragor[1]["alternativ"]) || !array_key_exists($svar[2], $fragor[2]["alternativ"])) {
            
$steg = 2;
            
$fel = "Välj ett svar på fråga 2.";
        } else {
            
$steg = 3;
        }
    }
}
?>
<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="UTF-8">
    <title>Frågetävling</title>
</head>
<body>
    <h1>Frågetävling om PHP</h1>

    <?php if (!$inloggad): ?>
        <p>Ange lösenordet för att öppna frågorna.</p>
        <?php if ($felLosenord): ?>
            <p>Fel lösenord. Försök igen.</p>
        <?php endif; ?>
        <form action="" method="POST">
            <p>
                <label for="losenord">Lösenord:</label>
                <input type="password" id="losenord" name="losenord" required>
            </p>
            <button type="submit">Öppna frågorna</button>
        </form>
    <?php elseif ($visaResultat): ?>
        <p><?= htmlspecialchars($namn, ENT_QUOTES, "UTF-8") ?> fick <?= $antalRatt ?> av 3 rätt.</p>
        <?php if ($mejlSkickat): ?>
            <p>Resultatet skickades till <?= htmlspecialchars($epost, ENT_QUOTES, "UTF-8") ?>.</p>
        <?php else: ?>
            <p>Resultatet kunde inte skickas med e-post här. Prova på labbservern.</p>
        <?php endif; ?>

        <h2>Dina svar</h2>
        <?php foreach ($fragor as $nummer => $fraga): ?>
            <h3>Fråga <?= $nummer ?>: <?= htmlspecialchars($fraga["fraga"], ENT_QUOTES, "UTF-8") ?></h3>
            <ul>
                <?php foreach ($fraga["alternativ"] as $bokstav => $text): ?>
                    <li>
                        <span style="color: <?= $bokstav === $fraga["ratt"] ? "green" : ($bokstav === $svar[$nummer] ? "red" : "black") ?>;">
                            <?= htmlspecialchars($text, ENT_QUOTES, "UTF-8") ?>
                        </span>
                        <?php if ($bokstav === $fraga["ratt"]): ?> (rätt svar)<?php endif; ?>
                        <?php if ($bokstav === $svar[$nummer]): ?> (ditt svar)<?php endif; ?>
                    </li>
                <?php endforeach; ?>
            </ul>
        <?php endforeach; ?>
        <p><a href="">Gör frågetävlingen igen</a></p>
    <?php elseif ($skickat): ?>
        <p><?= htmlspecialchars($fel, ENT_QUOTES, "UTF-8") ?></p>
        <p><a href="">Börja om frågetävlingen</a></p>
    <?php else: ?>
        <?php if ($fel !== ""): ?>
            <p><?= htmlspecialchars($fel, ENT_QUOTES, "UTF-8") ?></p>
        <?php endif; ?>

        <?php if ($steg === 1): ?>
            <h2>Fråga 1 av 3</h2>
            <form action="" method="POST">
                <input type="hidden" name="steg" value="1">
                <p>
                    <label for="namn">Namn:</label>
                    <input type="text" id="namn" name="namn" value="<?= htmlspecialchars($namn, ENT_QUOTES, "UTF-8") ?>" required>
                </p>
                <p>
                    <label for="epost">E-postadress (använd din @varmdogymnasium.se-adress på labbservern):</label>
                    <input type="email" id="epost" name="epost" value="<?= htmlspecialchars($epost, ENT_QUOTES, "UTF-8") ?>" required>
                </p>
                <p>Hur hämtar PHP värden från ett formulär som skickas med metoden POST?</p>
                <p><label><input type="radio" name="svar1" value="a" <?= $svar[1] === "a" ? "checked" : "" ?> required> $_GET</label></p>
                <p><label><input type="radio" name="svar1" value="b" <?= $svar[1] === "b" ? "checked" : "" ?>> $_POST</label></p>
                <p><label><input type="radio" name="svar1" value="c" <?= $svar[1] === "c" ? "checked" : "" ?>> $_SERVER</label></p>
                <p><label><input type="radio" name="svar1" value="d" <?= $svar[1] === "d" ? "checked" : "" ?>> $_SESSION</label></p>
                <button type="submit" name="nasta" value="1">Nästa fråga</button>
            </form>
        <?php elseif ($steg === 2): ?>
            <h2>Fråga 2 av 3</h2>
            <form action="" method="POST">
                <input type="hidden" name="steg" value="2">
                <input type="hidden" name="namn" value="<?= htmlspecialchars($namn, ENT_QUOTES, "UTF-8") ?>">
                <input type="hidden" name="epost" value="<?= htmlspecialchars($epost, ENT_QUOTES, "UTF-8") ?>">
                <input type="hidden" name="svar1" value="<?= htmlspecialchars($svar[1], ENT_QUOTES, "UTF-8") ?>">
                <p>Vilken funktion används för att visa användarens text säkert i HTML?</p>
                <p><label><input type="radio" name="svar2" value="a" <?= $svar[2] === "a" ? "checked" : "" ?> required> mail()</label></p>
                <p><label><input type="radio" name="svar2" value="b" <?= $svar[2] === "b" ? "checked" : "" ?>> include()</label></p>
                <p><label><input type="radio" name="svar2" value="c" <?= $svar[2] === "c" ? "checked" : "" ?>> htmlspecialchars()</label></p>
                <p><label><input type="radio" name="svar2" value="d" <?= $svar[2] === "d" ? "checked" : "" ?>> strlen()</label></p>
                <button type="submit" name="nasta" value="1">Nästa fråga</button>
            </form>
        <?php else: ?>
            <h2>Fråga 3 av 3</h2>
            <form action="" method="POST">
                <input type="hidden" name="namn" value="<?= htmlspecialchars($namn, ENT_QUOTES, "UTF-8") ?>">
                <input type="hidden" name="epost" value="<?= htmlspecialchars($epost, ENT_QUOTES, "UTF-8") ?>">
                <input type="hidden" name="svar1" value="<?= htmlspecialchars($svar[1], ENT_QUOTES, "UTF-8") ?>">
                <input type="hidden" name="svar2" value="<?= htmlspecialchars($svar[2], ENT_QUOTES, "UTF-8") ?>">
                <p>Vilken formulärmetod skickar vanligtvis värdena i förfrågans innehåll i stället för i webbadressen?</p>
                <p><label><input type="radio" name="svar3" value="a" required> GET</label></p>
                <p><label><input type="radio" name="svar3" value="b"> POST</label></p>
                <p><label><input type="radio" name="svar3" value="c"> LINK</label></p>
                <p><label><input type="radio" name="svar3" value="d"> HTML</label></p>
                <button type="submit" name="skicka" value="1">Skicka in svar</button>
            </form>
        <?php endif; ?>
    <?php endif; ?>

    <p><a href="../exercises.php">Tillbaka till Mina övningar</a></p>
</body>
</html>