• Olá Visitante, se gosta do forum e pretende contribuir com um donativo para auxiliar nos encargos financeiros inerentes ao alojamento desta plataforma, pode encontrar mais informações sobre os várias formas disponíveis para o fazer no seguinte tópico: leia mais... O seu contributo é importante! Obrigado.

Workshop de ASP

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
4.- Quando o usuário terminar sua sessão de chat devemos eliminar a cookie que o identifica, para isso usaremos o modulo fechar.asp

fechar.asp

<% if Request.cookies("Apelido")<>"" then
Application.Lock
Temporal=Application("Opinioes")
FOR i=7 TO 0 STEP -1
Temporal(i+1)=Temporal(i)
NEXT
Temporal(0)="<FONT COLOR=""#FF0000"">** " &Request.cookies("Apelido")&" ** sai do minichat</FONT>"
Application("Opinioes")=Temporal
Application.Unlock
response.cookies("apelido")=""

END IF%>
<HTML>
<HEAD>
<script language="JavaScript">
{close();}
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>

5.- Agora montaremos tudo em uma página de frames

default.asp

<html>

<head>
<title>Sala de bate-papo</title>
</head>

<FRAMESET rows="*,70">
<FRAME SRC="visualizacao.asp">
<FRAME SRC="incluir.asp" target="_self">
</FRAMESET>

</html>

6.- Para que fique "bonito" mostraremos o chat em uma nova janela sem barras e menor, isso será feito com JavaScript

<HTML>
<HEAD>
<script language="JavaScript">
<!--
function openWindow(url, name) {
popupWin = window.open(url, name, 'scrollbars,resizable,width=400,height=350')
}
// -->
</script>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#000000" VLINK="#000000">
<a HREF="javascript:eek:penWindow('default.asp', 'minichat');">Enter chatroom</a>
</BODY>
</HTML>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Averiguar o endereço IP de um visitante e bloquear IPs, em ASP




Script para obter o endereço IP de um visitante e bloquear se a IP não estiver permitida.

Por Miguel Angel Alvarez - Tradução de JML





Veremos como averiguar o endereço IP de um visitante em uma página ASP. É um processo muito simples, já que existem duas variáveis de servidor que nos oferecerão diretamente esta informação.

Podem ocorrer dois casos que temos que comprovar: 1) que o visitante navegue ele mesmo sobre a página y 2) que navegue através de um proxy. Isto podemos comprovar da seguinte maneira:

' Salvar a IP do visitante
'O visitante pode acessar por proxy, então pego a IP que estiver utilizando
ip = request.servervariaveis("HTTP_X_FORWARDED_FOR")
'Se não vier de um proxy, pego a ip do visitante
if ip ="" then
ip = Request.servervariaveis("REMOTE_ADDR")
end if

Se quisermos evitar que um visitante navegue em nossas páginas com uma IP dada, simplesmente temos que comprovar com um IF que essa IP que queremos bloquear não é a do visitante.

if ip = "127.0.0.1" then
response.write ("bloqueio")
end if

Imaginemos que temos uma lista de IPs que queremos bloquear. Então seria útil colocar um simples array de IPs a bloquear e um loop para percorre-lo, de modo que possamos comprovar se a IP do visitante está no array de bloqueadas.

'crio um array de ips bloqueadas
dim ips_bloqueadas(5)
ips_bloqueadas(0) = "10.10.1.1"
ips_bloqueadas(1) = "103.10.1.21"
ips_bloqueadas(2) = "1.130.41.1"
ips_bloqueadas(3) = "30.105.61.13"
ips_bloqueadas(4) = "102.210.161.1"

'para cada ip bloqueada
for each ip_atual in ips_bloqueadas
'se a ip do visitante for igual a uma delas que há que bloquear
if ip = ip_atual then
response.redirect "explica_bloqueio.html"
end if
next
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Lista dos arquivos de um diretório com ASP




Vejamos como obter a lista de arquivos que existe dentro de um diretório de nosso disco rígido mediante programação ASP, com o sistema de arquivos do servidor FSO.

Por Miguel Angel Alvarez - Tradução de JML





Neste workshop de ASP mostraremos como obter uma lista dos arquivos que existem em uma pasta, dentro do sistema de arquivos do servidor.

ASP dispõe de uma série de objetos para acessar a qualquer recurso dentro dos discos rígidos do servidor web. No entanto, será necessário que nesses discos rígidos tenhamos permissões para poder trabalhar. Possivelmente, se provarmos os scripts dentro de nosso computador local, não haverá nenhum problema para listar os conteúdos de qualquer diretório, porém se o provamos em um servidor de hospedagem compartilhada, possivelmente tenhamos problemas com as permissões, a não ser que estivermos tentando acessar a uma pasta que esteja dentro do nosso diretório de publicação.

Agora vejamos um código para mostrar os arquivos contidos em uma pasta. Primeiro que tudo, temos que decidir o nome da pasta que desejamos explorar, ou seja o diretório físico que desejamos listar seus arquivos. Algo como C:\inetpub\wwwroot\

Se estivermos fazendo provas em nosso computador local, podemos conhecer perfeitamente o nome de qualquer pasta, porque sabemos a estrutura de discos e diretórios de nosso computador. Porém, se estivermos em uma hospedagem compartilhada, teremos que fazer uma pequena ação para saber o nome do diretório físico onde podemos listar seus arquivos.

Em local, podemos decidir diretamente o nome da pasta:

'declaro o nome de uma pasta
nome_pasta = "C:\"

Em uma hospedagem compartilhada, poderíamos obter assim o nome da pasta física onde está o arquivo ASP que estamos executando:

nome_pasta = Server.MapPath(".") & "\"

Como se vê, se utiliza o método de Server.mappath() para obter o nome de um diretório. A este método lhe passamos a rota relativa do diretório que se deseja obter o nome físico. Neste caso, passando-lhe ".", nos devolverá o diretório físico onde está o script ASP que estamos executando. Algo como X:\webs\meudominio.com\Html\

Uma vez tendo o nome do diretório que desejamos listar arquivos, temos que obter o objeto pasta deste diretório. Para isso, devemos conectar com o sistema de arquivos do computador:

'Conecto com o sistema de arquivos
set FSO = server.createObject("Scripting.FileSystemObject")

E logo temos que extrair o objeto pasta do diretório desejado:

'crio o objeto pasta
Set pasta = FSO.GetFolder(nome_pasta)

O seguinte passo é tirar todos os arquivos dessa pasta:

'pego os arquivos da pasta
Set archivos = pasta.Files

Para finalizar, listamos o nome de cada arquivo conteúdo na pasta, mediante um loop for… each:

'para cada arquivo, mostro seu nome.
for each nome_arquivo in arquivos
response.Write "<br>" & nome_arquivo
next

O exemplo completo seria algo como a seguir:

<%
'obtenho o diretório físico da pasta onde está este script
nome_pasta = Server.MapPath(".") & "\"
response.write "<h1>-" & nome_pasta & "</h1>"

'Conecto com o sistema de arquivos
set FSO = server.createObject("Scripting.FileSystemObject")

'crio o objeto pasta
Set pasta = FSO.GetFolder(nome_pasta)

'pego os arquivos da pasta
Set archivos = pasta.Files

'para cada arquivo, mostro seu nome.
for each nome_arquivo in arquivos
response.Write "<br>" & nome_arquivo
next
%>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Percorrido genérico por um recordset com ASP



Script ASP que realiza um percorrido por um conjunto de registros ou recordset (RS), mostrando todos os registros e todos os campos de cada registro.

Por Miguel Angel Alvarez - Tradução de JML





Neste workshop de ASP vamos realizar uma consulta a uma tabela de um banco de dados para poder tirar um conjunto de registros. Logo, vamos fazer um percorrido por esse conjunto de registros genéricos, sem importar os nomes dos campos e o número de registros ou de campos, mostrando todos os dados extraídos no recordset. A consulta que realizarmos sobre a tabela será indiferente, ou seja, o script está preparado para realizar o percorrido seja qual for o conjunto de registros resultante e os nomes dos campos.

O objetivo é mostrar todos os dados do recordset em uma tabela. Na primeira fila da tabela colocaremos os nomes dos campos que tem cada registro e nas seguintes filas, os valores dos campos de cada registro obtido na consulta.

Lembremos que as explicações sobre conectar e trabalhar com um banco de dados estão em nosso manual de ASP.

O primeiro pedaço de código é uma conexão com o banco de dados por meio de DSN e a execução de uma sentença SQL.

'conecto BD e gero RS
set conn = server.createobject("adodb.connection")
conn.open "meuDSN"
sSQL="select * from tabela"
set rs=conn.execute(sSQL)

Uma vez criado o recordset na variável "rs", temos que escrever o cabeçalho da tabela com os nomes dos campos que tem cada registro recebido.

'nomes dos campos como cabecalho da tabela
response.write "<table border='1'><tr>"
for i = 0 to rs.fields.Count - 1
response.write "<th align='center' bgcolor='#eeeeee'>"
response.write rs.fields(i).name
response.write "</th>"
next
response.write "</tr>"

No código anterior se realizou um percorrido a cada um dos campos do primeiro registro do recordset e para cada um deles foi escrito seu nome, armazenando em rs.fields(i).name, a propriedade name do campo. Assim, mostraremos uma célula por cada nome dos campos do registro.

O passo seguinte será mostrar o conteúdo de cada um dos registros, realizando um percorrido genérico por todo o recordset.

'agora, para cada registro
while not rs.EOF
response.write "<tr>"
'mostro todos os campos que tem
for i = 0 to rs.fields.Count - 1
response.write "<td>" & rs.fields(i) & "</td>"
next
response.write "</tr>"
rs.movenext
wend
response.write "</table>"

O loop "while not rs.EOF" é para percorrer cada registro. Para cada registro cria-se uma fila. Logo, acrescenta-se outro loop "for i = 0 to rs.fields.Count" para percorrer cada campo do registro. Para cada campo escreve-se o valor em uma coluna. Para terminar, fecha-se a tabela.

O script já terminou. Só nos resta fechar as conexões com o banco de dados.

'fecho o bd e o recordset
rs.close
conn.Close

Podemos ver o código fonte completo a seguir:

<%
'conecto BD e gero RS
set conn = server.createobject("adodb.connection")
conn.open "meuDSN"
sSQL="select * from tabela"
set rs=conn.execute(sSQL)

'nomes dos campos como cabecalho da tabela
response.write "<table border='1'><tr>"
for i = 0 to rs.fields.Count - 1
response.write "<th align='center' bgcolor='#eeeeee'>"
response.write rs.fields(i).name
response.write "</th>"
next
response.write "</tr>"
'agora, para cada registro
while not rs.EOF
response.write "<tr>"
'mostro todos os campos que tem
for i = 0 to rs.fields.Count - 1
response.write "<td>" & rs.fields(i) & "</td>"
next
response.write "</tr>"
rs.movenext
wend
response.write "</table>"

'fecho o bd e o recordset
rs.close
conn.Close
%>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Intranets com ASP



Com ASP podemos criar Intranets que automatizem os processos da empresa.

Por Mario Matías Sebely




Este artigo sai um pouco da temática do Workshop de ASP, porém acho que também pode dar idéias aos leitores sobre o que se pode fazer com ASP na prática no mundo da empresa.


Há alguns dias, um médico daqui da zona onde vivo, me disse:

Preciso que você me faça um programa para o hospital, se anima?

Isso me pareceu bem interessante e ao me informar dos detalhes, vi que era uma enquete que queriam fazer no PC, para logo realizar algumas estatísticas com a informação arrecadada.

Eu lhe disse que me animava, e analisando o projeto me deparei com uma enquete de 170 opções e campos.

Decidi realiza-la e ASP utilizando uma banco de dados de Access para salvar a informação.

Conseguimos a programação em uns dois dias e tudo andou muito bem.

Eles mediante um Servidor NT que tinham poderiam carregar os dados através de formulários e logo utilizar a informação do banco de dados para realizar diferentes consultas.

Aonde quero chegar é que com ASP também podemos utiliza-lo para intranets, através de um Server NT podemos fazer maravilhas, em desenvolvimento de Programas empresariais, já que podemos fazer consultas, que nos arroje gráficos, buscas, etc.

Como exemplo, suponhamos que na nossa empresa temos uma rede, e nosso negócio é a venda de livros.

Então, nós com um pouco de conhecimento administramos um Banco de Dados criando distintos campos, incluímos um buscar, algumas consultas que listem as últimas entradas, os gastos, e desta forma organizar a informação do nosso inventario!

Realmente ASP a parte de ser uma linguagem para Web, pode-se dar utilidades muito grandes para intranets, para o manejo que nós quisermos dar.

Talvez alguns indaguem quais seriam as vantagens de ASP, eu posso comentar algumas:
É leviano e pode correr em PCs normais que tenham Windows e um servidor web.
Pode-se utilizar desde qualquer computador que esteja conectado à rede que tenha instalado um navegador.
É muito fácil de programar, e tem muitas utilidades que com uma breve linha de aprendizagem podem ser modificadas ao seu gosto.
Animem-se como eu me animei, e desenhem seus "Programas" ASP para intranets, que obviamente também podem ser utilizados na Internet.

O ponto está em que as novas tecnologias para Internet podem ter muitos usos e ser o substituto de programas comuns em uma empresa.

Na prática você mesmo pode construir uma intranet com a ajuda de criarweb.com, simplesmente trata-se de aprender ASP com os manuais da página. Além disso, tal como está relatado nos manuais, você precisará instalar um servidor web em sua própria máquina para provar as páginas que for criando. O servidor web poderá ser Internet Information Server se trabalhar com NT ou Personal Web Server se seu sistema for Windows 95 ou superior.

Quando estiver provando os scripts em local já terá uma Intranet montada. Se provar chamar a esse servidor desde o navegador de qualquer computador da rede, você poderá acessar as páginas que tiver programado. Podemos chamar ao servidor com uma URL como http://nome_da_maquina/sua_pagina.html ou http://168.255.1.1/sua_pagina.html, sendo o número IP o do servidor ao que se deseja acessar.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Restringir o acesso a páginas com ASP



A muitas pessoas certamente já ocorreu de necessitar que certas páginas de nosso web só possam ser acessadas por usuários previamente autorizados.

Por Pedro Rufo Martin





Mostramos a seguir um método simples, porém eficaz para consegui-lo.

Para salvar a lista de usuários autorizados com seus correspondentes password criaremos em um banco de dados chamada XXXXX (não use um nome óbvio demais) uma tabela que denominaremos USUARIOS com os campos USUARIO e PASSWORD.



usuario-tabla.gif

Vamos passo a passo:

1.-Criamos uma página com um formulário para que o usuário se identifique.

2.- Efetuaremos a comprovação do usuário e password introduzidos com uma simples consulta à tabela USUARIOS, no caso de que a identificação seja correta criaremos para esse usuário uma variável de sessão com um valor que identifique sua validação como usuário.
No caso de que a validação seja errônea, devolvemos ao usuário ao formulário de login com uma mensagem de erro.

Login.asp
<%if request.form("usuario")="" then%>
<form method="POST" action="login.asp">
<p> </p>
<p> </p>
<p> </p>
<p align="center"><%=request.querystring("msg")%></p>
<div align="center">
<center>
<table border="0" width="50%" bgcolor="#F2F2F2">
<tr>
<td width="100%" colspan="2" bgcolor="#0000FF">
<p align="center"><font color="#FFFFFF">Login</font></td>
</tr>
<tr>
<td width="50%">Usuario:</td>
<td width="50%"><input type="text" name="usuario" size="20"></td>
</tr>
<tr>
<td width="50%">Password: </td>
<td width="50%"> <input type="password" name="password" size="20"></td>
</tr>
<tr>
<td width="100%" colspan="2">
<p align="center"><input type="submit" value="Enviar" name="B1"></td>
</tr>
</table>
</center>
</div>
</form>

<%else
'eliminamos as possíveis aspas da entrada
'para evitar a introdução de sentenças SQL
usuario=replace(request.form("usuario"),"'","")
password=replace(request.form("password"),"'","")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\dirBD\xxxxx.mdb"))
set rs = CreateObject("ADODB.Recordset")
sqltxt="Select * from usuarios where usuario='"&usuario&"' and password= '"&password&"'"
'response.write sqltxt
rs.Open sqltxt, conn
if not rs.eof then
' nos devolveu um registro, agora veremos se é válido
' com isso evitamos o ataque típico SQL
if rs("usuario")=usuario and rs("password")=password then
' se o usuário estiver no banco de dados e a password coincidir
sessao("autorizacao")=1
response.redirect "default.asp"
end if
else
sessao("autorizacao")=-1

end if
rs.close
set rs=nothing
conn.close
set conn=nothing
if sessao("autorizacao")=-1 or session("autorizacao")="" then
' não encontramos o registro
' isso indica que o usuário e/ou a password são errados
response.redirect "login.asp?msg=Usuario%20o%20password%20incorreta"
end if

end if%>

Logo, simplesmente, em cada uma das páginas que quisermos que requeiram autorização prévia checaremos essa variável de sessao e permitiremos o passo se a checagem for correta ou caso contrário, re-encaminharemos o usuário à página de identificação.

<% if session("autorizacao")<>1 then

response.redirect "login.asp"

end if%>

O sistema nos permitiria inclusive conceder diferentes níveis de acesso a páginas dependendo do usuário, simplesmente atribuindo um diferente valor a sua variável de sessao.


 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Saídas em formato compatível Excel



Este exemplo aproveita a capacidade do excel para interpretar o conteúdo de tabelas escritas em linguagem HTML.

Por Pedro Rufo Martin


Uma tabela deste estilo pode ser interpretada por excel:

tabla-excel.gif


que nos mostraria algo deste estilo:

tabla-excel-2.gif


O truque consiste em indicar ao navegador cliente que o que vai receber não é uma página HTML, e sim, um arquivo excel, isto o indicaremos com a instrução asp:

<%Response.ContentType = "application/vnd.ms-excel"%>

No exemplo o que vamos executar é o seguinte código asp:

<html>

<head>
<% Response.Buffer = TRUE
Response.ContentType = "application/vnd.ms-excel"%>

<title>Exemplo de compatibilidade Excel</title>
</head>

<body>
<table border="1" width="60%">
<tr>
<td width="50%" align="center" bgcolor="#C0C0C0">Nº de Fatura</td>
<td width="50%" align="center" bgcolor="#C0C0C0">Importe</td>
</tr>
<tr>
<td width="50%" align="center">1</td>
<td width="50%" align="center">12000</td>
</tr>
<tr>
<td width="50%" align="center">2</td>
<td width="50%" align="center">24000</td>
</tr>
<tr>
<td width="50%" align="center"> </td>
<td width="50%" align="center"><b>=SOMA(B2:B3)</b></td>
</tr>
</table>

</body>

</html>

Quando executarmos o navegador nos dará a opção de salvar o arquivo ou executa-lo através da rede, escolheremos a opção que mais nos interessar.

excel.gif




 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Variáveis de servidor em ASP



Vemos como obter uma lista de todas as variáveis do servidor em ASP, ou em inglês Server Variables. Realizando um percorrido genérico ao array request.servervariables.

Por Miguel Angel Alvarez - Tradução de JML





Em ASP existe uma coleção de variáveis de servidor ou variáveis de ambiente que podem ser interessantes para o programador. As variáveis do servidor oferecem informações relativas tanto ao próprio servidor web como ao cliente que está visitando a página.

Entre os dados que oferecem se encontram o nome do servidor, o nome do arquivo que se está executando, a IP do servidor, a do cliente que está solicitando a página, jogo de caracteres, navegador que utiliza o cliente, etc.

A coleção onde se encontram todas as variáveis do servidor se encontra no array de ASP request.servervariables. Existem muitos valores diferentes nesse array, cada um associado a um nome.

Por exemplo, para mostrar a IP do visitante colocamos:

<%=request.servervariables("REMOTE_ADDR")%>

Para conhecer o navegador do usuário colocaríamos:

<%=request.servervariables("HTTP_USER_AGENT")%>

Ou para ver a rota física onde está o arquivo ASP que se está executando, dentro da estrutura do sistema de arquivos do servidor (o disco rígido e a rota completa do arquivo .asp):

<%=request.servervariables("APPL_PHYSICAL_PATH")%>

Percorrido genérico ao array request.servervariables

Uma boa idéia para conhecer todas as variáveis que existem no array de variáveis de servidor é fazer um percorrido genérico a request.servervariables. Para fazer esse percorrido podemos utilizar um loop for each. Como isto:

for each variable in request.servervariables
response.write "<br> " & variable & ": "
response.write request.servervariables(variable)
next

Com isto mostraremos o nome de cada variável junto com o valor dessa variável. Assim, poderemos ver todas as variáveis que contem o array junto com o dado que armazenam e podemos nos dar conta dos dados que temos disponíveis.

O resultado de execução desse script em um de nossos servidores é o seguinte:

HTTP_CONNECTION:keep-alive
HTTP_KEEP_ALIVE:300
HTTP_ACCEPT:text/xml,application/xml,application/xhtml+xml,text/html; q=0.9,text/plain; q=0.8,image/png,*/*; q=0.5
HTTP_ACCEPT_CHARSET:ISO-8859-1,utf-8;q=0.7,*;q=0.7
HTTP_ACCEPT_ENCODING:gzip,deflate
HTTP_ACCEPT_LANGUAGE:es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
HTTP_COOKIE:ASPSESSIONIDASTATCRD=GAJDKNCANGABJAPEOGBONGFN; ASPSESSIONIDAQSBSCRD=LAJDPPEADNEMHDBKOCLAIMAD
HTTP_HOST:entertainment
HTTP_USER_AGENT:Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9
ALL_RAW: Cache-Control: max-age=0 Connection: keep-alive Keep-Alive: 300 Accept: text/xml,application/xml,application/xhtml+xml,text/html; q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Accept-Encoding: gzip,deflate Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Cookie: ASPSESSIONIDASTATCRD=GAJDKNCANGABJAPEOGBONGFN; ASPSESSIONIDAQSBSCRD=LAJDPPEADNEMHDBKOCLAIMAD Host: entertainment User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9
APPL_MD_PATH: /LM/W3SVC/881/ROOT
APPL_PHYSICAL_PATH: C:\WWW\dominio.com\Html\
AUTH_PASSWORD:
AUTH_TYPE:
AUTH_USER:
CERT_COOKIE:
CERT_FLAGS:
CERT_ISSUER:
CERT_KEYSIZE:
CERT_SECRETKEYSIZE:
CERT_SERIALNUMBER:
CERT_SERVER_ISSUER:
CERT_SERVER_SUBJECT:
CERT_SUBJECT:
CONTENT_LENGTH: 0
CONTENT_TYPE:
GATEWAY_INTERFACE: CGI/1.1
HTTPS: off
HTTPS_KEYSIZE:
HTTPS_SECRETKEYSIZE:
HTTPS_SERVER_ISSUER:
HTTPS_SERVER_SUBJECT:
INSTANCE_ID: 881
INSTANCE_META_PATH: /LM/W3SVC/881
LOCAL_ADDR: 255.176.130.0
LOGON_USER:
PATH_INFO: /pruebas_dw/variables_server.asp
PATH_TRANSLATED: C:\WWW\dominio.com\dominio.com\Html\pruebas_dw\variables_server.asp
QUERY_STRING:
REMOTE_ADDR: 1.17.117.37
REMOTE_HOST: 1.17.117.37
REMOTE_USER:
REQUEST_METHOD: GET
SCRIPT_NAME: /pruebas_dw/variables_server.asp
SERVER_NAME: entertainment
SERVER_PORT: 80
SERVER_PORT_SECURE: 0
SERVER_PROTOCOL: HTTP/1.1
SERVER_SOFTWARE: Microsoft-IIS/6.0
URL: /pruebas_dw/variables_server.asp
HTTP_CACHE_CONTROL: max-age=0
HTTP_CONNECTION: keep-alive
HTTP_KEEP_ALIVE: 300
HTTP_ACCEPT: text/xml,application/xml,application/xhtml+xml,text/html; q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7
HTTP_ACCEPT_ENCODING: gzip,deflate
HTTP_ACCEPT_LANGUAGE: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
HTTP_COOKIE: ASPSESSIONIDASTATCRD=GAJDKNCANGABJAPEOGBONGFN; ASPSESSIONIDAQSBSCRD=LAJDPPEADNEMHDBKOCLAIMAD
HTTP_HOST: entertainment
HTTP_USER_AGENT: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9
Nota: Mudei algum dado sensível desta lista de variável, como a IP do visitante ou a do servidor, ou a rota física dos arquivos. Porém, é perfeito para se ter uma idéia dos conteúdos que oferece o array request.servervariables.


 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
GeoLite Country para ASP. Conhecer o país de um IP



Versão gratuita de GeoIP Country para averiguar o país de procedência dos visitantes de nossa web.

Por Miguel Angel Alvarez - Tradução de JML





Vamos falar de GeoLite Country, um produto gratuito que nos serve para conhecer o país de procedência de nossos visitantes, que se deduz a partir de seu endereço IP. Cada endereço IP corresponde a um provedor de acesso a Internet, localizado em um país. Cada provedor tem atribuído uma categoria de endereços IP para realizar suas atividades. Estes produtos têm um banco de dados com essas categorias de endereços IP que se correspondem a cada provedor e país.

Este software pode ser baixado gratuitamente, porém não é tão preciso como GeoIP Country, a versão avançada paga, também desenvolvida por MaxMind. Como GeoLite Country é gratuito, se oferece sem suporte técnico e as atualizações do banco de dados são menos freqüentes que a versão paga. Trataremos neste artigo concretamente a versão gratuita para instala-la em um servidor ASP.

Na página de MaxMind pode-se encontrar tanto as versões gratuitas como as pagas de GeoIP. Além disso, têm vários formatos ou módulos, para averiguar países ou cidades e um API que se pode utilizar em páginas web para consultar o banco de dados de IPs.

A versão gratuita de GeoIP está em MaxMind - GeoLite Country | Open Source IP Address to Country Database

O mais simples é utilizar o API que oferecem gratuitamente para fazer localizações de países. O API está no endereço MaxMind - Resources for Developers

Como estamos interessados na instalação do API em um servidor ASP, de todas as linguagens nas quais se oferece o API, nos interessa o "MS COM Object" (Objeto COM de Microsoft), que está no endereço MaxMind - GeoIP MS COM API

Ali veremos um link para download grátis, que nos levará a um diretório onde encontraremos vários arquivos. Nós selecionamos o arquivo GeoIP-COM-1.0.zip. Obviamente, teríamos que obter a versão mais nova disponível. Uma vez baixado, podemos descompactar e veremos que inclui vários arquivos, com tudo que nos faz falta para começar nossa localização de países por IP. Entre o que encontraremos neste arquivo está um arquivo .dll que temos que instalar no servidor e uma série de páginas com exemplos de programação para localizar o país do visitante por seu IP. Há exemplos de programação em ASP, PHP, Cold Fusion, Perl, Python… Também há um txt com instruções para instalar o componente e usa-lo corretamente.

Instalar o componente GeoIP

Para instalar um componente COM no servidor temos que realizar uma série de passos relatados no artigo Componentes do servidor ASP. Embora no txt nos explicam também a tarefa:

Copiar GeoIPDemo.dat en C:\Arquivos de programa\geoip\GeoIPDemo.dat
(Este diretório pode-se muda-lo ao nosso gosto. Logo, na programação ASP, indicaremos o diretório concreto onde tivermos colocado o arquivo)
Copiar GeoIPCOM.dll no diretório "system32". Dependendo de nossa instalação de Windows este diretório pode estar em ou outro site. Por exemplo, em Win XP Pro está em C:\windows\system32
Registrar o componente COM, com as instruções:
C:\> cd windows\system32
C:\windows\system32> regsvr32 GeoIPCOM.dll

De qualquer forma, muitas vezes queremos instalar o componente em um servidor de hospedagem compartilhada, onde teremos que realizar ações distintas. O normal é que no servidor nos indiquem como registrar componentes COM. Certamente, alguns provedores não o permitam, mas o normal é que sim nos deixem instala-los. No caso de não ser assim, teríamos que pensar em mudarmos de servidor de hosting.

Quanto a copiar .dat em C:\Arquivos de programa\geoip\GeoIPDemo.dat, logicamente, em um servidor de hosting normal não vamos poder, porque não vamos ter acesso a esse diretório. Por isso, teremos que subir por FTP o arquivo e hospeda-lo em um diretório onde sim possamos subir arquivos. Como dissemos, posteriormente, no script ASP para localizar o IP, poderemos indicar onde se colocou esse arquivo.

Script ASP de prova do componente

Como dizíamos, no próprio pacote de download temos uma série de exemplos em várias linguagens de programação para provar o sistema de localização de IP de GeoLite. Nós vamos utilizar o arquivo .asp, que modificamos um pouco para adicionar uns comentários e simplifica-lo ao nosso gosto.

O código do exemplo que funcionou perfeitamente em nosso servidor local é o seguinte:

<% Response.Buffer = TRUE %>
<html>
<title>GeoIP Lite Test</title>
<body bgcolor=#CCCCDD>
<h1><center>GeoIP Lite Test</center></h1>
<br><center>
<br>
<form action="GeoIPTest.asp" method="POST">
<table border=0>
<tr><td>hostname:</td><td><input type=text name=hostname></td></tr>
</table>
<input type=submit value="Submit" name=submit>
</form>
<%
if Request.Form("submit") = "Submit" then
'se se recebem dados de formulario

'recebo o nome do host que queremos ver a ip
hostname = Request.Form("hostname")

'crio o objeto geoip
set geoip = Server.CreateObject("GeoIPCOM.GeoIP")
'carrego o arquivo com os dados de ips e países
geoip.loadDataFile("C:\Arquivos de programa\geoip\GeoIPDemo.dat")
'obtengo dados sobre o hostname recebido por formulario
country_code = geoip.country_code_by_name(hostname)
country_name = geoip.country_name_by_name(hostname)

'mostramos os dados deste host
Response.Write("<table cellpadding=2 border=1><tr><th colspan=2>Results</th></tr>")
Response.Write("<tr><td>Hostname</td><td>" + hostname + "</td></tr>")
Response.Write("<tr><td>ISO 3166 Country Code</td><td>" + country_code + "</td></tr>")
Response.Write("<tr><td>Full Country Name</td><td>" + country_name + "</td></tr>")
Response.Write("</table>")

end if
%>
</center>
</body>
</html>
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Um Sistema de postais Virtuais em ASP I



Muitos de vocês me pediram um artigo sobre o desenvolvimento de uma aplicação de envio de postais, pois aqui está.

Por Pedro Rufo Martin




O código que vou mostrar é o mesmo que o usado no sistema de postais de ASPTutor, portanto para que você tenha uma idéia do funcionamento geral antes de se confundir com o código, lhe recomendo que passe por esta página.

O ActiveX que vamos usar para enviar o postal é ASPemail de Persit, entre outras coisas porque pouco a pouco se converteu em um padrão e além disso, nos permite enviar correio com formato HTML. Você tem todos os procedimentos de configuração e uso de ASPEmail em ASPTutor.com Tutorial de ASPEmail

Nossa aplicação vai custar de uma estrutura de diretórios para armazenar as imagens, um banco de dados e três módulos asp.

Vamos começar descrevendo a estrutura de diretórios que vamos criar.
Situaremos nossa aplicação de e-postais e um diretório que denominaremos "postais" (aqui situaremos nossos módulos .asp) que por sua vez criaremos ou sub-diretório de "postais" chamado "images" para situar as imagens que enviaremos em nossas postais. Debaixo de "images" criaremos o diretório "miniaturas" destinado a conter cópias reduzidas de todas nossas imagens a fim de agilizar o carregamento quando mostremos os catálogos de imagens.

Nossa estrutura final deveria ficar assim:


postales-asp-1.gif


Descrição do banco de dados:

postales-asp-2.gif


Como se vê, o banco de dados é muito simples, só contém uma tabela denominada "postais" e três campos

id Campo auto-numérico que nos faz de identificador de cada imagem
url Nome físico da imagem (mariposa.gif, avion.jpg,...)
tema El campo tema nos servirá para agrupar todas as imagens de um mesmo tipo (paisagens, infantil, ...)



Ate aquí é simples, não é? Bom, pois como se vê agora o código tampouco é tão complexo.

Módulos da aplicação

Como dissemos ao princípio, a aplicação consta de 3 módulos:
default.asp Será a página de início de nosso sistema de postais. Cumprirá uma dupla função, nos servirá tanto para escolher o tema do postal (se se entra nele sem parâmetros) como para que o usuário confeccione o postal uma vez escolhido o tema
confirmapostal.asp Neste modulo comprovaremos que o usuário introduziu todos os dados necessários para o envio, e sendo assim, lhe mostraremos uma pré-visualização do postal e lhe daremos a oportunidade de envia-lo ou voltar atrás para corrigi-lo.
enviarpostal.asp Neste módulo chamaremos a ASPEmail e confeccionaremos e enviaremos o postal



 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Messenger através de BD em ASP




Simplesmente é só descomprimir o arquivo sobre um diretório virtual e criar um DSN de Sistema com o ODBC de Access redirigido ao BD Access iframe.mdb com o nome BDIframe.

Por David Cornado




A aplicação quer vir a ser uma reprodução do que é a versão web de Microsoft Messenger. A verdade é que a idéia surgiu para comprovar o funcionamento e comportamento dos iframe em ASP. Veremos que a aplicação em si não é tão engenhosa, pois não estabelece comunicação por sockets, nem abre portos no computador, aproveita o mesmo porto 80 do protocolo http e o que faz é apontar as conversações em um BD, o qual adicionalmente salva os usuários registrados, as relações entre eles, ....

Ao executar a aplicação pede um usuário registrado para poder se executar, se você entrar no BD "iframe.mdb" na tabela [tblUsuario] encontrará vários usuários fictícios e senão, poderá criar, já que se pode registrar um usuário novo, se pode modificar o perfil, mudar as vicissitudes, o apelido....

É uma aplicação para realizar várias provas e dela se podem pegar várias idéias, por exemplo, para usá-la como mini chat de serviço técnico, entre empregados de uma empresa pequena que não queiram abrir contas de messenger, ... e mais não nos serve de exemplo de várias funcionalidades de ASP.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Objeto Datagrid de ASP.NET em ASP



Exemplo do objeto Datagrid de ASP.NET em ASP.

Por David Cornado




Descompactar o arquivo rs.zip sobre um diretório virtual, não requer criar nenhum conector ODBC, sim que requer ter o controlador ODBC de Access instalado no sistema já que o usa para trabalhar com o BD Access.

Se executar a página default.asp lhe explicará o funcionamento deste exemplo. Basicamente tenta ser uma resposta ao objeto Datagrid de ASP.NET em ASP, página elementos de uma tabela em ASP, pode-se mudar o número de listagens por página, pode-se ordenar ASC e DESC os campos, têm paginação entre páginas, pode-se realizar buscas, ...

Ademais destas funcionalidades a potência que tem o exemplo é que está realizado cumprindo com a normativa XHTML Strict e CSS2, para aqueles que estejam buscando exemplos de como usar estas técnicas com ASP.

Outro dos fortes deste exemplo, explica na ajuda que realizei, é que é completamente modular, portanto serve para mostrar os resultados de qualquer tabela que se preste, simplesmente modificando os parâmetros adequados da aplicação: tabela, nome dos campos, ... e o resto realiza o código.

Este exemplo foi realizado em 2004 pelo qual pode parecer algo ultrapassado atualmente, mas até então se começava a ouvir o que era XHTML e CSS2.
 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Percorrer campos de formulário complexos em ASP




Explicamos como percorrer campos de formulário nos que recebemos mais de um valor por campo.

Por Carlos Cuenca Díaz





Não deveria significar um problema percorrer os campos de formulário correntes, como campos de texto, botões de radio, textareas, etc, onde só se envia um dado vinculado a tal campo. Faz-se com o método form do objeto request, indicando entre parênteses o nome do campo que queremos percorrer.

minha_variavel = request.from("nome_campo")

Para àqueles em que isso parecer novo, podemos encontrar no Manual de ASP um capítulo onde se detalha o processo de percorrer dados do formulário. Nós neste artigo vamos tratar de explicar um método para percorrer dados um pouco mais complexos, onde podem nos enviar vários valores dentro de um mesmo campo de formulário. Teoricamente, vamos tratar de extrair os dados de um campo de formulário "Select multiple" que se consegue com as seguintes etiquetas HTML:

<select name="time" multiple>
<option value="Madrid">Madrid
<option value="Barcelona">Barcelona
<option value="Valencia">Valencia
<option value="Bilbao">Bilbao
<option value="Sevilla">Sevilla
<option value="ATMadrid">At. Madrid
<option value="Cadiz">Cadiz
<option value="Dep. Coruña">Dep. Coruña
<option value="Santander">Santander
</select>

Colocamos um select normal que tem o atributo múltiplo, que vemos que não se iguala a nada, simplesmente se coloca se quisermos que o usuário possa selecionar várias opções. Para isso, deveria selecionar uma das opções e com a tecla de Control (Ctrl) ou maiúsculas (A setinha para cima) selecionar outra opção. Se se utiliza a tecla de Control se selecionam as duas opções, a que havia e a nova. I se utiliza maiúsculas se selecionariam todas as opções entre a primeira e a última. Podemos praticar a selecionar várias opções, para quem o deseje, com o campo de abaixo


Como chegam os dados

Quando recebemos este campo de formulário nos chegam todos os valores que um usuário tiver selecionado, separados por vírgulas. Assim, um valor possível que se pode receber pelo formulário seria o seguinte:

Madrid, Barcelona, Valencia, ATMadrid, Dep. Coruña

Este valor o obteremos utilizando o objeto request de ASP, tal como comentávamos antes. Para acessar a esse dado escreveríamos.

request.form("time")

O método request.form nesse caso devolve, como indicávamos, todos os times selecionados separados por vírgulas. De maneira adicional, podemos tratar o valor devolvido como uma coleção, que é uma estrutura de dados especial, parecida aos arrays, que se percorrem facilmente com um loop FOR EACH.
Referência: Temos um workshop de ASP no qual fazemos um par exemplos do loop FOR EACH para percorer arrays e coleções.


Em algum caso pode nos interessar inverter a informação dessa coleção a um array para tratar logo dos times em outros processos. Como prática também pode ser útil ver como se faria e de passo, conhecemos um pouco melhor o loop FOR EACH.

Construir o array

Nosso exercício requer um array que tenha um número indeterminado de campos, que depende do número de valores que recebamos desde o campo <select> do formulário. Se quisermos fazer isto bem vamos necessitar um array dinâmico, ao que iremos atribuindo posições segundo o necessitemos. No Manual de Visual Basic Script podemos encontrar a explicação sobre como tratar arrays dinâmicos.

dim times()
redim times(0)

Assim criamos o array e lhe indicamos que vamos utilizar como índice máximo o zero, que corresponde com um campo, times(0).

Script para colocar os dados em um array

Vamos fazer um script que se encarregue de preencher o array com todos os valores do campo. Tal script percorre a lista de valores que chegam do formulário e os introduz no array, ao mesmo tempo em que vai aumentando em um campo o espaço do array antes de adicionar um novo elemento.

Dim times(), I
I = 0
For Each Valor In Request.Form("time")
Redim Preserve times(I)
times(I) = Valor
I = I + 1
Next

Começamos o script declarando o array (sem definir seus campos, para poder redimensiona-lo dinamicamente) e uma variável para levar a conta dos valores introduzidos, que iniciamos a zero na seguinte linha.

O loop FOR EACH percorre cada uma das posições da coleção Request.Form("time") e em cada iteração introduz em uma variável, neste caso chamada Valor, o conteúdo da posição atual. Uma vez dentro do loop se redimensiona o array preservando seu conteúdo prévio (redim preserve) para que contenha as posições necessárias para armazenar os valores que vamos extraindo da coleção. Dito de outra forma, em cada iteração criamos uma nova posição (salvando todas as posições anteriores) e introduzimos na posição criada o conteúdo da variável. Valor, que salvava a posição atual da coleção. Por último, incrementamos em um o número de posições que deve conter o array, para utilizá-lo se voltamos a passar pelo loop.
Nota: Podíamos ter criado um array utilizando a função split, incorporada em VBScript. Tal função recebe uma cadeia e um separador e devolve um array onde em cada campo se introduziu uma sub-cadeia criada ao romper por cada separador.

De modo que, a partir do request.form("time") (que é também uma cadeia onde cada valor aparece separado por uma vírgula), aplicando a função Split e indicando que o separador é o caractere vírgula (,), obteremos o array desejado.

times = Split(request.form("time"),",")

Este método é muito rápido e simples, mas poderia falhar se um dos valres do select contiver uma vírgula.


Espero que com tudo isso, tenhamos podido encontrar sentido ao exercício e seja válido como prática de VBScript e da tecnologia ASP.



 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Percorrer valor do campo auto-numérico depois de inserir em ASP




Ao fazer uma inserção de um registro em uma tabela, se o identificador for auto-numérico, geralmente não sabemos qual terá sido. Aqui ensinamos a obter o identificador depois da inserção.

Por Carlos Cuenca Díaz





Quando em um banco de dados temos duas tabelas relacionadas com uma relação um a vários, a chave primária da tabela com cardinalidade 1 se encontra na tabela com cardinalidade n como chave forasteira. Normalmente as chaves primárias costumam utilizar campos de tipo auto-incremento.

O presente artigo detalha como averiguar o valor que se atribui à chave primária em uma operação de inserção, para desta maneira poder introduzir registros na tabela relacionada que conta com a chave forasteira.

Para o exemplo, utilizaremos as seguintes tabelas:



tablas_recoger_id.gif



À princípio vamos supor que temos um novo pedido para o qual temos que adicionar vários detalhes. Neste suposto, necessitamos inserir primeiro o pedido, recolher o valor que o banco de dados lhe atribuiu ao campo IdPedido, e a seguir inserir os diferentes detalhes com esse valor de IdPedido.

Para fazer isto, vamos utilizar um objeto recordset:

Dim rspedidos
Set rspedidos=Server.CreateObject("ADODB.Recordset")

A seguir abrimos o Recordset:

With rspedidos
.open "Pedidos" ,adOpenDynamic, AdLockOptimistic,adCmdTableDirect

adOpenDynamic: Cursor que não tem um conjunto único de registros, e no que as mudanças serão visíveis no recordset.
AdLockOptimistic: O registro não se bloqueia até que não se inseriram os dados
adCmdTableDirect: serve para indicar o nome da tabela

A combinação de cursor, tipo de bloqueio e se o campo estiver indexado ou não faz com que possamos percorrer o campo ID, outras combinações podem não funcionar.

A seguir, criamos um novo registro, e inserimos nos valores dos campos:

.AddNew
.Fields("idcliente")=16
.Fields("cargo")=500
.Fields("destinatario")="pepe"

Uma vez introduzidos todos os valores dos campos, se atualiza o recordset.

.update

E a seguir, tiramos o ID que o banco de dados lhe atribuiu:

MiID= .Fields("IdPedido")
End With

Agora contamos com uma variável meuID que nos permite fazer os inserts correspondentes no banco de dados, assim como recordsets ou com sentenças sql do tipo Insert Into.
Nota: Vimos como inserir registros em ASP, porém até agora sempre havíamos explicado outro método, consistente em construir a sentença SQL para a inserção e ejecutando-a por meio do método execute() do objeto connection. Podemos ver esse tipo de inserções no artigo Creação de um novo registro


Código completo:

Dim rspedidos
Set rspedidos=Server.CreateObject("ADODB.Recordset")
With rspedidos
.open "Pedidos" ,adOpenDynamic, AdLockOptimistic,adCmdTableDirect
.AddNew
.Fields("idcliente")=16
.Fields("cargo")=500
.Fields("destinatario")="pepe"
.update
MiID= .Fields("IdPedido")
End With
Nota: Pode ser que nosso sistema não tenha declaradas as variáveis do sistema do tipo adOpenDynamic, AdLockOptimistic ou adCmdTableDirect. Para que fiquem definidas devemos incluir o arquivo "adovbs.inc".







 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
O Objeto Browser Capabilities




Para criar um objeto Browser Capabilities a sintaxe é a mesma que para qualquer outro componente ActiveX.

Por Pedro Rufo Martin



<%Set cliente=
Server.CreateObject("MSWC.BrowserType")%>





Propriedades


Descrição----------- Propriedade
Suporte de ActiveX----------- ActiveXcontrols
Musiquinha de fundo----------- Backgroundsounds
Nome do Navegador------------- Browser
Suporte de Cookies------------ Cookies
Suporte de Frames-------------- Frames
Suporte de JScript---------------- JScript
Plataforma de execução---------------- Platform
Suporte de tablas------------------- Tables
Suporte de VBScript-------------------- VBScript
Versão do Navegador-----------------------Version


Exemplo de código mostrando todas as propriedades

browsercapabilities.asp

<html>
<head>
<title>Browser Capabilities</title>
</head>
<body>
<%
'instanciamos o objeto
Set cliente=Server.CreateObject("MSWC.BrowserType")
%>

<table border>
<tr>
<td>Suporte de ActiveX</td><td><%=cliente.ActiveXControls%></td></tr>
<tr>
<td>Musiquinha de fondo</td><td><%=cliente.Backgroundsounds%></td>
</tr>
<tr>
<td>Nome do Navegador</td><td><%=cliente.Browser%></td>
</tr>
<tr>
<td>Suporte de Cookies</td><td><%=cliente.Cookies%></td>
</tr>
<tr>
<td>Suporte de Frames</td><td><%=cliente.Frames%></td>
</tr>
<tr>
<td>Suporte de JavaScript</td><td><%=cliente.JavaScript%></td>
</tr>
<tr>
<td>Plataforma de execução</td><td><%=cliente.Platform%></td>
</tr>
<tr>
<td>Suporte de tabelas</td><td><%=cliente.Tables%></td>
</tr>
<tr>
<td>Suporte de VBScript</td><td><%=cliente.Vbscript%></td>
</tr>
<tr>
<td>Versão do navegador</td><td><%=cliente.Version%></td>
</tr>
</table>
</body>
</html>

Com o que obteríamos o seguinte resultado:
Suporte de ActiveX True
Musiquinha de fundo True
Nome do Navegador IE
Suporte de Cookies True
Suporte de Frames True
Suporte de JavaScript True
Plataforma de execução WinNT
Suporte de tabelas True
Suporte de VBScript True
Versão do navegador 5.0


 

helldanger1

GForum VIP
Entrou
Ago 1, 2007
Mensagens
29,631
Gostos Recebidos
1
Buscador simples em ASP melhorado



Artigo que comenta como implementar uma série de melhorias no buscador simples para ASP para que aceite critérios de busca com palavras independentes e operadores para relacioná-las.

Por Miguel Angel Alvarez - Tradução de JML





O buscador que se explica no manual Buscador Simples para ASP se pode melhorar, como creio que já comentamos, utilizando o script do artigo Crie seu próprio buscador, que implementava um sistema para que o sistema de busca utilizasse várias palavras-chave e alguns operadores para relacioná-las, como o operador + ou o operador espaço, que querem dizer que há que se relacionar as diferentes palavras-chave com a função lógica AND e OR respectivamente.

O objetivo deste artigo é realizar essa integração de um sistema com o outro e a publicação do script resultante, comentado na medida do possível. O primeiro seria ter claros as duas fontes de informação com as que estamos trabalhando, para o que aconselhamos necessariamente sua leitura compreensiva.
Buscador simples em ASP
Crie seu próprio buscador
Unimos os dois scripts

A página do buscador simples que temos que editar se chama buscar.asp. Para começar, vamos colocar as funções que estão no exercício Crie seu próprio buscador em qualquer parte de buscar.asp, embora preferivelmente na parte de cima. Estas funções, se por acaso alguém não as identifica, são:

function Tirar(cadeia,campos)
Extrai cada um dos campos do critério de busca introduzido e vai relacionando-os segundo os operadores que se utilizaram. Tudo isto se vai colocando em uma sentença em linguagem SQL.

function GeraSql(cadeia,tabela,campos)
Cria a sentencia SQL definitiva.

As descrições completas destas funções e a explicação de suas ações está, mais ou menos realizada no artigo Crie seu próprio buscador.

Editamos o script de buscar.asp para construir uma sentença SQL melhorada

A linha onde antes se construía a sentença SQL (variavel Temp.) a comentamos e a voltamos a fazer de outra maneira.

Primeiro, devemos criar um array com os campos da tabela onde vamos realizar as buscas. O array deve ter uma posição mais das necessárias, porque senão nos falhará o exemplo. Vamos buscar nos campos "Des" e "pal" da tabela, que contém as descrições e palavras-chave de cada um dos registros.

dim campos(3) 'o tamanho do array deve superar em um ao numero de campos
campos(1)="Des"
campos(2)="pal"

Logo extraímos a cadeia de busca do formulário que estamos recebendo
cadeia=Request.form("palavra")

Criamos uma variável com o nome da tabela do banco de dados onde há que buscar.

tabela_bd="Tabela1"

Finalmente, criamos a sentença SQL realizando uma chamada à função GeraSql comentada antes. Salvamos a sentença SQL na variável Temp, que era a variável onde antes tinha salvo a sentença do script buscar.asp original.

Temp=GeraSql(cadeia,tabla_bd,campos)
Nota: Decidi não mudar os nomes das variável para que o exemplo de buscar.asp continuasse funcionando sem problemas.


Já está pronto

Com as mudanças indicadas até agora já temos o exercício terminado. Agora as buscas serão muito mais complexas porque as sentenças SQL é muito mais avançada. As possibilidades deste script se multiplicaram.

O resto do código se deixa como estava. Ao executar a sentença SQL salva na mesma variável Temp, porém que agora está mais avançada se produz um recordset cujo percorrido se realiza da mesma maneira que antes.

Deixei a sentença SQL à vista, imprimido-a na página, para que qualquer pessoa que executar o script possa ver que sentença se está gerando.
 
Topo