Página principal III

Descripción de la segunda parte del script busqueda.asp
Hemos visto lo que ocurre cuando el visitante entra por primera vez en la página de búsqueda. Si el internauta ha elegido un criterio de búsqueda, el script lo reenvía a él mismo pero esta vez la secuencia de instrucciones que se llevaran a cabo no son las mismas ya que, las condiciones de "origen" externo no se cumplen. En este caso se presupone entonces que se ha elegido un criterio de búsqueda, el cual ha sido enviado mediante la variable "criterio" por URL y lo que hará falta por lo tanto es mostrar los resultados de la búsqueda por ese criterio.

Lo primero que haremos es recoger el criterio y almacenarlo en una variable para una más fácil explotación. A continuación veremos si el criterio elegido es "titulo" o no, ya que, el tratamiento que daremos será diferente si buscamos por título.

'Recogemos el criterio
   criterio=Request.Querystring("criterio")


'Miramos si el criterio es el titulo o no
   If criterio<>"titulo" Then 'el criterio es por autor o por editorial


Si la búsqueda es por editorial o por autor lo que haremos será:

-Mostrar en pantalla el criterio elegido:

<tr><th bgcolor="#999966" align="center"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><%imprimir(criterio)%></font></th></tr>

-Seleccionar los distintos autores o editoriales presentes en nuestro catálogo en la tabla "artículos":

'Generamos nuestra sentencia SQL y la ejecutamos
   sSQL="Select Distinct "&criterio&" From articulos"
   set RS=Conn.Execute(sSQL)


-Mostrar en pantalla en forma de enlaces cada uno de los elementos de esta selección. El enlace apuntará hacia este mismo script y contendrá en su URL dos variables: "criterio" que en este caso será "titulo" y una segunda llamada "editorial" o "autor", dependiendo del valor de nuestra variable "criterio", que tomara los valores del nombre de la editorial o del autor en cuestión. Esto que puede ser difícil de explicar resulta muy fácil de ver cuando ejecutamos el script y nos ponemos con el puntero del ratón sobre el enlace y miramos la barra de estado para ver la URL a la que apunta.

'Imprimimos los enlaces
   While Not RS.Eof%>
      <tr>
      <td bgcolor="#cc9900" align="center"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><a href="busqueda.asp?criterio=titulo&<%=criterio%>=<%=RS(criterio)%>"><%=RS(criterio)%></a></font></td>
      </tr>
    <%RS.MoveNext
   Wend%>


En el caso en que la búsqueda sea por título o hayamos tenido acceso a una búsqueda por editorial o autor en la que ya hemos seleccionado alguno de ellos mediante en enlace descrito recientemente, el proceso llevado a cabo es el siguiente:

Recogemos el valor de la segunda variable que acompaña a "criterio". Esta puede llamarse "editorial" o "titulo" dependiendo de que tipo de búsqueda estemos realizando. Además, puede que vengamos directamente de la primera parte del script en cuyo caso esta segunda variable tendrá un valor vacío("").

'Recogemos el segundo criterio si lo hay
   autor=Request.Querystring("autor")
   editorial=Request.Querystring("editorial")


Llegados a este punto, varias posibilidades se nos presentan en función de las cuales nuestra sentencia SQL puede variar:

-Puede que vengamos de la primera parte del script en la que hemos solicitado una búsqueda por título. En este caso hacemos una selección de la tabla artículos al completo para mostrar todos los títulos del catálogo.

'Generamos nuestra sentencia SQL y la ejecutamos
   If editorial="" and autor="" Then 'el internauta ha pedido la lista entera
      sSQL="Select * From articulos"


-Otra posibilidad es que hayamos hecho una búsqueda por editorial lo cual quiere decir que nuestra variable "editorial" no estará vacía. En este caso la selección SQL nos elegirá los artículos correspondientes a la editorial que hayamos elegido previamente:

Elseif editorial<>"" Then 'el internauta ha pedido la lista correspondiente a una editorial
   sSQL="Select * From articulos Where editorial Like '"&editorial&"'"


-La ultima opción posible es que los títulos que debemos mostrar sean los correspondientes a un autor. El tipo de selección será por lo tanto análogo a la de editorial en la que cambiaremos la variable a utilizar:

Else 'el internauta ha pedido la lista correspondiente a un autor
   sSQL="Select * From articulos Where autor Like '"&autor&"'"
End If


Generada nuestra sentencia SQL apropiada, lo que nos queda por hacer es ejecutarla y visualizar los resultados de la misma forma que hemos descrito con anterioridad para editoriales y autores:

   <table align="center" width="700" cellspacing="2" cellpadding="2" border="0">
   <tr><th bgcolor="#999966" colspan="5"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><%imprimir(criterio)%></font></th></tr>
<%
   set RS=conn.execute(sSQL)
'Imprimimos los enlaces
   While Not RS.Eof%>
      <tr>
      <td bgcolor="#cc9900"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><%=RS("titulo")%></font></td>
      <td bgcolor="#cc9900"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><%=RS("autor")%></font></td>
      <td bgcolor="#cc9900"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><%=RS("editorial")%></font></td>
      <td bgcolor="#cc9900"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><%=RS("precio")%></font></td>
      <td bgcolor="#cc9900"><FONT face="verdana,arial,helvetica" size=2 color="#ffffff"><a href="anadir.asp?id=<%=RS("id_articulo")%>"><%imprimir("anadir")%></a></font></td>
      </tr>
      <%RS.MoveNext
   Wend%>


A notar que en este caso, además del titulo, mostramos el autor, editorial precio y proponemos un enlace que apunta hacia otra página (anadir.asp) que nos permite añadir el libro en cuestión al carrito. Para ello nos hará falta pasar por URL la referencia del libro (id) la cual la obtenemos igualmente de la base de datos (id_articulo).

Ir la librería