Chris: Übergabe eines arrays mittels Formular

Beitrag lesen

Hallo,

ich möchte erreichen, daß bei fehlerhaftem Ausfüllen eines Formulars dasselbe Formular nocheinmal angezeigt wird. Das Problem liegt darin, daß der Inhalt der Mehrfachauswahlbox anschließend nicht mehr vollständig ist. Die Daten der Box liegen in einem array. M.E. muß ich dieses (Original-)array mit übergeben?.? Kann mir jemand helfen???

Ich wills mal versuchen:

Werde Dir als erstes über die unterschiedlichen Darstellungsformen der Daten (Parameter) in ihren unterschiedlichen Stationen klar.

Der Browser erwartet für die Darstellung der Datenfelder

<input ...> Anweisungen

  • text (und seine Brüder)
  • radio     entspricht select single
  • checkbox  entspricht select multiple
  • file

<select ...> Anweisungen

  • single
  • multiple

<textarea ...> Anweisung

HTML kennt keine Variablen.
Also musst Du die anzuzeigenden Daten in ausgerechneter Form, also im Klartext, übergeben. Der Rückweg der Daten geht dann über Toupel (Paare aus Namen und Wert). Bei Multiple-Select-Feldern ist man bei Verarbeitung der daten mit PHP dazu gezwungen, den Namen als Array vorzubestimmen. Anderenfalls überschreibt der nächste Wert seinen Vorgänger.

Das sieht dann so aus:

<select multiple name="sel_feld1[]">
  ...
  <option selected value="3">drei</option>
  ...
</select>

Bei welcher Option Du selected hinzufügen musst, musst Du bei der Generierung der Option-Zeilen feststellen. Das Beste ist, sich eine Funktion zu erstellen, die die Option-Zeilen erzeugt:

$name = Name des Select-Objektes
$presetlist = Array mit den zur Auswahl stehenden Werten
              die könnten auch aus einem Query stammen
$selectlist = Array mit den ausgewählten Werten

function optionlist($name, $presetlist, $selectlist)
{
  if (!is_array($presetlist)) // foreach verträgt nur Arrays
  {
    return false;
  }

echo "\n<select multiple $name"."[]>";

$optionlist="";

foreach($presetlist as $pre)
  {
    $selected="";
    if(in_array($pre,$selectlist))
    {
      $selected = " selected ";
    }
    echo "\n  <option $selected value="$pre">$pre</option>";
  }

echo "</select">
}

So ungefähr müsste es klappen. Weitere Variationen mit $lines, $style, $nochoice, etc sind denkbar.

Bis denne

Chris