2010-08-13 50 views
5

Estoy tratando de obtener la opción seleccionada usando PHP, ¡pero se me acabaron las ideas!¿Cómo preseleccionar una lista desplegable de html con php?

A continuación se muestra el código que han tratado hasta ahora:

<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"> 

Así que, ¿qué tengo que hacer?

Respuesta

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"> 

Esta es una manera muy simple y directa, si entiendo su pregunta correctamente.

+0

¡Te gané por un segundo señor!: P – Iznogood

+0

@Iznogood Creo que te refieres a la otra forma .. Mouseover la marca de tiempo de tu respuesta dice 17:14:48, mientras que sobre la respuesta de Bart, dice 17:14:47 :) – DavChana

+2

Bien @Davinder ¡Tienes 5 años de retraso! :-) – Iznogood

1

Primero de todo, dé un nombre a su selección. A continuación, haga:

<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> 

Lo que hace es comprobar si lo que se seleccionó es el mismo para cada uno y cuando su eco encontrado "seleccionado".

-1

Esta respuesta no es relevante para un receptor particular, pero puede ser útil para otros. Tuve un problema similar con 'seleccionar' la 'opción' correcta por valor devuelto desde la base de datos. Lo resolví agregando una etiqueta adicional con la pantalla aplicada: ninguna.

<?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

Los programadores son perezosos ... er .... eficiente .... yo lo haría así:

<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

Esta es la única solución que se dirige a una selección con decenas o cientos de opciones. +1 – Wes

0

supongo que está utilizando una matriz para crear su select formulario de entrada. En ese caso, utilice una matriz:

<?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> 

Si no es así, sólo puede desenrollar el bucle de arriba, y seguir utilizando una matriz.

<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> 

Observa que no conozco:

  • cómo se está nombrando a su entrada, por lo que he hecho un nombre para él.
  • el camino que está manejando su formulario de entrada en el lado del servidor, he utilizado $_REQUEST,

Tendrá que adaptar el código para que coincida con los requisitos del marco que está utilizando, en su caso.

Además, es habitual en muchos marcos usar the alternative syntax en scripts de visualización específicos.

5

puede utilizar este ..

<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

utilizo en línea si de

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

Para el registro, "en línea if" se conoce como el "operador ternario". – Christian

0

Tengo 2 archivos php y he hecho esto, y funciona. (este es un ejemplo) el primer código es del único archivo y el segundo código de dos archivos.

<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

Esta es la solución que he ocurrió:

<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> 

El código que tengo funciona siempre y cuando los valores son números enteros en un orden numérico (ascendente o descendente). Lo que hace es iniciar la lista desplegable en html y agrega cada elemento de opción en el código php. Sin embargo, no funcionará si tiene valores aleatorios, es decir: 1, 4, 2, 7, 6. Cada valor debe ser único.

+2

No podría hacerlo más ineficiente: ** 1. ** Compruebe si '$ _POST ['go']' solo una vez, no en cada iteración en el ciclo ** 2. ** Su ciclo no cuide los cambios en la matriz, al menos use 'count ($ arr)' no un número codificado. ** 3. ** El bucle 'foreach()' de PHP maneja automáticamente la iteración a través de una matriz y la recuperación de las claves y valores, por lo que no necesita tener su propio índice de incremento. – Christian

Cuestiones relacionadas