Foros del Web » Programando para Internet » PHP »

Filtrar registros con campos vacios

Estas en el tema de Filtrar registros con campos vacios en el foro de PHP en Foros del Web. Hola a todos. Tengo una web de coches en la que hay una pagina.php que filtra los resultados mediante un formulario(marca,año,ciudad...) El problema es que ...
  #1 (permalink)  
Antiguo 26/09/2009, 05:40
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 14 años, 8 meses
Puntos: 0
Filtrar registros con campos vacios

Hola a todos.

Tengo una web de coches en la que hay una pagina.php que filtra los resultados mediante un formulario(marca,año,ciudad...)

El problema es que solo me los filtra si relleno TODOS los campos,pero si dejo alguno vacio no me muestra los resultados (si p.ej. no selecciono el año,no me muestra los de todos los años...sencillamente no muestra nada)

He cambiado los isset de las variables recibidas por !empty pero sigue haciendo lo mismo.

Tambien he visto que otras paginas hacen esto:
<option value="0"> - Selecciona una opcion - </option>
Pero no se como hacer para que mi base de datos interprete el '0' como que tiene que ignorar ese campo a la hora de filtrar.

Espero que podais orientarme un poco.
Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 26/09/2009, 07:37
 
Fecha de Ingreso: diciembre-2007
Mensajes: 131
Antigüedad: 16 años, 4 meses
Puntos: 6
Respuesta: Filtrar registros con campos vacios

Podrias copiar/pegar el codigo php donde se general la query SQL ?

Lo reconoceras porque deberia empezar con:

"SELECT * FROM"
  #3 (permalink)  
Antiguo 26/09/2009, 09:08
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Filtrar registros con campos vacios

Claro Hildegaard.

El select por ahora solo lo tengo en funcion de la marca y la provincia de los registros.
Cuando consiga que funcione asi,ya le pondre el resto de parametros(año,kilometros,etc)


Es este:

Código PHP:
$maxRows_anuncios2 10;
$pageNum_anuncios2 0;
if (isset(
$_GET['pageNum_anuncios2'])) {
  
$pageNum_anuncios2 $_GET['pageNum_anuncios2'];
}
$startRow_anuncios2 $pageNum_anuncios2 $maxRows_anuncios2;

$colname2_anuncios2 "-1";
if (isset(
$_POST['marca'])) {
  
$colname2_anuncios2 = (get_magic_quotes_gpc()) ? $_POST['marca'] : addslashes($_POST['marca']);
}
$colname_anuncios2 "-1";
if (isset(
$_POST['provincia'])) {
  
$colname_anuncios2 = (get_magic_quotes_gpc()) ? $_POST['provincia'] : addslashes($_POST['provincia']);
}
mysql_select_db($database_vehiculos$vehiculos);
$query_anuncios2 sprintf("SELECT *,DATE_FORMAT(Date,'%%d/%%m') AS Date,TIME_FORMAT(Time,'%%H:%%i') AS Time FROM anuncios, provincias, marcas WHERE anuncios.IdProvincia = provincias.IdProvincia AND provincias.IdProvincia = '%s' AND anuncios.IdMarca = marcas.IdMarca AND marcas.IdMarca = '%s'"$colname_anuncios2,$colname2_anuncios2);
$query_limit_anuncios2 sprintf("%s LIMIT %d, %d"$query_anuncios2$startRow_anuncios2$maxRows_anuncios2);
$anuncios2 mysql_query($query_limit_anuncios2$vehiculos) or die(mysql_error());
$row_anuncios2 mysql_fetch_assoc($anuncios2);

if (isset(
$_GET['totalRows_anuncios2'])) {
  
$totalRows_anuncios2 $_GET['totalRows_anuncios2'];
} else {
  
$all_anuncios2 mysql_query($query_anuncios2);
  
$totalRows_anuncios2 mysql_num_rows($all_anuncios2);
}
$totalPages_anuncios2 ceil($totalRows_anuncios2/$maxRows_anuncios2)-1
Si necesitas algo más,dimelo.
Un saludo.
  #4 (permalink)  
Antiguo 29/09/2009, 05:53
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Filtrar registros con campos vacios

Si alguien tiene alguna idea q lo comente...

no hace falta q sea la solucion exacta.solo algun 'camino sin explorar' que no se me haya ocurrido antes...

gracias a todos los q comenteis.
  #5 (permalink)  
Antiguo 29/09/2009, 08:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Filtrar registros con campos vacios

Busca en el foro, tienes que construir de forma dinámica tu query SQL e ir agregando los campos por los que vayas a filtrar, por ejemplo si vas a usar el 0 de comodín entonces vas construyendo el query:
Código PHP:
Ver original
  1. $aWhere = array();
  2. if ($_GET['anio'] != 0) {
  3.         $aWhere[] = "anio='". $_GET['anio']."'";
  4. }
  5. if ($_GET['color'] != 0) {
  6.         $aWhere[] = "color='".$_GET['color']."'";
  7. }
  8.  
  9. $sQuery = 'SELECT * FROM tabla';
  10. if (count($aWhere) > 0) {
  11.        $sQuery .= ' WHERE ' . implode(' AND ', $aWhere);
  12. }
  13.  
  14. echo $sQuery;

Saludos.
  #6 (permalink)  
Antiguo 29/09/2009, 10:35
 
Fecha de Ingreso: agosto-2009
Mensajes: 16
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Filtrar registros con campos vacios

Antes que nada,gracias por tu ayuda GatorV.

Entonces tengo q cambiar este Select por mi SELECT actual,no?

Mira..mi codigo(en version simple) es algo asi :

Código PHP:
<?php require_once('Connections/marcaprovincia.php'); ?>
<?php
$colname2_anuncios 
"-1";
if (isset(
$_POST['provincia'])) {
  
$colname2_anuncios = (get_magic_quotes_gpc()) ? $_POST['provincia'] : addslashes($_POST['provincia']);
}
$colname1_anuncios "-1";
if (isset(
$_POST['marca'])) {
  
$colname1_anuncios = (get_magic_quotes_gpc()) ? $_POST['marca'] : addslashes($_POST['marca']);
}

mysql_select_db($database_marcaprovincia$marcaprovincia);
$query_anuncios sprintf("SELECT * FROM anuncios, marcas, provincias WHERE anuncios.IdMarca = marcas.IdMarca AND marcas.IdMarca = %s AND anuncios.IdProvincia = provincias.IdProvincia AND anuncios.IdProvincia = %s"$colname1_anuncios,$colname2_anuncios);
$anuncios mysql_query($query_anuncios$marcaprovincia) or die(mysql_error());
$row_anuncios mysql_fetch_assoc($anuncios);
$totalRows_anuncios mysql_num_rows($anuncios);

mysql_select_db($database_marcaprovincia$marcaprovincia);
$query_marcas "SELECT * FROM marcas";
$marcas mysql_query($query_marcas$marcaprovincia) or die(mysql_error());
$row_marcas mysql_fetch_assoc($marcas);
$totalRows_marcas mysql_num_rows($marcas);

mysql_select_db($database_marcaprovincia$marcaprovincia);
$query_provincias "SELECT * FROM provincias";
$provincias mysql_query($query_provincias$marcaprovincia) or die(mysql_error());
$row_provincias mysql_fetch_assoc($provincias);
$totalRows_provincias mysql_num_rows($provincias);
?>

Me puedes decir como meto ese fragmento en esta pagina?

Gracias de nuevo GatorV.
Saludos!
  #7 (permalink)  
Antiguo 29/09/2009, 13:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Filtrar registros con campos vacios

El código que te deje es para que lo estudies y analizes la lógica, tu tienes que re-crear tu script basandote en el ejemplo que te dí, no es para que hagas un copy/paste ya que necesitas adaptar a) el Query a tu base de datos y b) los filtros que deseas usar.

Saludos.
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 12:56.