Foros del Web » Programando para Internet » PHP »

Duda con filtrado de tablas php

Estas en el tema de Duda con filtrado de tablas php en el foro de PHP en Foros del Web. Muy buenas a todos. El problema que tengo es con el filtrado de tablas, os cuento como lo tengo. Tengo una tabla de consolas que ...
  #1 (permalink)  
Antiguo 17/06/2012, 08:05
 
Fecha de Ingreso: enero-2010
Mensajes: 30
Antigüedad: 14 años, 3 meses
Puntos: 0
Pregunta Duda con filtrado de tablas php

Muy buenas a todos.

El problema que tengo es con el filtrado de tablas, os cuento como lo tengo.

Tengo una tabla de consolas que es llamada a una tabla mysql, dicha tabla se me genera en la web via php.

A la hora de filtrar lo hago a travez de un formulario, poniendo en cada select un onchange="this.form.submit()" para que el filtrado se haga automaticamente. Hasta aqui todo perfecto.

La duda viene cuando quiero hacer un segundo filtrado, por ejemplo que sean consolas de la tercera generacion y que empiecen por la letra A.

No se como hacer para que el filtro se guarde al realizar el subfiltro.

Os dejo la parte de codigo que tengo.

Código:
<form name="listaPlataformas" method="post" action="">


  
<select name="letra" id="letra" onchange="this.form.submit()">
           	  <option SELECTED value="">Todos</option>
                  <option  value="a">Letra A</option>
                                    ..............
	         <option  value="z">Letra Z</option>
</select>

<select name="generacion" id="generacion" onchange="this.form.submit()">
           	  <option SELECTED value="">Todas</option>
                          <option  value="primera">1º Generacion</option>
                                                 ........
			  <option  value="septima">7º Generacion</option>
</select>
</form>
NOTA: Las dos lineas que he puesto "........." es para simplificar codigo y no repetir una linea con cada letra o generacion.

Los datos de los select los recogo de la siguiente forma.

Código:
$letra=$_POST['letra'];
$generacion=$_POST['generacion'];
Respecto la consulta mysql es las siguiente.

Código:
$consulta="SELECT plataformas.imagen,nombre,compania,categoria,generacion,numJuegos FROM plataformas,compania WHERE plataformas.idCompania = compania.idCompania AND nombre LIKE '". $letra ."%' AND generacion LIKE '". $generacion ."%'";

La pregunta es, ¿Como tendria que poner la consulta sql o php para que pueda recordar todos los filtros?

Luego tengo otras dos dudas.

La primera es que al cargar la pagina por primera vez me sale dos errores.

"Notice: Undefined index: letra in on line 121
Notice: Undefined index: generacion in on line 122"

Pero eso seguramente sea por que la primera vez no he seleccionado nada en los filtros y la variable no esta bien definida, pero lo raro es que si tengo en los select "SELECTED" no deberia salirme estos errores, no?, aunque creo que se puede solucionar con un if que si es la priemera vez no se ejecuta el "WHERE" del filtro.

La segunda duda (aunque creo que es una tonteria) es que cuando selecciono un filtro, por ejemplo que empieze por letra A. Lo suyo es que una vez filtrado en el campo letra aparezca A y no todos (que es el valor por defecto), es decir, me filtra pero no conserva el selected en el imput.

Muchas gracias por vuestra ayuda.
  #2 (permalink)  
Antiguo 17/06/2012, 09:51
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Duda con filtrado de tablas php

Bueno, lo que dices del error ese si sale aunque le pongas selected, porque las variables $_POST no existen, se crean al hacer una petición por post, como la que haces en el formulario.

Tu otro problema, el que al cambiar un filtro no te recuerda el otro es porque recarga la página al enviar el formulario, de hecho al cambiar uno y enviarse este, la página se recargará y seguramente en tu formulario no aparecerá seleccionada esa opción aunque si ha funcionado bien la consulta.
Lo puedes solucionar de 3 maneras una más aconsejable q la otra pero tú eliges.
Una sería hacer las operaciones con ajax para que no se recargue la página, otra (la más sencilla a mi parecer) cambiar el onchange y utilizar un botón para aplicar los filtros y otra sería mirar las varibales $letra y $generacion en php y al cargar la página mirar cual elegiste para que aparezca seleccionada, algo así:
Código PHP:
<option if($letra == ''){echo 'selected="selected"';} ?> value="">Todos</option>
<option <?php if($letra == 'a'){echo 'selected="selected"';} ?> value="a">Letra A</option>
...
Ya me dirás porque opcion te decantas, lo del formulario con botón sería la más sencilla, aunque la persona debería ver que filtros ha aplicado y así no lo vería :S

Etiquetas: formulario, mysql, sql, tabla, tablas, variables, filtros
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:17.