2010-08-13 5 views
5

Sto cercando di ottenere l'opzione selezionata usando PHP, ma ho esaurito le idee!Come selezionare un elenco a discesa html con php?

seguito è riportato il codice che ho provato fino ad ora:

<select> 
<option value="1">Yes</options> 
<option value="2">No</options> 
<option value="3">Fine</options> 
</select> 
<input type="text" value="" name="name"> 
<input type="submit" value="go" name="go"> 

Allora, che cosa devo fare?

risposta

5
<select> 
<option value="1" <?php if ($myVar==1) echo 'selected="selected"';?>>Yes</options> 
<option value="2" <?php if ($myVar==2) echo 'selected="selected"';?>>No</options> 
<option value="3" <?php if ($myVar==3) echo 'selected="selected"';?>>Fine</options> 
</select> 
<input type="text" value="" name="name"> 
<input type="submit" value="go" name="go"> 

Questo è un modo molto semplice e diretto, se ho compreso correttamente la tua domanda.

+0

Ti ho battuto di un secondo mister!: P – Iznogood

+0

@Iznogood Penso che tu intenda il contrario .. Mouseover il timestamp della tua risposta dice 17:14:48, mentre oltre la risposta di Bart, si dice 17:14:47 :) – DavChana

+2

Bene @Davinder Hai 5 anni di ritardo! :-) – Iznogood

1

Prima di tutto dare un nome alla selezione. Poi fare:

<select name="my_select"> 
<option value="1" <?= ($_POST['my_select'] == "1")? "selected":"";?>>Yes</options> 
<option value="2" <?= ($_POST['my_select'] == "2")? "selected":"";?>>No</options> 
<option value="3" <?= ($_POST['my_select'] == "3")? "selected":"";?>>Fine</options> 
</select> 

cosa che fa è controllare se ciò che è stato selezionato sia lo stesso per tutti e quando la sua trovata echo "selezionato".

-1

Questa risposta non è rilevante per i riceventi particolari, ma può essere utile per gli altri. Ho avuto un problema simile con 'selezionando' giusta 'opzione' per valore restituito dal database. L'ho risolto aggiungendo un tag aggiuntivo con display applicato: nessuno.

<?php 
$status = "NOT_ON_LIST"; 

$text = "<html> 
<head> 
</head> 
<body> 
<select id=\"statuses\"> 
    <option value=\"status\" selected=\"selected\" style=\"display:none\">$status</option> 
    <option value=\"status\">OK</option> 
    <option value=\"status\">DOWN</option> 
    <option value=\"status\">UNKNOWN</option> 
</select> 
</body> 
</html>"; 

print $text; 
?> 
12

programmatori sono pigri ... ehm .... efficiente .... mi piacerebbe farlo in questo modo:

<select><?php 
    $the_key = 1; // or whatever you want 
    foreach(array(
     1 => 'Yes', 
     2 => 'No', 
     3 => 'Fine', 
    ) as $key => $val){ 
     ?><option value="<?php echo $key; ?>"<?php 
      if($key==$the_key)echo ' selected="selected"'; 
     ?>><?php echo $val; ?></option><?php 
    } 
?></select> 
<input type="text" value="" name="name"> 
<input type="submit" value="go" name="go"> 
+0

Questa è l'unica soluzione che risolve una selezione con decine o centinaia di opzioni. +1 – Wes

0

Suppongo che si sta utilizzando un array per creare il tuo select modulo di input. In tal caso, utilizzare un array:

<?php 
    $selected = array($_REQUEST['yesnofine'] => 'selected="selected"'); 
    $fields = array(1 => 'Yes', 2 => 'No', 3 => 'Fine'); 
?> 
    <select name=‘yesnofine'> 
<?php foreach ($fields as $k => $v): ?> 
    <option value="<?php echo $k;?>" <?php @print($selected[$k]);?>><?php echo $v;?></options> 
<?php endforeach; ?> 
</select> 

In caso contrario, si può solo srotolare il ciclo precedente, e comunque utilizzare un array.

<option value="1" <?php @print($selected[$k]);?>>Yes</options> 
<option value="2" <?php @print($selected[$k]);?>>No</options> 
<option value="3" <?php @print($selected[$k]);?>>Fine</options> 

rileva che non conosco:

  • come si denomina il vostro contributo, così ho fatto un nome per esso.
  • da che parte si sta gestendo il vostro input modulo sul lato server, ho usato $_REQUEST,

Si dovrà adattare il codice per abbinare disposizioni del quadro normativo che si sta utilizzando, se del caso.

Inoltre, in molti framework è consuetudine utilizzare the alternative syntax in visualizzazione di script dedicati.

5

è possibile utilizzare questo ..

<select name="select_name"> 
    <option value="1"<?php echo(isset($_POST['select_name'])&&($_POST['select_name']=='1')?' selected="selected"':'');?>>Yes</option> 
    <option value="2"<?php echo(isset($_POST['select_name'])&&($_POST['select_name']=='2')?' selected="selected"':'');?>>No</option> 
    <option value="3"<?php echo(isset($_POST['select_name'])&&($_POST['select_name']=='3')?' selected="selected"':'');?>>Fine</option> 
</select> 
0

io uso in linea, se del

($_POST['category'] == $data['id'] ? 'selected="selected"' : false) 
+0

Per la cronaca, "inline if's" è in realtà noto come "operatore ternario". – Christian

0

Ho 2 file php e ho fatto questo, e funziona. (questo è un esempio) il primo codice proviene da un file e il secondo codice da due file.

<form action="two.php" method="post"> 
<input type="submit" class="button" value="submit" name="one"/> 
<select name="numbers"> 
<option value="1"> 1 </option> 
<option value="2"> 2 </option> 
<option value="3"> 3 </option> 
</select> 
</form> 



if(isset ($_POST['one'])) 
{ 

if($_POST['numbers']=='1') 
{ 
$a='1' ; 
} 
else if($_POST['numbers']=='2') 
{ 
$a='2' ; 
{ 
else if ($_POST['numbers']=='3') 
{ 
$a='3' ; 
} 

} 
-1

Questa è la soluzione che ho si avvicinò con:

<form name = "form1" id = "form1" action = "#" method = "post"> 
    <select name = "DropDownList1" id = "DropDownList1"> 
<?php 
$arr = array('Yes', 'No', 'Fine'); // create array so looping is easier 
for($i = 1; $i <= 3; $i++) // loop starts at first value and ends at last value 
{ 
    $selected = ''; // keep selected at nothing 
    if(isset($_POST['go'])) // check if form was submitted 
    { 
    if($_POST['DropDownList1'] == $i) // if the value of the dropdownlist is equal to the looped variable 
    { 
     $selected = 'selected = "selected"'; // if is equal, set selected = "selected" 
    } 
    } 
    // note: if value is not equal, selected stays defaulted to nothing as explained earlier 
    echo '<option value = "' . $i . '"' . $selected . '>' . $arr[$i] . '</option>'; // echo the option element to the page using the $selected variable 
} 
?> 
    </select> <!-- finish the form in html --> 
    <input type="text" value="" name="name"> 
    <input type="submit" value="go" name="go"> 
</form> 

Il codice io ho le opere fino a quando i valori sono interi in alcuni ordine numerico (crescente o decrescente). Quello che fa è avviare la lista a discesa in html e aggiunge ogni elemento opzione nel codice php. Non funzionerà se si hanno valori casuali, ad esempio: 1, 4, 2, 7, 6. Ogni valore deve essere univoco.

+2

Non è possibile renderlo più inefficiente: ** 1. ** Controllare '$ _POST ['go']' solo una volta, non su ogni iterazione nel ciclo ** 2. ** Il ciclo non prenditi cura dei cambiamenti dell'array, almeno usa 'count ($ arr)' non un numero hard-coded. ** 3. ** Il ciclo 'foreach()' di PHP gestisce automaticamente l'iterazione attraverso una matrice e recupera le chiavi e i valori - in modo da non dover avere il proprio indice di incremento. – Christian