Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] consulta filtrada en bd no muestra nada

Estas en el tema de consulta filtrada en bd no muestra nada en el foro de PHP en Foros del Web. hola a todos, estoy haciendo un proyecto y resulta que en un formulario en php que uso de filtro para que me saque los resultados ...
  #1 (permalink)  
Antiguo 19/08/2014, 14:06
 
Fecha de Ingreso: mayo-2011
Ubicación: Motril (Granada)
Mensajes: 15
Antigüedad: 12 años, 11 meses
Puntos: 0
Pregunta consulta filtrada en bd no muestra nada

hola a todos, estoy haciendo un proyecto y resulta que en un formulario en php que uso de filtro para que me saque los resultados de una base de datos en una tabla no me aparece nada, les adjunto el código para que lo vean más claro:

<?php
$host="localhost";
$usuario="root";
$pass="root";

$provincia=$_POST['provincia'];
$estudios=$_POST['estudios'];
$trabajo=$_POST['trabajox'];
$experiencia=$_POST['experiencia'];
$sentencia="SELECT * FROM tabla WHERE provincia = '$provincia' and estudios = '$estudios'and trabajo = '$trabajo' and experiencia = '$experiencia'";
//print "$sentencia";
$c=mysql_connect($host,$usuario) or DIE("Ha sido imposible conectar con la base de datos");
mysql_select_db("desempleados", $c);
$resultado=mysql_query("$sentencia",$c)or DIE(mysql_error());
print "<table align=center border=2>";
print "<tr><td>NOMBRE Y APELLIDOS</td><td>AÑO NAC.</td><td>ESTUDIOS</td><td>EXPERIENCIA</td><td>TELÉFONO</td></tr>";
while($registro = mysql_fetch_row($resultado))
{
print "<tr>";
foreach($registro as $clave)
{
print "<td>".$clave."</td>";
}
}
print "</table>";


mysql_close($c);
?>

olviden la contraseña de mysql ya que no tiene.
  #2 (permalink)  
Antiguo 19/08/2014, 14:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: consulta filtrada en bd no muestra nada

¿Y supongo crees que vamos a ejecutar el código mentalmente para decirte qué hay mal?

Por favor depura tu código, es lo mínimo que puedes hacer para entender lo que ocurre ahí, nadie adivinará con solo leer código y menos si no compartes algún error que obtengas, etc.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 19/08/2014, 14:23
 
Fecha de Ingreso: mayo-2011
Ubicación: Motril (Granada)
Mensajes: 15
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: consulta filtrada en bd no muestra nada

Cómo he dicho antes, la salida de $sentencia debe mostrarla en una tabla, pero en lugar de esto no muestra nada, como si no hubiese datos en la bd. El problema creo que esta en $sentencia.
  #4 (permalink)  
Antiguo 19/08/2014, 14:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: consulta filtrada en bd no muestra nada

Cita:
Iniciado por juancamotril Ver Mensaje
Cómo he dicho antes, la salida de $sentencia debe mostrarla en una tabla, pero en lugar de esto no muestra nada, como si no hubiese datos en la bd. El problema creo que esta en $sentencia.
¿Y qué estás haciendo para depurar tu consulta?

No veo nada, sólo veo código y no veo que hagas nada para averiguar nada.

Código PHP:
Ver original
  1. $resultado=mysql_query("$sentencia",$c)or DIE(mysql_error());
  2.  
  3. // DEBUG
  4.  
  5. echo mysql_num_rows($resultado) > 0 ? 'HAY RESULTADOS' : 'NO HAY NADA';
  6.  
  7. // DEBUG

O mejor aún, imprime tu consulta para después ejecutarla a mano ¿ahí hay resultados?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 19/08/2014, 15:19
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 filtrada en bd no muestra nada

Vamos a ver:
1) Creas la sentencia de consulta.
2) Abres la ocnexión a la base.
3) Ejecutas la consulta.
4) Imprimes el resultado...

todo OK excepto un par de nimiedades:
1) No estás verificando en ese script si algunos de los valores llego nulo o es una cadena vacía.
2) No estás verificando si la consulta devolvió registros.
3) No estás probando si la query armada devuelve realmente algún dato según las condiciones ingresadas.

la query en si está básicamente bien:
Código SQL:
Ver original
  1. SELECT *
  2. FROM tabla
  3. WHERE provincia = '$provincia'
  4.     AND estudios = '$estudios'
  5.     AND trabajo = '$trabajo'
  6.     AND experiencia = '$experiencia'
Por lo que si no devuelve registros, es porque ninguno de ellos se cumple al mismo tinepo. No te olvides que AND hace que la siguiente condición sea mandatoria, y con que al menos uno de ellos no se verifique, la consulta devolverá cero registros, pero tampoco devolverá errores.

Al menos deberías debuggear, como te dice @paketetrueke:
Código PHP:
Ver original
  1. <?php
  2. $host="localhost";
  3. $usuario="root";
  4. $pass="root";
  5.  
  6. $provincia=$_POST['provincia'];
  7. $estudios=$_POST['estudios'];
  8. $trabajo=$_POST['trabajox'];
  9. $experiencia=$_POST['experiencia'];
  10. if($provincia!="" AND $estudios!="" AND $trabajo!="" AND $experiencia!="")
  11. {
  12.   $sentencia="SELECT * FROM tabla WHERE provincia = '$provincia' and estudios =   '$estudios'and trabajo = '$trabajo' and experiencia = '$experiencia'";
  13.  
  14.   // VErificando sentencia creada
  15.   print $sentencia;
  16.   $c=mysql_connect($host,$usuario) or die("Ha sido imposible conectar con la base de datos");
  17.   mysql_select_db("desempleados", $c);
  18.   $resultado=mysql_query("$sentencia",$c)or die(mysql_error());
  19.   if(mysql_num_rows($resultado)>0)
  20.   {
  21.   print "<table align=center border=2>";
  22.   print "<tr><td>NOMBRE Y APELLIDOS</td><td>AÑO NAC.</td><td>ESTUDIOS</td>  <td>EXPERIENCIA</td><td>TELÉFONO</td></tr>";
  23.   while($registro = mysql_fetch_row($resultado))
  24.   {
  25.   print "<tr>";
  26.   foreach($registro as $clave)
  27.   {
  28.   print "<td>".$clave."</td>";
  29.   }
  30.   }
  31.   print "</table>";
  32.   }
  33.   else{echo "La consulta no devolvio registros.";}
  34. }
  35. else{echo "Al menos uno de los datos no es válido.";}
  36. ?>
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 20/08/2014, 07:27
 
Fecha de Ingreso: mayo-2011
Ubicación: Motril (Granada)
Mensajes: 15
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: consulta filtrada en bd no muestra nada

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Vamos a ver:
1) Creas la sentencia de consulta.
2) Abres la ocnexión a la base.
3) Ejecutas la consulta.
4) Imprimes el resultado...

todo OK excepto un par de nimiedades:
1) No estás verificando en ese script si algunos de los valores llego nulo o es una cadena vacía.
2) No estás verificando si la consulta devolvió registros.
3) No estás probando si la query armada devuelve realmente algún dato según las condiciones ingresadas.

la query en si está básicamente bien:
Código SQL:
Ver original
  1. SELECT *
  2. FROM tabla
  3. WHERE provincia = '$provincia'
  4.     AND estudios = '$estudios'
  5.     AND trabajo = '$trabajo'
  6.     AND experiencia = '$experiencia'
Por lo que si no devuelve registros, es porque ninguno de ellos se cumple al mismo tinepo. No te olvides que AND hace que la siguiente condición sea mandatoria, y con que al menos uno de ellos no se verifique, la consulta devolverá cero registros, pero tampoco devolverá errores.

Al menos deberías debuggear, como te dice @paketetrueke:
Código PHP:
Ver original
  1. <?php
  2. $host="localhost";
  3. $usuario="root";
  4. $pass="root";
  5.  
  6. $provincia=$_POST['provincia'];
  7. $estudios=$_POST['estudios'];
  8. $trabajo=$_POST['trabajox'];
  9. $experiencia=$_POST['experiencia'];
  10. if($provincia!="" AND $estudios!="" AND $trabajo!="" AND $experiencia!="")
  11. {
  12.   $sentencia="SELECT * FROM tabla WHERE provincia = '$provincia' and estudios =   '$estudios'and trabajo = '$trabajo' and experiencia = '$experiencia'";
  13.  
  14.   // VErificando sentencia creada
  15.   print $sentencia;
  16.   $c=mysql_connect($host,$usuario) or die("Ha sido imposible conectar con la base de datos");
  17.   mysql_select_db("desempleados", $c);
  18.   $resultado=mysql_query("$sentencia",$c)or die(mysql_error());
  19.   if(mysql_num_rows($resultado)>0)
  20.   {
  21.   print "<table align=center border=2>";
  22.   print "<tr><td>NOMBRE Y APELLIDOS</td><td>AÑO NAC.</td><td>ESTUDIOS</td>  <td>EXPERIENCIA</td><td>TELÉFONO</td></tr>";
  23.   while($registro = mysql_fetch_row($resultado))
  24.   {
  25.   print "<tr>";
  26.   foreach($registro as $clave)
  27.   {
  28.   print "<td>".$clave."</td>";
  29.   }
  30.   }
  31.   print "</table>";
  32.   }
  33.   else{echo "La consulta no devolvio registros.";}
  34. }
  35. else{echo "Al menos uno de los datos no es válido.";}
  36. ?>
Muchas gracias por tu ayuda, pensaba que era la sentecia lo que estaba mal y no encontraba el fallo, según tu código la sentencia no devuelve resultados y el caso que en la base de datos tengo registros.
te adjunto lo que dice: SELECT * FROM tabla WHERE provincia = 'Cádiz' and estudios = 'Universitario'and trabajo = 'Diseño y artes gráficas' and experiencia = 'No'La consulta no devolvio registros.
Es como si la bd estuviese vacia y no es aí, el select anterior debia haber dado al menos 3 resultados que introduje anteriormente y están ahi.
  #7 (permalink)  
Antiguo 20/08/2014, 07:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: consulta filtrada en bd no muestra nada

Cita:
Iniciado por juancamotril Ver Mensaje
Muchas gracias por tu ayuda, pensaba que era la sentecia lo que estaba mal y no encontraba el fallo, según tu código la sentencia no devuelve resultados y el caso que en la base de datos tengo registros.
te adjunto lo que dice: SELECT * FROM tabla WHERE provincia = 'Cádiz' and estudios = 'Universitario'and trabajo = 'Diseño y artes gráficas' and experiencia = 'No'La consulta no devolvio registros.
Es como si la bd estuviese vacia y no es aí, el select anterior debia haber dado al menos 3 resultados que introduje anteriormente y están ahi.
Bueno, pues podrías ejecutar esa consulta directamente en phpMyAdmin para ver si funciona y devuelve algo ¿no te parece?
Cita:
SELECT * FROM tabla WHERE provincia = 'Cádiz' and estudios = 'Universitario'and trabajo = 'Diseño y artes gráficas' and experiencia = 'No'
Acá no vamos a poder ejecutar tu consulta mentalmente por si pensabas en eso.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 20/08/2014, 08:00
 
Fecha de Ingreso: mayo-2011
Ubicación: Motril (Granada)
Mensajes: 15
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: consulta filtrada en bd no muestra nada

Cita:
Iniciado por pateketrueke Ver Mensaje
Bueno, pues podrías ejecutar esa consulta directamente en phpMyAdmin para ver si funciona y devuelve algo ¿no te parece?

Acá no vamos a poder ejecutar tu consulta mentalmente por si pensabas en eso.
MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). ( La consulta tardó 0.0012 seg )
Y repito que esa consulta debió dar 3 resultados que puedo ver en mi base de datos
  #9 (permalink)  
Antiguo 20/08/2014, 08:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: consulta filtrada en bd no muestra nada

Cita:
MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). ( La consulta tardó 0.0012 seg )
Pues ahí tienes tu respuesta.

Cita:
Y repito que esa consulta debió dar 3 resultados que puedo ver en mi base de datos
¿Entonces la base de datos miente?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 20/08/2014, 08:33
 
Fecha de Ingreso: mayo-2011
Ubicación: Motril (Granada)
Mensajes: 15
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: consulta filtrada en bd no muestra nada

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Entonces la base de datos miente?
Es por eso por lo que pido vuestra ayuda, estoy tan confundido como vosotros
  #11 (permalink)  
Antiguo 20/08/2014, 08:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: consulta filtrada en bd no muestra nada

Pues tampoco vamos a adivinar.

Vamos, que si al menos conociéramos la estructura de la base de datos así como los datos que dices debería tener podríamos entender poco más.

Sin embargo dudo que sea problema de programación en PHP, tu asunto es más de SQL y así.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 20/08/2014, 10:13
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 filtrada en bd no muestra nada

Cita:
Iniciado por juancamotril Ver Mensaje
MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). ( La consulta tardó 0.0012 seg )
Y repito que esa consulta debió dar 3 resultados que puedo ver en mi base de datos
Pues vamos a lo simple: Si no devuelve datos es porque ningún registro tiene los tres datos al mismo tiempo.
Para sacarte de dudas, hagamos esto:
Código MySQL:
Ver original
  1. SELECT provincia, estudios, trabajo, experiencia
  2. FROM tabla
  3.     provincia = 'Cádiz'
  4.     OR
  5.     estudios = 'Universitario'
  6.     OR
  7.     trabajo = 'Diseño y artes gráficas'
  8.     OR
  9.     experiencia = 'No'

Cuando la ejecutes, revisala visualmente y posteanos aquellos registros donde veas que los tres valores de tu consulta original se presentan en el mismo registro.
Lo más probable es que haya al menos un valor diferente en cada caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 20/08/2014, 14:30
 
Fecha de Ingreso: mayo-2011
Ubicación: Motril (Granada)
Mensajes: 15
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: consulta filtrada en bd no muestra nada

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Pues vamos a lo simple: Si no devuelve datos es porque ningún registro tiene los tres datos al mismo tiempo.
Para sacarte de dudas, hagamos esto:
Código MySQL:
Ver original
  1. SELECT provincia, estudios, trabajo, experiencia
  2. FROM tabla
  3.     provincia = 'Cádiz'
  4.     OR
  5.     estudios = 'Universitario'
  6.     OR
  7.     trabajo = 'Diseño y artes gráficas'
  8.     OR
  9.     experiencia = 'No'

Cuando la ejecutes, revisala visualmente y posteanos aquellos registros donde veas que los tres valores de tu consulta original se presentan en el mismo registro.
Lo más probable es que haya al menos un valor diferente en cada caso.
Tonto de mi, tenías razón, uno de los campos no se cumple, el caso es que no me explico como en la tabla que mostraba phpmyadmin lo veia mal.
ahora el problema es la salida que da por pantalla:

0) { print ""; print ""; while($registro = mysql_fetch_row($resultado)) { print ""; foreach($registro as $clave) { print ""; } } print "
NOMBRE Y APELLIDOS AÑO NAC. ESTUDIOS EXPERIENCIA TELÉFONO
".$clave."
"; } else{echo "La consulta no devolvio registros.";} mysql_close($c); } else{echo "Al menos uno de los datos no es válido.";} ?>

Es este:

<?php
$host="localhost";
$usuario="root";
$pass="root";

$provincia=$_POST['provincia'];
$estudios=$_POST['estudios'];
$trabajo=$_POST['trabajox'];
$experiencia=$_POST['experiencia'];
if($provincia!="" AND $estudios!="" AND $trabajo!="" AND $experiencia!="")
{
$sentencia="SELECT nombre, anio_nac, estudios, experiencia, telefono FROM tabla WHERE provincia = '$provincia' and estudios = '$estudios'and trabajo = '$trabajo' and experiencia = '$experiencia'";

// VErificando sentencia creada
/* print $sentencia;*/
$c=mysql_connect($host,$usuario) or die("Ha sido imposible conectar con la base de datos");
mysql_select_db("desempleados", $c);
$resultado=mysql_query("$sentencia",$c)or die(mysql_error());
if(mysql_num_rows($resultado)>0)
{
print "<table align=center border=2>";
print "<tr><td>NOMBRE Y APELLIDOS</td><td>AÑO NAC.</td><td>ESTUDIOS</td> <td>EXPERIENCIA</td><td>TELÉFONO</td></tr>";
while($registro = mysql_fetch_row($resultado))
{
print "<tr>";
foreach($registro as $clave)
{
print "<td>".$clave."</td>";
}
}
print "</table>";
}
else{echo "La consulta no devolvio registros.";}
mysql_close($c);
}
else{echo "Al menos uno de los datos no es válido.";}
?>

Última edición por juancamotril; 20/08/2014 a las 14:39
  #14 (permalink)  
Antiguo 24/08/2014, 06:46
 
Fecha de Ingreso: mayo-2011
Ubicación: Motril (Granada)
Mensajes: 15
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: consulta filtrada en bd no muestra nada

TEMA RESUELTO, no se porqué cuando accedía desde LAN para probar la página no funcionaba, si accedo desde WAN todo va perfecto, supongo que por alguna razón no reconocía el código PHP.
Gracias a todos

Etiquetas: bd, formulario, muestra, mysql, nada, registro, select, sql, tabla
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 11:22.