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: 17 años, 1 mes
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: 18 años, 9 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: 17 años, 1 mes
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: 17 años, 1 mes
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: 20 años, 4 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: 17 años, 1 mes
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: 20 años, 4 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 05:58.