Nadja: Auswahlliste: Mehrere Einträge vorselektieren

Hallöchen :)

Es ist sicherlich ein ganz banaler Fehler und ich habe einfach ein Brett vor dem Kopf, aber ich sitze nun schon seit Stunden an dem Problem, habe schon das Forumsarchiv und Google dazu befragt, aber keine hilfreiche Lösung entdeckt.

Also Folgendes:
Ich habe ein Formular, in welchem sich eine Auswahlliste mit Mehrfachauswahl befindet.
Ich habe es inzwischen geschafft, dass mir nach Absenden des Formulars diese Mehrfachauswahl in einem Array zur Verfügung steht.

Das Problem:
Sollte der User falsche Eingaben machen, erhält er das Formular mit seinen bereits getätigten Eingaben + entsprechender Fehlermeldung.
Leider schaffe ich es nicht, dass ALLE Einträge, die der User selektiert hat, auch wieder selektiert sind.

Hier meine bisherige Lösung:

  
<select name="tln_hauptinteresse[]" size="3" multiple>  
  <?php for($i=0; $i<sizeof($tln_hauptinteresse); $i++) { ?>  
    <option value="Entwicklung" <?php if($tln_hauptinteresse[$i] == "Entwicklung") print "selected"; ?>>Entwicklung (Lösungsvorschläge, Technische Information, usw.)</option>  
    <option value="Consulting" <?php if($tln_hauptinteresse[$i] == "Consulting") print "selected"; ?>>Consulting (Prozesse, Schulung, usw.)</option>  
    <option value="Management" <?php if($tln_hauptinteresse[$i] == "Management") print "selected"; ?>>Management (Organisation, Steuerung, usw.)</option>  
  <?php } ?>  
</select>  

Das Array heißt "tln_hauptinteresse" und beinhaltet halt die vom User ausgewählten Einträge der Auswahlliste.

Ich wäre für jeden Hinweis dankbar, wo ich falsch angesetzt habe, um die bereits getroffene Auswahl an Listeneinträgen erneut zu selektieren.

Vielen lieben Dank im Voraus!

Liebe Grüße,
Nadja

--
system.exit(0);
  1. Hallöchen :)

    Kleiner Nachtrag:
    Ich habe eben festgestellt, dass die Zeile <?php for($i=0; $i<sizeof($tln_hauptinteresse); $i++) { ?> an dieser Stelle ganz schlecht ist, weil ja so die Auswahlmöglichkeiten mehrmals erzeugt werden.

    Ändert zwar nichts an meinem Problem, aber das habe ich eben herausgefunden.

    Liebe Grüße,
    Nadja

    --
    system.exit(0);
  2. echo $begrüßung;

    Ich wäre für jeden Hinweis dankbar, wo ich falsch angesetzt habe, um die bereits getroffene Auswahl an Listeneinträgen erneut zu selektieren.

    Es ist meist so, dass man seine eigenen Fehler findet, wenn man sich die erwarteten Ergebnisse mit den tatsächlich vorhandenen vergleicht. Auch in deinem Fall wirst du dann sehen, woran es scheitert. Also lass dir den Inhalt deiner Variablen ausgeben. Dazu eignet sich neben einem einfachen echo/print auch print_r() und var_dump() für komplexe Strukturen wie Arrays. (Ein vorangehendes <pre> erhöht die Übersichtlichkeit der Anzeige.)
    Auch ist es vorteilhaft, beim Entwickeln das error_reporting auf E_ALL zu stellen, um Zugriffe auf nicht vorhandene Variablen angezeigt zu bekommen.

    echo "$verabschiedung $name";

  3. Hallo Nadja,

    Ich versuche mal, das etwas schematischer zu erklaeren. Stell dir vor du hast ein Array mit allen Werten fuer die Selectbox, das sieht so aus (ich unterstelle mal, Werte und Text sind unterschiedlich, das spielt aber spaeter keine Rolle):

      
    $alle_paare = array('a_value' => 'a_text',  
                        'b_value' => 'b_text',  
                        'c_value' => 'c_text',  
                        'd_value' => 'd_text',  
                        'e_value' => 'e_text',  
                        'f_value' => 'f_text');  
    
    

    Dann hast du ein zunaechst leeres Array, auf dessen Inhalt wir spaeter noch kommen werden:

      
    $gewaehlte_paare = array();  
    
    

    Jetzt bildest Du die Optionen in einer Schleife aus Array $alle_paare und beruecksichtigst hierbei die Werte aus $gewaehlte_paare:

      
    $selectbox  = "<select name=\"meine_paare\">\n";  
    foreach ($alle_paare as $wert => $text)  
    {  
      // wenn der entsprechende Wert in $gewaehlte_paare vorhanden, auswaehlen  
      $selected = in_array($wert, $gewaehlte_paare) ? ' selected="selected"' : '';  
      $selectbox  .= '<option value="' . $wert . '"' . $selected . '>' . $text . "</option>\n";  
    }  
    $selectbox  . = "</select>\n";  
    
    

    Nach dem Posten kopierst du die ausgewaehlten Paare in das Array $gewaehlte_paare. Die Zeile

      
    $gewaehlte_paare = array();  
    
    

    musst du also ersetzen durch

      
    $gewaehlte_paare = !empty($_POST['meine_paare']) ? $_POST['meine_paare'] : array();  
    
    

    Gruß,

    Dieter