Foros del Web » Programando para Internet » PHP »

problema buscador con campos nulos

Estas en el tema de problema buscador con campos nulos en el foro de PHP en Foros del Web. Hola! Tengo este codigo php para un buscador: <?php include("config.php"); if($enviar) {//comprobamos que se haya pulsado el botón enviar $resp = mysql_query("select id, nombre, pais, ...
  #1 (permalink)  
Antiguo 03/03/2005, 08:16
 
Fecha de Ingreso: junio-2004
Mensajes: 88
Antigüedad: 20 años, 5 meses
Puntos: 0
problema buscador con campos nulos

Hola!
Tengo este codigo php para un buscador:
<?php
include("config.php");
if($enviar) {//comprobamos que se haya pulsado el botón enviar
$resp = mysql_query("select id, nombre, pais, inicio, contenido from ferias where nombre LIKE '%".$_POST[nombre]."%' and pais LIKE '%".$_POST[pais]."%' and inicio LIKE '%".$_POST[inicio]."%' and contenido LIKE '%".$_POST[contenido]."%'") or die (mysql_error());//realizamos la consulta
if(mysql_num_rows($resp) == "0") {//comprobamos si hay respuestas
echo ("
<table>
<tr>
<td class='letrageneral'>No hay resultados
</td></tr></table>");

}
else
{
echo ("
<table>
<tr>
<td class='introbuscador'>
Estos son los resultados de la búsqueda:</td></tr></table>");
while($sql = mysql_fetch_array($resp)) {//imprimimos las respuestas
echo
("<table class='tablabuscador'>
<tr><ul>
<li class='letraresul'><a href='feconcre.php?id=$sql[id]' class='letraresul'>
$sql[nombre]</a></li></ul></tr></table>
")
;

}
echo ("
<table>
<tr>
<td class='letranomas'>No hay más resultados</td>
<td class='letranomas'><a href='M4AE1.php' class='letranomas'>+ Volver a buscar</a></td>
</tr></table>");
}
}
?>

El problema es que solamente me saca los resultados de la tabla donde ninguno de los campos es nulo. Cuando hago una busqueda y falta en la base de datos alguno de los campos, ya no sale.No se si hay alguna forma de indicar en la consulta que saque tambien estos campos nulos o hay que cambiar la base de datos o como se haria.
Gracias
  #2 (permalink)  
Antiguo 03/03/2005, 08:27
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 8 meses
Puntos: 0
SI te refieres a que la consulta no te devuelve registros porque en la base tenes datos nulos es porque" nombre LIKE '%".$_POST[nombre]."%' " no cumple esta condicion. en cada condicion tendrias que poner algo del estilo :
(nombre LIKE '%".$_POST[nombre]."%' or nombre is null) and (proxima condicion)
Si no es esto a lo que te referias disculpa.
Saludos
  #3 (permalink)  
Antiguo 03/03/2005, 08:39
 
Fecha de Ingreso: junio-2004
Mensajes: 88
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola

Hola
He probado de la forma que me has dicho pero ahora ocurre, que si, por ejemplo, relleno solo en el buscador la casilla de pais, y pongo por ejemplo españa, me saca los de españa, pero tambien los que en el campo pais son nulos, y me sale por ejemplo, uno en paris, donde el campo pais es nulo.
No se si me explico
  #4 (permalink)  
Antiguo 03/03/2005, 09:00
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 8 meses
Puntos: 0
si te entiendo.. ahora lo que no entiendo es que es lo que necesitas, que te devuelva solo los de españa? Poruqe si es eso, entonces como estaba antes estaba bien.
Saludos
  #5 (permalink)  
Antiguo 03/03/2005, 09:12
 
Fecha de Ingreso: junio-2004
Mensajes: 88
Antigüedad: 20 años, 5 meses
Puntos: 0
A ver si no me lio:
Tengo un formulario con 4 campos: nombre, fecha de inicio,pais y contenido. Es informacion sobre ferias. Saca los datos de una base de datos donde ademas hay mas campos, como localidad, fecha de fin etc.
De la forma que lo tenia antes pasaba lo siguiente: Yo quiero buscar por ejemplo una fecha que se celebra en españa y que se llama superferia. Meto los datos, pero solamente me saca los resultados de aquellos campos de la base de datos donde ni nombre ni pais ni fecha ni contenido sean nulos, es decir, solo me saca aquellos que tengan algo en todos los campos.
Y esto no me sirve.
He probado como me has dicho tu y ahora sale diferente: si busco por españa, me salen todas las que se celebran en españa, si, pero tambien las que en la base de datos no tienen nada puesto en pais, y me salen ror ejemplo, ferias de alemania.
  #6 (permalink)  
Antiguo 03/03/2005, 09:20
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 8 meses
Puntos: 0
Creo estar entendiendo lo que dices, pero entonces no puedes hacer directamente la consulta.Debes ir viendo que agregas dependiendo de los campos de busqueda que te ingreso. Es decir la consulta vienen igual hasta el where. De ahi tendrian que preguntar, si $_POST[nombre] es distinta de vacia, lo agregas a la consulta (como nombre LIKE '%".$_POST[nombre]."%'), caso contrario no. Asi con cada campo
Entendi bien tu problema?
SUerte

Última edición por MartinTandil; 03/03/2005 a las 09:22
  #7 (permalink)  
Antiguo 03/03/2005, 09:21
 
Fecha de Ingreso: junio-2004
Mensajes: 88
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola de nuevo:
Has entendido mi problema,pero no tengo ni idea de como resolverlo.
  #8 (permalink)  
Antiguo 03/03/2005, 09:27
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 8 meses
Puntos: 0
A ver si se entiende lo que te decia con este ejemplo.

$consulta="select id, nombre, pais, inicio, contenido from ferias where ";
$add_consulta ="";
if($_POST[nombre])
$add_consulta ="nombre LIKE '%".$_POST[nombre]."%'";
$consulta .= $add_consulta;
$resp = mysql_query($consulta);

Espero que te sirva.
No se si es lo mas optimo, pero es lo primero que se me viene a la cabeza.
Saludos
  #9 (permalink)  
Antiguo 03/03/2005, 09:39
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 8 meses
Puntos: 0
Ahora si esto es lo peor que se puede hacer segun los experto en programacion, pero seguramente te puede servir, luego mira de perfeccionarlo, pero inicialmente es una alternativa:

$consulta="select id, nombre, pais, inicio, contenido from ferias ";
$add_consulta ="";
if($_POST[nombre]!="")
$add_consulta="where nombre LIKE '%".$_POST[nombre]."%'";
if($_POST[pais]!="")
if( $add_consulta =="")
$add_consulta = "where pais LIKE '%".$_POST[pais]."%'";
else
$add_consulta .= "and pais LIKE '%".$_POST[pais]."%'";
if($_POST[inicio]!="")
if( $add_consulta =="")
$add_consulta = "where inicio LIKE '%".$_POST[inicio]."%'";
else
$add_consulta .= "and inicio LIKE '%".$_POST[inicio]."%'";
if($_POST[contenido]!="")
if( $add_consulta =="")
$add_consulta = "where contenido LIKE '%".$_POST[contenido]."%'";
else
$add_consulta .= "and contenido LIKE '%".$_POST[contenido]."%'";

$consulta .= $add_consulta;
$resp = mysql_query($consulta);

Suerte y cualquier mejora me avisas
  #10 (permalink)  
Antiguo 03/03/2005, 09:55
Avatar de Niconirva  
Fecha de Ingreso: marzo-2005
Mensajes: 119
Antigüedad: 19 años, 8 meses
Puntos: 0
Vine a dar una mano!, Martin Tandil tiene razón, debes tener en cuenta si las variables estan vacias o no (nulas o no) para estructurar correctamente los querrys en la bd. Pero creo que Martin los puso un poco complicado.
Lo que debes hacer es poner en tu código php una serie de querry, condicionadas previamente con if, de manera de dejar que una sola prevalezca... a que me refiero, ej: supongamos luego de capturar las variables pais y nombre por ejemplo....

<?
$nombre=$_POST['nombre'];
$pais=$_POST['pais'];
$inicio=$_POST['inicio'];
/*supongamos que la variable nombre nunca es vacia y en tal caso va a estar siempre, luego definimos los querrys teniendo en cuenta que pais e inicio si pueden ser nulas*/

//Caso 1) pais es nulo y inicio es nulo

if(strlen($pais)==0 && strlen($inicio)==0)
{$query="select id, nombre, pais, inicio, contenido from ferias where nombre LIKE '%".$_POST[nombre]."%'"}

//Caso 2) pais es no nulo pero inicio es nulo

elseif(strlen($pais)!==0 && strlen($inicio)==0)

{$query="select id, nombre, pais, inicio, contenido from ferias where nombre LIKE '%".$nombre."%' And pais LIKE '%".$pais."%'"}

//Caso 3) pais es nulo pero inicio no es nulo

elseif(strlen($pais)==0 && strlen($inicio)!==0)
{$query="select id, nombre, pais, inicio, contenido from ferias where nombre LIKE '%".$nombre."%' And inicio LIKE '%".$inicio."%'"}

//Caso 4 ninguno es nulo (pregunta más general)

elseif(strlen($pais)!==0 && strlen($inicio)!==0)
{$query="select id, nombre, pais, inicio, contenido from ferias where nombre LIKE '%".$nombre."%' And inicio LIKE '%".$inicio."%' And pais LIKE '%".$pais."%'"}
//a este punto prevaleceria solo una querry dado dado que las posibilidades //son mutamente excluyentes..
mysql_query($query)
//Aquí sigues con tu codigo normal...
?>

Espero que allas entendido el ejemplo..., sino escribime y te mando algo parecido que tengo hecho, saludos!!!
  #11 (permalink)  
Antiguo 03/03/2005, 10:10
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 8 meses
Puntos: 0
No es por criticar a niconirva, pero piensa que el codigo que hiciste es para dos variables y el original es para 4, lo cual te da una combinacion de muchisimos if distintos. Obviamente esta bien lo que pusiste, pero no creo que sea tan complejo mi codigo. Se hace dificil sin estar indentado, pero bueno.
Saludos
  #12 (permalink)  
Antiguo 03/03/2005, 18:27
Avatar de Niconirva  
Fecha de Ingreso: marzo-2005
Mensajes: 119
Antigüedad: 19 años, 8 meses
Puntos: 0
Martín tandil la verdad que tienesr razón!, es el problema de este sistema, las variables aumentan los querys como 2 a la n!, como hay solo 4 varibles y una nunca es nula!.., serian solo 3 por lo tanto hay que armar 8 query. Igual estube viendo tu código y es cierto tampoco es tan complicado.., bonemachine, por lo menos tiene alternativas..., se me ocurrio otra cosa, la voy a digerir bien y cualquier cosa la digo aca!, saludos!!

Última edición por Niconirva; 03/03/2005 a las 18:29
  #13 (permalink)  
Antiguo 03/03/2005, 19:24
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
Quizá esto les ayude:
http://www.forosdelweb.com/f18/hacer-consulta-multiple-267358/
aunque ya lo he mencionado a muchos usuarios aún nadie me responde si sirve .. pero tampoco hay quejas por lo que me da a entender que funciona...
Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #14 (permalink)  
Antiguo 04/03/2005, 02:00
 
Fecha de Ingreso: junio-2004
Mensajes: 88
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola

Hola!
He probado con tu codigo MartinTandil, y de momento va todo super bien, que alivio. Muchisimas gracias a todos.
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 14:14.