Ver Mensaje Individual
  #6 (permalink)  
Antiguo 24/11/2014, 10:33
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Php con MySQL (novato o tan siquiera eso aún)

Cita:
Iniciado por ArturoGallegos Ver Mensaje
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 Ver Mensaje
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:
Código HTML:
Ver original
  1. <select multiple name="otro">

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:
Código HTML:
Ver original
  1. <select multiple name="otro[]">
¡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
  1. <td colspan="2">
  2.     <b>Otros:</b>
  3.     <select multiple name="otro[]">
  4.         <?php
  5.             for($i =0; $i < 7; $i++)
  6.                 echo "<option value=\"$i\" ".(in_array($i, $row["otro"]) ? "selected" : "").">$i</option>";
  7.         ?>
  8.     </select>
  9. </td>
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 24/11/2014 a las 10:39