Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/10/2006, 17:58
Avatar de -Defero-
-Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 20 años, 8 meses
Puntos: 76
Pregunta Formulario para filtrar resultados

Estoy montando una web con PHP y MySQL, en la que en cierto documento se extrae información que cumple ciertos criterios de la base de datos, y se muestran en el documento. Para simplificar pongamos como ejemplo que se trata de una base de datos de libros, en la que tenemos los siguientes datos en una tabla:

id
autor
título
género
año
editorial
páginas
disponible (1 si está disponible, 0 si no está disponible)

La web se divide en distintas secciones dependiendo del género, así que empezamos por declarar una variable que pasaremos a través de la URL al seleccionar la sección:

Código PHP:
$genero $HTTP_GET_VARS["gen"]; 
Y quiero que el usuario pueda ordenar los libros según el criterio que le parezca oportuno, así que declaro otra variable para la URL:

Código PHP:
$orden $HTTP_GET_VARS["ord"]; 
Extraigo los datos de la siguiente manera, seleccionando únicamente los libros que estén disponibles y que correspondan al género adecuado:

Código PHP:
$consulta "select * from tabla WHERE (disponible='1' AND genero='$genero') order by '$orden' asc" 
Permitiré elegir el orden plantando los siguientes enlaces:

Código PHP:
echo "<td><a href=\"?gen=$genero&ord=autor\"></td>
    <td><a href=\"?gen=$genero&ord=título\"></td>
    <td><a href=\"?gen=$genero&ord=año\"></td>
    <td><a href=\"?gen=$genero&ord=editorial\"></td>
    <td><a href=\"?gen=$genero&ord=páginas\"></td>"

Y ahora muestro los datos extraídos en una tabla:

Código PHP:
echo "<td>$consulta[id]</td>
<td>$consulta[autor]</td>
<td>$consulta[título]</td>
<td>$consulta[género]</td>
<td>$consulta[año]</td>
<td>$consulta[editorial]</td>
<td>$consulta[páginas]</td>"
;
$i++; 
Llegar hasta aquí me ha costado bastante trabajo, ya que no domino el tema. Además podréis comprobar que he omitido parte del código para no tener que explicar lo que hace, ya que no estoy muy seguro de su función (como lo de mysql_query).

Pero ahora quiero no sólo poder ordenar los resultados según el criterio que me apetezca, sino además poder filtrarlos, sacando de la lista los resultados que no me gusten.

Es decir, que en el documento el usuario disponga de unos formularios donde seleccionar el autor, de manera que se muestren sólo los resultados que coincidan con el mismo. O quizás no sabe el autor, pero sí el año en el que se editó el libro. O quiere saber qué libros publicó cierta editorial en un año en concreto.

En resumen, quiero que el usuario pueda elegir qué filtros aplicar a los resultados. Y no se me ocurre cómo hacerlo, ni encuentro información al respecto en Google (seguramente estoy eligiendo mal los términos de búsqueda). Se me ocurre que podría declarar más variables mediante http_get_vars, y luego en la consulta SQL meter más condiciones con variables en "where...", pero eso me plantea un problema, y es que me obliga a especificar todos los filtros, ya que de lo contrario no obtengo ningún resultado. Es decir, si le meto a la consulta una nueva condición con variable de la siguiente manera:

Código PHP:
$consulta "select * from tabla WHERE (disponible='1' AND genero='$genero' AND año='$año') order by '$orden' asc" 
Voy a tener que especificar forzosamente el año, ya que de lo contrario no me mostrará ningún resultado. Al menos es eso lo que me ocurre cuando hago pruebas. Y no es ése el resultado que busco, quiero permitir al usuario que utilice criterios tan amplios como considere oportuno. Incluso me gustaría que en caso de querer seleccionar libros de una época concreta, no tuviera que ajustar el año, y que pudiera seleccionar un rango (de 1995 a 2001, por ejemplo).

Por eso vengo en busca de ayuda, para que alguien me oriente con un enlace donde se explique de manera más o menos sencilla cómo hacerlo, o con una explicación breve y un ejemplo simple.

Por cierto, no sabía si debía plantear esta pregunta en este foro o en el de MySQL. Agradeceré a los moderadores que lo muevan al subforo adecuado si consideran que éste no es el correcto.
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable