Webbserverprogrammering 1

Show sourcecode

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

webbsrvprg/exercises/

cookieses1.php
cookieses2.php
cookieses4.php
formquiz.php
formtest.php
hej.php
hejincl.php
index.php
klasser1.php
klasser2.php
klasser3.php
klasser5.php
loginses.php
logoutses.php
ovn_funk1.php
ovn_funk2.php
ovn_funk3.php
ovn_funk4.php
ovn_gr1.php
ovn_gr2.php
ovn_gr3for.php
ovn_gr3while.php
ovn_gr4.php
ovn_gr5.php
ovn_gr6.php
ovn_gr7.php
secretses.php
sida1.php
sida2.php
sida3.php
sidslut.php
sidstart.php
test.php

formquiz.php

163 lines UTF-8 Windows (CRLF)
<?php
$LOSENORD 
= "hemligt";

$fragor = [
    [
"Vilken är Sveriges huvudstad?",
        [
"Göteborg", "Stockholm", "Malmö", "Uppsala"], 1],
    [
"Vem är störst i Sverige?",
        [
"Oskar D", "Kingboy", "Smör", "Anis Don Demina"], 3],
    [
"Hur många dagar har en vanlig vecka?",
        [
"5", "6", "7", "8"], 2],
];

$losen = $_POST['losen'] ?? '';
$steg  = $_POST['steg']  ?? 'start';
$namn  = trim($_POST['namn'] ?? '');
$mailadress = trim($_POST['mailadress'] ?? '');
$svar  = [
    
1 => $_POST['svar1'] ?? '',
    
2 => $_POST['svar2'] ?? '',
    
3 => $_POST['svar3'] ?? '',
];

function 
h($s) { return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); }

function 
dolda($losen, $namn, $mailadress, $svar, $upptillOchMed) {
    echo 
'<input type="hidden" name="losen" value="' . h($losen) . '" />';
    echo 
'<input type="hidden" name="namn" value="' . h($namn) . '" />';
    echo 
'<input type="hidden" name="mailadress" value="' . h($mailadress) . '" />';
    for (
$i = 1; $i <= $upptillOchMed; $i++) {
        echo 
'<input type="hidden" name="svar' . $i . '" value="' . h($svar[$i]) . '" />';
    }
}

$inloggad = ($losen === $LOSENORD);
?>
<!DOCTYPE html>
<html lang="sv">
<head>
<meta charset="UTF-8">
<title>Frågetävling</title>
<style>
    body { font-family: Arial, sans-serif; max-width: 600px; margin: 40px auto; padding: 0 16px; }
    label { display: block; margin: 6px 0; }
    .ratt { background: #c8f7c5; padding: 4px; }
    .fel  { background: #f7c5c5; padding: 4px; }
    .fraga { margin-bottom: 20px; }
</style>
</head>
<body>
<h1>Frågetävling</h1>

<?php
if (!$inloggad) {
    if (isset(
$_POST['losen'])) echo '<p style="color:red">Fel lösenord.</p>';
?>
    <form method="post">
        <label>Lösenord: <input type="password" name="losen" required /></label>
        <input type="submit" value="Logga in" />
    </form>
<?php
}
else if (
$steg === 'start') {
?>
    <form method="post">
        <input type="hidden" name="losen" value="<?= h($losen) ?>" />
        <input type="hidden" name="steg" value="1" />
        <label>Ditt namn: <input type="text" name="namn" required /></label>
        <label>Din e-postadress: <input type="email" name="mailadress" required /></label>
        <input type="submit" value="Starta" />
    </form>
<?php
}
else if (
$steg === '1') {
    
$f = $fragor[0];
?>
    <form method="post">
        <input type="hidden" name="steg" value="2" />
        <?php dolda($losen, $namn, $mailadress, $svar, 0); ?>
        <div class="fraga">
            <h3>Fråga 1: <?= h($f[0]) ?></h3>
            <?php foreach ($f[1] as $i => $alt) { ?>
                <label><input type="radio" name="svar1" value="<?= $i ?>" required /> <?= h($alt) ?></label>
            <?php } ?>
        </div>
        <input type="submit" value="Nästa" />
    </form>
<?php
}
else if (
$steg === '2') {
    
$f = $fragor[1];
?>
    <form method="post">
        <input type="hidden" name="steg" value="3" />
        <?php dolda($losen, $namn, $mailadress, $svar, 1); ?>
        <div class="fraga">
            <h3>Fråga 2: <?= h($f[0]) ?></h3>
            <?php foreach ($f[1] as $i => $alt) { ?>
                <label><input type="radio" name="svar2" value="<?= $i ?>" required /> <?= h($alt) ?></label>
            <?php } ?>
        </div>
        <input type="submit" value="Nästa" />
    </form>
<?php
}
else if (
$steg === '3') {
    
$f = $fragor[2];
?>
    <form method="post">
        <input type="hidden" name="steg" value="resultat" />
        <?php dolda($losen, $namn, $mailadress, $svar, 2); ?>
        <div class="fraga">
            <h3>Fråga 3: <?= h($f[0]) ?></h3>
            <?php foreach ($f[1] as $i => $alt) { ?>
                <label><input type="radio" name="svar3" value="<?= $i ?>" required /> <?= h($alt) ?></label>
            <?php } ?>
        </div>
        <input type="submit" value="Skicka in" />
    </form>
<?php
}
else if (
$steg === 'resultat') {
    
$antalRatt = 0;
    foreach (
$fragor as $n => $f) {
        if (
$svar[$n + 1] !== '' && (int)$svar[$n + 1] === $f[2]) $antalRatt++;
    }
    
$totalt = count($fragor);
    
$amne = "Frågetävling resultat";
    
$text = "Spelare: $namn\nRätt svar: $antalRatt av $totalt\n";
    
$headers = "From: svaeri25@varmdogymnasium.se\r\n";
    
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
    
$skickat = false;
    if (
filter_var($mailadress, FILTER_VALIDATE_EMAIL)) {
        
$skickat = @mail($mailadress, $amne, $text, $headers);
    }
?>
    <h2>Resultat</h2>
    <p><strong>Spelare:</strong> <?= h($namn) ?><br>
       <strong>Rätt svar:</strong> <?= $antalRatt ?> av <?= $totalt ?></p>
    <p><em><?= $skickat ? "Resultatet har mejlats." : "Mejlet kunde inte skickas (kontrollera e-postadress och mejlserver)." ?></em></p>

    <?php foreach ($fragor as $n => $f) {
        
$valt = $svar[$n + 1]; ?>
        <div class="fraga">
            <h3>Fråga <?= $n + 1 ?>: <?= h($f[0]) ?></h3>
            <?php foreach ($f[1] as $i => $alt) {
                
$klass = '';
                if (
$i === $f[2]) $klass = 'ratt';
                else if (
$valt !== '' && (int)$valt === $i) $klass = 'fel';
                
$markering = ($valt !== '' && (int)$valt === $i) ? ' (ditt svar)' : '';
            
?>
                <div class="<?= $klass ?>"><?= h($alt) . $markering ?></div>
            <?php } ?>
        </div>
    <?php } ?>
    <form method="post">
        <input type="hidden" name="losen" value="<?= h($losen) ?>" />
        <input type="submit" value="Spela igen" />
    </form>
<?php
}
?>
</body>
</html>