Hab dort grad mal eine Pizza nur mit Tomaten bestellt.
Wie hast Du das denn getan?
$optionen = array(
#...
'zutaten' => array('Salami', 'Schinken', 'Paprika', 'Speck')
);
case 'zutaten':
if (is_array($value)) {
foreach ($value as $zutat) {
if (in_array($zutat, $optionen[$key])) {
$bestellung[$key][] = $zutat;
}
}
}
Das ging gar nicht, war nicht vorgesehen. Siehe oben.
Landet diese eine Zutat trotzdem in einem Array oder benötigt die is_array-Abfrage in diesem Fall einen else-Zweig?
Auch eine einzelne Zutat landet im Array. Versuche
<?php
$zutaten = [ 'Salami', 'Schinken', 'Paprika', 'Speck' ];
foreach ( $zutaten as $zutat ) {
echo "
<label>
<input type='checkbox' name='zutat[]' value='$zutat'>$zutat
</label>";
}
als Formular und du wirst sehen, dass $_POST['zutat']
- sofern der Key in $_POST
nach dem Absenden existiert - stets ein Array ist.
Wenn Du aber meinst, dass Du gar keine Zutat bestellst hast (Hinweis: Es gibt auch weiße Pizzas, also ohne Tomaten): Dann „kommt es darauf an“. Denn je nachdem wie die Formulareingabe verarbeitet wird (Browser oder eigenes JavaScript) gibt es zwei drei denkbare Fälle:
Nach dem Versenden der Formulardaten und also der automatischen Übernahme der Daten aus php://input
sieht $_POST
wie folgt aus:
$_POST['zutat']
existiert nicht. Folge: Dercase
tritt im besprochenen Skript nicht ein.$_POST['zutat']
ist ein leerer Array. Dercase
tritt ergo ein, aber da$_POST['zutat']
leer (oder (Fall 3, „falsche Verarbeitung in JS“:) ein String mit dem Inhalt '[]') ist, geht dasforeach ( $_POST['zutat'] as $zutat )
oder schon vorher dasif ( is_array() )
ins Leere.
In beiden allen gezeigten Fällen wird also fehlerfrei keine Zutat zur Bestellung hinzugefügt.
Das das Skript im Wiki hinsichtlich der Fehlerbehandlung modernen Möglichkeiten nicht mehr im vollen Umfang genügt wurde schon oft genug erwähnt. Diese hinzuzufügen könnte aber auch das Verständnis erschweren.