Cita:
Iniciado por ArturoGallegos al convertir un select en múltiple este se convierte en un array por lo que si pones $x=='1' siempre sera falso porque lo que tienes es array('1','2');...
Esto no es necesariamente cierto.
La prueba es este caso particular.
Cita:
Iniciado por espaca ArturoGallegos este es el error que me da al utilizar la opción tuya: ( ! ) Warning: in_array() expects parameter 2 to be array, string given in C:\wamp\www\alu\modificar.php on line 180
con estos parámetros:<td colspan="2"><b>Otros:</b><br/> <?= stripslashes($row['otro']) ?> <select multiple name="otro"> <option value="Inglés"<?php if (in_array('Inglés',$row['otro'])) echo "selected" ?>>Inglés</option> <option value="Francés" <?php if (in_array('Francés',$row['otro'])) echo "selected" ?>>Francés</option> </select> </td>
En efecto ese es el error que obtendrás ya que no es un array lo que recibes.
¿Porque? Bueno por esto:
Que un select sea multiple no quiere decir que tenga muchos valores, es como tener un conjunto de checkboxes con el mismo name, en este caso particular, el name es "
otro" y ahi esta el problema, en el name.
Cuando un conjunto de valores que comparten el mismo name es enviado, solo se envia el primero de la seleccion, es decir si en tu select marcas 5 opciones, solo se envia la primera, si en un conjunto de checkbox marcas 5, solo se enviara el primero, ¿Porque ocurre esto? Bueno, porque en el name tu estas diciendo que es un valor escalar, no un conjunto de valores.
Que un select sea multiple indica que el usuario PUEDE ELEGIR un conjunto de valores, pero NO SIGNIFICA que se envie un conjunto de valores, al igual que si se tiene un grupo de checkbox significa que el usuario PUEDE MARCAR mas de una opcion pero no que se vallan a enviar todas las opciones marcadas.
¿Confuso? Si, un poco al principio, pero al final tiene sentido.
Entendiendo que el problema esta en el name, la pregunta es ¿Como lo suluciono?
Simple, debes decir que ese select multiple es un conunto de valores asi:
¡Y eso es todo! esta solucion aplica tambien a un conjunto de checkbox o cualquier otro conjunto de elementos, no hace falta siquiera que sean del mismo tipo.
Moraleja: Si tienes un conjunto de datos, nombrarlos como un conjunto en el atributo name.
Ahora si estas listo para aplicar la solucion que te menciono @ArturoGallegos y ya que estas, podrias combinarla con la que te sugirió @plasma_go, seria algo asi:
Código PHP:
Ver original<td colspan="2">
<b>Otros:</b>
<select multiple name="otro[]">
<?php
for($i =0; $i < 7; $i++)
echo "<option value=\"$i\" ".(in_array($i, $row["otro"]) ?
"selected" : "").">$i</option>"; ?>
</select>
</td>