Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

consulta sql con form select multiple

Estas en el tema de consulta sql con form select multiple en el foro de Mysql en Foros del Web. He llegado hasta aqui por q verdaderamente me siento frustrado y desorientado. Yo tengo en mi base de datos mysql entre varias tablas la de ...
  #1 (permalink)  
Antiguo 25/11/2011, 15:47
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
consulta sql con form select multiple

He llegado hasta aqui por q verdaderamente me siento frustrado y desorientado.
Yo tengo en mi base de datos mysql entre varias tablas la de ALUMNOS dentro de ella estan los campos id_alumnos, email, email2, profesion_ocupacion, apellido_nombre, dni, y varios campos mas.
Bien la idea es que al momento de seleccionar mas de un valor desde un select multiple de consulta de sql del campo profesion_ocupacion me devuelva todos los mail que coincidan con esos valores seleccionado para luego insertalo en un arhivo de texto.
El tema es que cuando selecciono solo una opcion me funciona bien pero cuando selecciono mas de una no funciona.
Aqui paso el codigo para que me tiendas una mano en.

Código PHP:
<form id="form1" name="form1" method="get" action="">
  <select name="profesion_ocupacion[]" id="profesion_ocupacion" multiple="multiple" size="10" style="width:300px;">
    <?  $row_ver_profesion=mysql_query ("SELECT DISTINCT profesion_ocupacion FROM alumnos WHERE email LIKE '%@%' ORDER BY profesion_ocupacion ASC");
                while (
$row mysql_fetch_array($row_ver_profesion)){
            
?>
    <option value="<?php echo $row['profesion_ocupacion']?>"><?php echo $row['profesion_ocupacion']?></option>
    <?}?>
  </select>
  <input name="categoria" type="submit" class="button" value="categoria" id="categoria" />
</form>
<?php
          
if ($_GET['categoria']){ 
//Mostramos las categorias seleccionadas
          
$categoria=$_GET['profesion_ocupacion'];
echo 
"<br>Profesiónes seleccionadas:";
for (
$i=0;$i<count($categoria);$i++) 
{
echo 
"<br> Profesión " $i ": " $categoria[$i];

// Tomamos el o los valores ingresados 
    
$buscar_categoria=implode (", "$_GET['profesion_ocupacion']);
    
//leo los emails de la base de datos
    
$consulta02 "SELECT email FROM alumnos WHERE profesion_ocupacion LIKE '%".$buscar_categoria."' ";
    
$resultado02 mysql_query($consulta02);
    
//Elimino el archivo si ya existe
    
if(file_exists("export_bd_categoria.txt")){
          
unlink("export_bd_categoria.txt");
}
     
//Abro un archivo de texto
    
$fp02 fopen("export_bd_categoria.txt","a");
    
//En la Primer linea escribo la version de la base para evitar errores
    
fwrite($fp02"V:".date("d/m/Y",time()) . PHP_EOL);
    
//pongo la variable errores a cero
    
$errores02 ='';
    
//recorro los resultados de la base de datos
    
while ($linea02 mysql_fetch_array($resultado02)) {
    
$j02++;
        if(
check_email_address($linea02[0])){
            
//meto en el archivo de texto una linea con la consulta
            
$consulta02 "INSERT INTO direcciones (mail, fecha) VALUES('".strtolower($linea02[0]). "', '".date("d/m/Y",time()) ."')";
            
fwrite($fp02,$consulta02 PHP_EOL);
}
}
echo 
'<br><br><a href="export_bd_categoria.txt">Descargar base de datos POR CATEGORIA</a><br>';
}else{ 
      
"No se ha seleccionado ninguna categoría, por favor seleccione al menos una"
      }
?>
De antemano agradesco tu ayuda
  #2 (permalink)  
Antiguo 25/11/2011, 16:18
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: consulta sql con form select multiple

Saludos

Modifica el LIKE por un IN

Código MySQL:
Ver original
  1. SELECT email FROM alumnos WHERE profesion_ocupacion LIKE '%buscar'
  2. por
  3. SELECT email FROM alumnos WHERE profesion_ocupacion IN (buscar)
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #3 (permalink)  
Antiguo 26/11/2011, 06:37
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: consulta sql con form select multiple

Estimado Nano_ ante todo mil gracias por la rapidez de tu respuesta.
Te cuento, si cambio el LIKE por el IN y pongo la variable entre parentesis como tu me aconsejas ( IN ($buscar_categoria) ) no funciona ni siquiera elegiendo una opcion, ya que me toma el array como texto plano y no como valor, y si lo concateno asi IN '".$buscar_categoria."' tampoco me funciona ni eligiendo una opcion ni mas de una. De la forma que mejor funciona al menos eligiendo una opcion es como lo tenia osea asi: LIKE '%".$buscar_categoria."%' pero mi problema empieza cuando se elige mas de una opcion el el select multiple del form, que aclaro q ese select multiple toma los datos de una consulta sql trayendome todos los registros del campo profesion_ocupacion que tengan mail en el campo email.

Por favor suplico una ayuda, les juro q llevo dias con esto y no logro hacerlo funcionar. Ya me ha nublado la cabeza.
  #4 (permalink)  
Antiguo 28/11/2011, 07:19
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: consulta sql con form select multiple

Saludos

Podrías imprimir la variable $consulta02, realizando la consulta con IN seleccionando varias opciones del combo!
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #5 (permalink)  
Antiguo 29/11/2011, 06:30
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: consulta sql con form select multiple

Nano_ nuevamente muchas gracias por tu tiempo y dedicacion a mi problema.
Te cuento que sigo aun sin poder dar en la tecla. Mira voy a ir pegando los errores que me devuelve al ejecutar las diferentes consultas probadas cuando selecciono mas de una opcion en el select multiple.

Código PHP:
// Tomamos el o los valores ingresados 
    
$buscar_categoria=implode (", "$_GET['profesion_ocupacion']);
    
//echo $buscar_categoria; 
    //leo los emails de la base de datos
    
$consulta02 "SELECT email FROM alumnos WHERE profesion_ocupacion LIKE '%".$buscar_categoria."%' ";
    
$resultado02 mysql_query($consulta02); 
el error:
Error en SELECT email FROM alumnos WHERE profesion_ocupacion LIKE '%UNICOOOOO, VENDEDOR%'
MySQL dice:


Código PHP:
// Tomamos el o los valores ingresados 
    
$buscar_categoria=implode (", "$_GET['profesion_ocupacion']);
    
//echo $buscar_categoria; 
    //leo los emails de la base de datos
    
$consulta02 "SELECT email FROM alumnos WHERE profesion_ocupacion IN '".$buscar_categoria."' ";
    
$resultado02 mysql_query($consulta02); 
el error:
Error en SELECT email FROM alumnos WHERE profesion_ocupacion IN 'UNICOOOOO, VENDEDOR'
MySQL dice: Algo está equivocado en su sintax cerca ''UNICOOOOO, VENDEDOR'' en la linea 1

Y he probado varios modos mas de realizar la consulta pero no logro hacerlo funcionar. La idea basicamente es que me traiga todos los mail del campo EMAIL correspondientes a las opciones seleccionadas del select multiple.
En mi base de datos tanto el campo EMAIL como PROFESION_OCUPACION estan dentro de la misma tabla ALUMNOS.
La verdad que me encuentro vencido por este maldito codigo que no responde a lo que necesito.
  #6 (permalink)  
Antiguo 29/11/2011, 07:19
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: consulta sql con form select multiple

Aclaro q donde dice "Error en SELECT email........ bla bla bla" es un echo de la consulta y con LIKE la consulta no devuelve error pero no funciona tampoco.

saludos.
  #7 (permalink)  
Antiguo 30/11/2011, 13:53
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: consulta sql con form select multiple

Saludos

El error es de sintaxys

Código MySQL:
Ver original
  1. SELECT email FROM alumnos WHERE profesion_ocupacion IN 'UNICOOOOO, VENDEDOR'
  2. por
  3. SELECT email FROM alumnos WHERE profesion_ocupacion IN ('UNICOOOOO', 'VENDEDOR')

Debes modificar tu php!!. Como el campo profesion_ocupacion es un string debe ir dentro de comillas, si hubiese sido de tipo int se maneja sin comillas.

Por que no consultas por el identificador de la tabla alumnos?

Por otro lado cuando realices consultas utiliza la funcion mysql_error() de php para capturar el error que te retorna mysql o copia y pega tu consulta en un cliente mysql para hacer la depuracion.

Código PHP:
Ver original
  1. $resultado02 = mysql_query($consulta02)or die("error en consulta".mysql_error());
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #8 (permalink)  
Antiguo 02/12/2011, 07:40
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
Respuesta: consulta sql con form select multiple

Nano_ ante todo muchas gracias por tus respuestas y mil disculpas por la tardanza de mis comentarios pero he estado con problemas. He probado como me dices y no hay caso no funciona, es decir no me ingresa al acrhivo de texto los mail correspondientes a la consulta de profesion_ocupacion. Cuando selecciona una opcion si funciona cuando selecciono mas de una no pasa nada. Si consulto el error de la consulta con
Código PHP:
funcion mysql_error() 
no me devuelve ningun error pero en el echo de la consulta me tira esto
Código PHP:
SELECT email FROM alumnos WHERE profesion_ocupacion IN ('ABOGADA, ABOGADA - TPO COMPLETO'
como si no me estubiera tomando el array como array sino como texto. Ahi deberia de aparecer los mail que corresponden a esos campos elegidos que estan dentro de la misma tabla llamada "ALUMNOS". Asi como cuando eligo una sola opcion:

[URL="http://i44.tinypic.com/yyuqb.jpg"]http://i44.tinypic.com/yyuqb.jpg[/URL]

Aqui paso el print de pantalla de lo que tengo como para que se arienten aun mas:
[URL="http://i39.tinypic.com/2uj5v1e.jpg"]http://i39.tinypic.com/2uj5v1e.jpg[/URL]

Agradeceria por favor una ayuda.
  #9 (permalink)  
Antiguo 02/12/2011, 07:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consulta sql con form select multiple

Cita:
como si no me estubiera tomando el array como array sino como texto. Ahi deberia de aparecer los mail que corresponden a esos campos elegidos que estan dentro de la misma tabla llamada "ALUMNOS".
Eso es un problema que debes resolver en programación. No es MySQL. Tienes que tratar de que ese array se transforme en una secuencia de cadenas, cada una entre apóstrofes, todas separadas por comas, de modo que cuando se genere la consulta en SQL esta quede como te dice Nano_:
Código MySQL:
Ver original
  1. SELECT email FROM alumnos WHERE profesion_ocupacion IN ('UNICOOOOO', 'VENDEDOR')
Pero todo lo de programación en PHP es tema de otro foro, no de este.

Pregunta en el Foro de PHP cómo lograrlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 25/06/2015 a las 05:54
  #10 (permalink)  
Antiguo 02/12/2011, 08:25
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años
Puntos: 3
De acuerdo Respuesta: consulta sql con form select multiple

estimado gnzsoloyo es increíble la rapidez de respuesta de tu parte. Lo acabo de solucionar en este momento gracias a que abri un poco mas la cabeza y entendí el concepto de lo que me comentaste. La solución era solo agregarle al factor separador del implode las comillas simples. Agradezco a todos aquellos que hicieron posible que pudiera llegar a buen puerto haciendo que la solución surguiera poco a poco. Infinitas gracias a todos. Tema solucionado
  #11 (permalink)  
Antiguo 02/12/2011, 08:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consulta sql con form select multiple

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campos, php, query, select, sql, tabla, formulario
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 02:26.