2009-08-17 8 views
1

Ich habe eine Auswahlbox, die 3 Optionen zeigt: option1, option2, option3. Wenn ein Benutzer submit anklickt, dann habe ich in $ _POST den Wert ausgewählt. Gibt es eine einfache Möglichkeit, die Auswahlbox erneut anzuzeigen, wobei die ausgewählte Option hervorgehoben ist, OHNE dass sie in den Optionen wiederholt wird?Eine Auswahlbox mit POST-Daten auffüllen (php)

Mit anderen Worten, wenn Option2 ausgewählt ist und Senden geklickt wird, sollte die Seite erneut mit Option 2 und Option1 und Option 3 darunter angezeigt werden.

Danke.

Antwort

1

Erstellen Sie Ihre Optionen so.

$options = array("optionvalue" => "Option Name"); 

foreach($options as $value => $name) 
{ 
    if(isset($_POST['select_box'])) 
    { 
     if($_POST['select_box'] == $value) 
     { 
      echo '<option selected="selected" value="'.$value.'">'.$name.'</option>'; 
      continue; 
     } 
    } 
    echo '<option value="'.$value.'">'.$name.'</option>'; 
} 
+0

Ich bin mir ziemlich sicher, dass du das geschafft hast. Du hast selected = selected auf all deine Zweige geschrieben .... warum gibt es sogar 3 Zweige ?! Es ist entweder ausgewählt oder nicht. – mpen

+0

Dies ist ein wenig ineffizient Zeilen-von-Code-weise. @ Jordan S. Jones 'Lösung ist in dieser Hinsicht ein bisschen besser. – ceejayoz

+0

Es macht auch mehr Sinn, '$ value => $ name' zu ​​haben als die, wie Sie sie haben. – mpen

0

Wenn Sie das Auswahlfeld generieren, verwenden Sie die POST-Daten (falls verfügbar), um das ausgewählte Element auszuwählen (und/oder um die Elemente zu sortieren).

Art wie:

if($_POST["optval"] == $opt) $sel = "selected='selected'"; else $sel = ""; 
print "<option value='$opt' " . $sel . ">$opt</option>"; 

Natürlich würden Sie, dass die POST-Daten gültig sind, um zu überprüfen, und dass es existiert (isset). Angenommen, Sie erzeugen Ihre Auswahlbox aus Daten, auf die PHP zugreifen kann, anstatt sie statisch zu definieren.

+0

aktualisiert die horrenden entfernen scheitern bei PHP. –

2
<?php 

    $arrValues = array(...); 

    $selectedValue = (isset ($_POST['selectName']) ? $_POST['selectName'] : ""); 

?> 
<select name="selectName"> 
<?php 
    for ($i = 0; $i < count($arrValues); $i++) 
    { 
     $opts = ($arrValues[$i] == $selectedValue) ? ' selected="selected"': ''; 
     echo '<option value="' . $arrValues[$i] . '"' . $opts . '>' . $arrValues[$i] . '</option>'; 
    } 
?> 
</select> 
+0

Sie sollten 'count ($ arr)' nicht in einer for-Schleife verwenden. Es wird jede Iteration neu berechnet. Warum nicht einfach eine Foreach benutzen? Es ist prägnanter. – mpen

+0

Das ist ein guter Punkt Mark, ich hätte sagen können für ($ i = 0, $ size = count ($ arrValues); ...) oder benutze eine foreach. Ich nicht, weil ich heute in C#, Java, PHP und Javascript hin und her gegangen bin und nicht über die Syntax nachdenken wollte (lies: Ich war faul). :) –

+0

Danke für die Antwort, ich endete am Chacha + Ihre? : – Dirk