PHP Form : data 2
Factorisation du code précédent :
Variables des différentes données :
<?php
$parfums = [
"Fraise" => 4,
"Chocolat" => 5,
"Vanille" => 3
];
$cornets = [
"Pot" => 2,
"Cornet" => 3
];
$supplements = [
"Pépites de chocolat" => 1,
"Chantilly" => 0.5,
"Éclats de noisettes"=> 1
];
$title = "Composez votre glace";
$ingredients = []; // tableau pour collecter les différents choix de l'utilisateur
$total = 0; // somme des différent montants liés au choix de l'utilisateur
On factorise les multiples blocs précédents en remplaçant les variables nominatives par des variables génériques, pour permettre l’application de la logique avec moins de répétitions 'parfum', 'supplement','cornet'sont regroupés comme valeurs possibles dans $name:
foreach (['parfum', 'supplement','cornet'] as $name) {
if (isset($_GET[$name])) {
$liste = $name . 's';
$choices = $_GET[$name];
if (is_array($choices)) {
foreach ($choices as $value) {
if (isset($$liste[$value])) {
$ingredients[] = $value;
$total += $$liste[$value];
}
}
} else {
if (isset($choices)) {
if (isset($$liste[$choices])) {
$ingredients[] = $choices;
$total += $$liste[$choices];
}
}
}
}
}
Si les valeurs $name récupérées par $_GET existent,chacune d’elle est ajoutée à $liste et concaténées avec un 's'pour correspondre aux noms des différents array $parfums,array $supplements,array $cornets.
Les valeurs $name récupérées par $_GETsont assignés à array$choices.
Pour chaque valeur, si la clé $liste recompilée par $$liste* a une valeur correspondante, on ajoute à array $ingredients la clé sélectionnée
et au number $total, la valeur de cette clé.
*, , , :
Infos sur le recours au $$ :
Pour chaque élément de array $ingredients, on affiche dans une liste l’ingrédient et le prix:
<div class="card-body">
<h5 class="card-title">Votre glace</h5>
<ul>
<?php foreach ($ingredients as $ingredient) : ?>
<li><?= $ingredient ?></li>
<?php endforeach; ?>
<p><strong>Prix : </strong><?= "$total €" ?></p>
</ul>
</div>