Webbserverprogrammering 1

Show sourcecode

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

Webbsrvprg/ovningar/php_formulär/

php_formulär_1.php
php_formulär_2.php
php_formulär_3.php
php_formulär_4.php
php_formulär_5.php
php_formulär_6.php

php_formulär_6.php

89 lines UTF-8 Windows (CRLF)
<?php
// GitHub Copilot

declare(strict_types=1);

function 
sanitizeArray(array $values): array {
    return 
array_values(array_filter(array_map(function($v) {
        
$v trim((string)$v);
        return 
$v === '' null htmlspecialchars($vENT_QUOTES ENT_SUBSTITUTE'UTF-8');
    }, 
$values)));
}

function 
formatFavorites(array $favorites): string {
    
$count count($favorites);
    if (
$count === 0) {
        return 
'Du har inte valt någon maträtt.';
    }
    if (
$count === 1) {
        return 
'Din favoritmaträtt är ' $favorites[0] . '.';
    }
    
// Join with commas and "och" before last item
    
if ($count === 2) {
        
$text $favorites[0] . ' och ' $favorites[1];
    } else {
        
$last array_pop($favorites);
        
$text implode(', '$favorites) . ' och ' $last;
    }
    return 
'Dina favoritmaträtter är ' $text '.';
}

function 
renderForm(array $selected = []): void {
    
$options = ['Pizza''Sushi''Tacos''Pasta''Sallad''Kebab''Biff'];
    
// Ensure values are safe for attributes
    
$sel array_map('htmlspecialchars'$selectedarray_fill(0count($selected), ENT_QUOTES));
    
?>
    <!doctype html>
    <html lang="sv">
    <head>
        <meta charset="utf-8">
        <title>Välj maträtter</title>
    </head>
    <body>
        <h1>Välj dina favoritmaträtter</h1>
        <form method="post">
            <label for="matratter">Maträtter (välj en eller flera):</label><br>
            <select name="matratter[]" id="matratter" multiple size="6">
                <?php foreach ($options as $opt): 
                    
$escaped htmlspecialchars($optENT_QUOTES'UTF-8');
                    
$isSelected in_array($opt$selectedtrue) ? ' selected' '';
                
?>
                    <option value="<?php echo $escaped?>"<?php echo $isSelected?>><?php echo $escaped?></option>
                <?php endforeach; ?>
            </select>
            <br><br>
            <button type="submit">Skicka</button>
        </form>
    </body>
    </html>
    <?php
}

// Main
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    
$raw $_POST['matratter'] ?? [];
    if (!
is_array($raw)) {
        
$raw = [$raw];
    }
    
$favorites sanitizeArray($raw);

    
// Output result page
    
?>
    <!doctype html>
    <html lang="sv">
    <head>
        <meta charset="utf-8">
        <title>Resultat</title>
    </head>
    <body>
        <h1>Resultat</h1>
        <p><?php echo formatFavorites($favorites); ?></p>
        <p><a href="<?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES'UTF-8'); ?>">Gör ett nytt val</a></p>
    </body>
    </html>
    <?php
    
exit;
}

// Show form initially
renderForm([]);