Foros del Web » Programando para Internet » PHP »

Php con MySQL (novato o tan siquiera eso aún)

Estas en el tema de Php con MySQL (novato o tan siquiera eso aún) en el foro de PHP en Foros del Web. Hola a todos, muchas veces he revisado esta página, pero debido a mi inexperiencia en estos temas, no me había atrevido a consultar debido a ...
  #1 (permalink)  
Antiguo 21/11/2014, 08:08
 
Fecha de Ingreso: noviembre-2014
Mensajes: 3
Antigüedad: 9 años, 5 meses
Puntos: 0
Busqueda Php con MySQL (novato o tan siquiera eso aún)

Hola a todos, muchas veces he revisado esta página, pero debido a mi inexperiencia en estos temas, no me había atrevido a consultar debido a que mis preguntas son nivel (noob), se que google esta lleno de respuestas y las he encontrado, pero muchas veces (más bien la mayoria) no soy capaz de aplicarlas para que me funcionen.

Hoy voy a dar el paso de hacer una consulta que para muchos, será una gran tontería, pero a mi me cuesta horas y horas, de búsquedas y de pruebas.

Espero que no les importe ayudar a gente con nivel bajo de php/mysql.
Son varias las preguntas que tengo y que no consigo solucionar, pero solo haré la que considero más dificil.

Esta sería la cuestión principal.

tengo un php "(mal hecho, pero como ya dije es nivel novato, se que con variables, se pueden cambiar todo el texto que he puesto a mano, pero no he sido capaz aún)", en el que debería recoger un campo <select multiple> de un set de mysql, pero solamente consigo que me guarde el ultimo dato de los seleccionados.
<?php
.....

<td colspan="2"><b>Otros:</b><br/> <?= stripslashes($row['otro']) ?>
<select multiple name="otro">
<option value="1"<?php if ($row['otro']=="1") echo "selected" ?>>1</option>
<option value="2" <?php if ($row['otro']=="2") echo "selected" ?>>2</option>
<option value="3"<?php if ($row['otro']=="3") echo "selected" ?>>3</option>
<option value="4"<?php if ($row['otro']=="4") echo "selected" ?>>4</option>
<option value="5"<?php if ($row['otro']=="5") echo "selected" ?>>5</option>
<option value="6"<?php if ($row['otro']=="6") echo "selected" ?>>6</option>
</select>
</td>
....

?>

Espero que puedan ayudarme.

Un saludo
  #2 (permalink)  
Antiguo 21/11/2014, 09:28
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 1 mes
Puntos: 1146
Respuesta: Php con MySQL (novato o tan siquiera eso aún)

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');

prueba con
Código PHP:
Ver original
  1. <option value="1"<?php if (in_array('1',$row['otro'])) echo "selected" ?>>1</option>

Si no te funciona planteate el hecho de que no lo estés procesando bien... por si las dudas imprime var_dump($row['otro']), y ve si los datos están allí o ni siquiera llegan a la variable.
  #3 (permalink)  
Antiguo 21/11/2014, 09:50
 
Fecha de Ingreso: mayo-2014
Ubicación: Mexico
Mensajes: 79
Antigüedad: 9 años, 10 meses
Puntos: 2
Respuesta: Php con MySQL (novato o tan siquiera eso aún)

Quedaria algo asi
Código PHP:
Ver original
  1. <td colspan="2"><b>Otros:</b><br/> <?= stripslashes($row['otro']) ?>
  2. <select multiple name="otro">
  3. <?php
  4. for($i =0; $i < 7; $i++)
  5.           echo "<option value='" .$i. "'" .$row['otro']= $i. "selected'>" .$i. "</option>";
  6. ?>
  7. </select>
  8. </td>
  #4 (permalink)  
Antiguo 22/11/2014, 04:57
 
Fecha de Ingreso: noviembre-2014
Mensajes: 3
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Php con MySQL (novato o tan siquiera eso aún)

Muchísimas gracias por las molestias, he probado las 2 opciones pero ambas me dan error.
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>

Plasma_go

En el caso del código que me pasaste :<td colspan="2"><b>Otros:</b><br/> <?= stripslashes($row['otro']) ?> <select multiple name="otro"> <?php for($i =0; $i < 14; $i++) echo "<option value='" .$i. "'" .$row['otro']= $i. "selected'>" .$i. "</option>"; ?> </select> </td> , no da error, eso es bueno :), pero tampoco me agrega todas las selecciones, como máximo me agrega 3, el 0 agrega campo vacío, el 1 agrega inglés, el 2 agrega francés, el 3 agrega (no se el motivo) inglés y francés, el 4 agrega alemán, el 5 agrega inglés y alemán, el 6 agrega francés y alemán, el 7 inglés, francés y alemán, el ruso, el 8 ruso, el 9 inglés y ruso, el 10 francés y ruso, 11 inglés francés y ruso, 12 alemán y ruso y por último, el 13 inglés alemán y ruso. No se que puedo estar haciendo mal.

En la BD tengo definido el campo de la siguiente manera: `otro` set('Inglés','Francés','Alemán','Ruso','Italiano', 'Español','Gallego','Catalán','Polaco','Griego','S ueco','Portugués','Holandés','Finlandés') CHARACTER SET utf8 COLLATE utf8_spanish_ci DEFAULT NULL

Alguna idea de por que solamente trabaja los 4 primeros campos, motivo por el que automaticamente une en un solo campo diferentes nacionalidades?.

Muchísimas gracias por haber contestado el anterior mensaje.
  #5 (permalink)  
Antiguo 24/11/2014, 09:23
 
Fecha de Ingreso: mayo-2014
Ubicación: Mexico
Mensajes: 79
Antigüedad: 9 años, 10 meses
Puntos: 2
Respuesta: Php con MySQL (novato o tan siquiera eso aún)

Se necesita mas codigo para saber cual es el error, cuando pases el codigo utilizas los highlight para que se pueda ver mejor, ademas de estructurarlo para su rapida lectura.

Ahora te recomiendo que en un php nuevo, pon la consulta e imprime nada mas los resultados, sin utilizar un combobox y ver como te arrojan los resultados
  #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: 11 años, 11 meses
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
  #7 (permalink)  
Antiguo 25/11/2014, 08:10
 
Fecha de Ingreso: noviembre-2014
Mensajes: 3
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Php con MySQL (novato o tan siquiera eso aún)

Gracias por la explicación Nehuen, pero aún asi, sigo sin consegirlo, me tira errores. Seguramente algo estoy haciendo mal.

En cuanto a poner el codigo completo, me falta valentía jejeje, ya dije que simplemente me inicio en esto, les ahorro ver un montón de código que seguramente con unas pocas líneas sería suficiente, pero como no se hacerlo, tengo muchas lineas.
  #8 (permalink)  
Antiguo 25/11/2014, 15:45
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Php con MySQL (novato o tan siquiera eso aún)

Cita:
Iniciado por espaca Ver Mensaje
Gracias por la explicación Nehuen, pero aún asi, sigo sin consegirlo, me tira errores. Seguramente algo estoy haciendo mal.

En cuanto a poner el codigo completo, me falta valentía jejeje, ya dije que simplemente me inicio en esto, les ahorro ver un montón de código que seguramente con unas pocas líneas sería suficiente, pero como no se hacerlo, tengo muchas lineas.
A la mie... ¿Como sabes mi nombre? me siento vigilado

Con respecto a la falta de valentía, la unica forma de aprender es equivocándose, saludos!
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 02/12/2014 a las 11:36

Etiquetas: enum, mysql, set
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:38.