Antwort an „Raketenwilli“ verfassen

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: Der case tritt im besprochenen Skript nicht ein.
  • $_POST['zutat'] ist ein leerer Array. Der case tritt ergo ein, aber da $_POST['zutat'] leer (oder (Fall 3, „falsche Verarbeitung in JS“:) ein String mit dem Inhalt '[]') ist, geht das foreach ( $_POST['zutat'] as $zutat ) oder schon vorher das if ( 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.

freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen