Mundo Web
manuales - recursos - graficos - programación...

Home - ASP -  Curso práctico - Capítulo 3  - 1 - 2 -  3

Curso práctico de ASP (III)
por Luciano Moreno, del departamento de diseño web de BJS Software.


La colección Request.QueryString.-

Cuando un usuario rellena un formulario y este es enviado mediante el método POST, la información del formulario se transmite a través de una conexión http independiente del programa o página ASP que la procesará, de tal forma que los datos se almacenarán por parejas name-value en una especie de objeto propio independiente.

Ahora bien, existe otro método de pasar valores de un formulario, el método GET, caracterizado porque ahora los datos son almacenados en una variable de entorno especial, de tipo cadena (string), denominada QueryString (cadena de consulta).  En este caso, los valores de los elementos de formulario son enviados en la misma conexión http que llama al programa de proceso, añadiendo al final de la URL de llamada una cadena especial del tipo genérico:

http://www.servidor.com/pagina.asp?name1=value1&name2=value2&...

Donde valueN representa el valor introducido por el usuario (o el que hayamos configurado por defecto) enDonde valueN representa el valor introducido por el usuario (o el que hayamos configurado por defecto) en el elemento de formulario con atributo name de valor nameN.

Por otra parte, la página ASP que va a procesar los datos recoge los datos del formulario mediante la colección Request.QueryString, generalmente asignando cada valor recogido a una variable propia:

<%
  Dim miName1 = Request.QueryString("name1")
  Dim miName2 = Request.QueryString("name2")  ....
%>

En el listado siguiente tenéis un ejemplo en el que partimos de una página html con un formulario, en el que el usuario debe introducir su nombre y su apellido. Los datos se envían a una página asp para su proceso, mediante el método GET. En esta página recogemos los valores mediante la colección Request.QueryString y los presentamos en pantalla:

ejemplo_3_1.html

<html>
<head>
  <title>titulo</title>
</head>
<body>
<form name="datosUsuario" action="ejemplo_3_1.asp" method="get">
  Nombre:<input type="text" name="nombre">
  Apellido:<input type="text" name="apellido">
  <input type="submit" value="enviar">
</form>
</body>
</html>

ejemplo_3_1.asp

<%@ Language="VBScript"%>
<html>
<head>
  <title>titulo</title>
</head>
<body>
<%
  Dim Nombre, Apellido
  Nombre=Request.QueryString("nombre")
  Apellido=Request.QueryString("apellido")
  Response.Write("Tu nombre completo es " & Nombre & " " & Apellido)
%>
</body>
</html>

Que tenemos en acción en esta ventana.

Si el usuario introduce el texto "Carlos" en el campo Nombre y el texto "Murillo" en el campo Apellidos, la petición http que se realiza al enviar los datos es del tipo (trabajando en el servidor local):

http://127.0.0.1/asp_3/ejemplo_3_1.asp?nombre=Carlos&apellido=Murillo

Aunque mediante los formularios podemos pasar directamente datos a una página ASP mediante el método GET, no son estos los únicos elementos que pueden usar dicho método. Disponemos también de los enlaces de hipertexto, los link tradicionales, que pueden ser usados para pasar datos mediante GET. En este caso, deberemos nosotros construir el enlace de forma apropiada, siguiendo la estructura típica de una variable QueryString. La sintaxis general será del tipo:

<a href="pagina.asp?name1=value1&name2=value2&...">

Esta forma de pasar valores mediante GET es muy útil a veces, como en el caso de tener una plantilla o template para mostrar contenidos análogos, como es el caso de una página de artículos de programación. Podemos entonces tener almacenados en una base de datos registros son el nombre del autor, dirección de e-mail, título del artículo y contenido del mismo. Si además introducimos un campo con un número o cadena identificador de cada artículo, podemos usar el método GET en los enlaces de un menú para cargar los diferentes artículos:

<a href="articulo.asp?idArticudo=1">
<a href="pagina.asp? idArticudo=1">

La página articulo.asp recogerá el idArtículo mediante la colección Request.QueryString, con lo que podemos extraer el artículo de la base de datos y presentarlo al usuario. Ya veremos esto con más detenimiento en los capítulos de acceso a beses de datos.

Por último, también podemos crear la variable QueryString de forma dinámica. Imaginemos una página en la que el usuario introduce diferentes datos en un formulario, que va a ser enviados para su proceso mediante el método POST. Pero nos conviene poder extraer en ciertos casos sólo unos datos determinados del formulario y que sean enviados mediante GET. En estos casos, podemos recoger mediante código de script en cliente (normalmente JavaScript) los valores de los campos deseados, y construir con ellos un enlace dinámico que porte el QueryString deseado.

En el listado siguiente tenéis el código necesario para ello. Como podéis ver, si el usuario desea más información y pulsa el enlace correspondiente, llamamos a una función JavaScript que recoge le valor del e-mail introducido por el usuario  en el formulario y lo añade dinámicamente a la URL de la página de proceso, dentro de la variable QueryString:

ejemplo_3_2.html

<html>
<head>
  <title>HTMLWeb. ASP. Curso práctico. Capítulo 3. Ejemplo 3.2 (I)</title>
  <script language="JavaScript">
    function envia()
    {< BR>     varemail=document.forms.datosUsuario.email.value<BR>     window.location.href="ejemplo_3_2.asp?email="+email
    }
  </script>
</head>
<body bgcolor="#ffff99">
<form name="datosUsuario">
<pre>
  Nombre:   <input type="text" name="nombre"><br>
  Apellido: <input type="text" name="apellido"><br>
  Edad:     <input type="text" name="edad"><br>
  DNI:      <input type="text" name="dni"><br>
  E-Mail:   <input type="text" name="email"><br><br>
                 <input type="button" value="enviar" onclick="alert('OJO. Sólo activo el enlace inferior')"><br>
  <a href="#" onclick="envia();return false;">más información por e-mail</a>
</pre>
</form>
</body>
</html>
%>

ejemplo_3_2.asp

<%@ Language="VBScript"%>
<html>
<head>
  <title>HTMLWeb. ASP. Curso práctico. Capítulo 3. Ejemplo 3.2 (II)</title>
</head>
<body bgcolor="#ffff99">
<%
  Dim Nombre, Apellido
  Nombre=Request.QueryString("nombre")
  Apellido=Request.QueryString("apellido")
  Email=Request.QueryString("email")
  Response.Write("Tu e-mail es " & Email)
%>
</body>
</html>

Que tenemos trabajando en esta ventana.

Limitaciones del método GET

A al hora de enviar datos mediante GET deberemos tener en cuanta que existe una longitud máxima en cuanto a los caracteres que podemos pasar en el QueryString, que corresponde a 256 caracteres. Por este motivo, el uso de GET está limitado a envíos en los que los datos a transferir son inferiores a esta longitud.

Otro aspecto negativo del método GET es la seguridad. Efectivamente, por un lado los valores pasados son visibles en la barra de direcciones del navegador web, con el consiguiente peligro de visualización de claves y datos sensibles. Este factor se suele paliar mediante procesos de ocultación de datos, sustituyendo los introducidos por el usuario por unos códigos equivalentes, como hace por ejemplo Yahoo en su página de acceso al servicio de correo web.

Por otra parte, es bien conocido por todos los implicados en seguridad el peligro de pasar valores a un script CGI o ASP mediante el QueryString, ya que si no se establecen los filtros adecuados es posible pasar cadenas especiales que consiguen ejecutar instrucciones de código en el servidor web, con el consiguiente peligro que acarrea esto.

 


siguiente

Home - ASP -  Curso práctico  - Capítulo 3  - 1 - 2 - 3