<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MXStudio &#187; ASP.net</title>
	<atom:link href="http://www.mxstudio.com.br/categoria/aspnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mxstudio.com.br</link>
	<description>Macromedia e Adobe - Artigos, colunas, tutorias e muito mais...</description>
	<lastBuildDate>Sun, 29 Jan 2012 11:31:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>ASP &#8211; Banner rotativo com AJAX</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/aspnet/asp-banner-rotativo-com-ajax/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/aspnet/asp-banner-rotativo-com-ajax/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 23:10:55 +0000</pubDate>
		<dc:creator>X@nBuRzUm</dc:creator>
				<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[asp]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=10851</guid>
		<description><![CDATA[Neste artigo iremos fazer um banner rotativo em precisar recarregar a página, para isso iremos usa AJAX, ou seja (acrônimo em língua inglesa de Asynchronous Javascript and XML, em português &#8220;Javascript e XML Assíncronos&#8221;) é o uso metodológico de tecnologias como Javascript e XML, providas por navegadores, para tornar páginas Web mais interativas com o [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mxstudio.com.br/wp-content/uploads/2012/01/banneraspajax.jpg"><img class="size-full wp-image-19068 alignleft" style="margin-left: 10px; margin-right: 10px; margin-top: 5px; margin-bottom: 5px;" title="banneraspajax" src="http://www.mxstudio.com.br/wp-content/uploads/2012/01/banneraspajax.jpg" alt="" width="260" height="260" /></a></p>
<p>Neste artigo iremos fazer um banner rotativo em precisar recarregar a  página, para isso iremos usa AJAX, ou seja (acrônimo em língua inglesa  de Asynchronous Javascript and XML, em português &#8220;Javascript e XML  Assíncronos&#8221;) é o uso metodológico de tecnologias como Javascript e XML,  providas por navegadores, para tornar páginas Web mais interativas com o  usuário, utilizando-se de solicitações assíncronas de informações. Foi  inicialmente desenvolvida pelo estudioso Jessé James Garret e mais tarde  por diversas associações, não é um novo modelo para desenvolvimento  web. Os navegadores implementam essa tecnologia desde o ano 2000(no  mínimo). Porém sua popularização nos últimos anos tem também trazido  consigo muitas outras melhorias para a Web. Tem estimulado a construção  de aplicações Web mais dinâmicas e criativas. AJAX não é uma tecnologia,  mas um conjunto de tecnologias conhecidas trabalhando juntas, cada uma  fazendo sua parte, oferecendo novas funcionalidades. AJAX incorpora em  seu modelo:<br />
•    Exposição e interação dinâmica usando o DOM;<br />
•    Intercâmbio e manipulação de dados usando XML e XSLT;<br />
•    Recuperação assíncrona de dados usando o objeto XMLHttpRequest e XMLHttpResponse;<br />
•    JavaScript fazendo a junção entre os elementos.<br />
O modelo clássico de aplicação web trabalha assim: a maioria das ações do usuário na interface dispara uma solicitação HTTP para o servidor web. O servidor processa algo, recuperando dados, realizando cálculos, conversando com vários sistemas legados, e então retorna uma página HTML para o cliente. É um modelo adaptado do uso original da Web como um agente de hipertexto, porém o que faz a web boa para hipertexto não necessariamente a faz boa para aplicações de software.<br />
Com a popularização de sistemas que funcionam inteiramente na Web e também com o aumento da velocidade das conexões banda larga, o problema da espera pelo envio e retorno da página inteira se tornou muito mais evidente para o usuário. Obviamente, se nós estivéssemos projetando a Web a partir do zero para aplicações, não faríamos com que os usuários esperassem em vão. Uma vez que a interface está carregada, por que a interação do usuário deveria parar a cada vez que a aplicação precisasse de algo do servidor? Na realidade, por que o usuário deveria ver a aplicação ir ao servidor toda vez?<br />
As principais vantagens das aplicações que utilizam AJAX para determinadas requisições é que os dados trafegados pela rede são reduzidos e o usuário não precisa aguardar a página ser recarregada a cada interação com o servidor.<br />
A popularização das tecnologias que o AJAX reúne foi muito importante para a criação do conceito Web 2.0, que até hoje gera grandes divisões entre os maiores pensadores da Web.<br />
Apesar de não possuir nada inovador em sua essência, o uso de AJAX revolucionou a Web inteira, trazendo à tona muitos conceitos importantes para o desenvolvimento web.<br />
Com um pouco de imaginação, pode ser útil para escrever uma grande variedade de aplicações úteis para a administração diária de um site</p>
<p>Neste artigo vamos olhar para a exibição de um circuito temporizador de rotação de banner, usando ASP como línguas scripting laterais do usuário para acessar o banner AJAX.</p>
<p>Em essência, vamos mostrar um banner na tela, e depois de 10 segundos, ele irá mostrar o outro, sem a necessidade de atualizar a página e acessar um banco de dados gerenciado lado do servidor!</p>
<p><strong>O script ASP</strong></p>
<p>Focamos a nossa atenção sobre a interação entre AJAX e ASP / PHP, em vez de gastar tempo inútil para acessar um banco de dados real (Access ou MySQL), que certamente não para baixo.</p>
<p>Então vamos ver um script simples ASP que contém uma série de banners e exibe na tela uma ao acaso:</p>
<p><em>&lt;%@LANGUAGE = JScript%&gt;</em><br />
<em>&lt;%</em><br />
<em> Response.Buffer = true;</em><br />
<em> Response.Expires = 0;</em></p>
<p><em> var imagem = new Array();</em><br />
<em> var conexao = new Array();</em><br />
<em> var acaso;</em></p>
<p><em> imagem[0] = &#8220;mxstudio.gif&#8221;;</em><br />
<em> conexao[0] = &#8220;http://www.mxstudio.com.br/&#8221;;</em></p>
<p><em> imagem[1] = &#8220;forum.gif&#8221;;</em><br />
<em> conexao[1] = &#8221; http://www.mxstudio.com.br/forum/&#8221;;</em></p>
<p><em> imagem[2] = &#8220;tools.gif&#8221;;</em><br />
<em> conexao[2] = &#8221; http://www.mxstudio.com.br/&#8221;;</em></p>
<p><em> var acaso = Math.floor(Math.random() * imagem.length);</em><br />
<em>%&gt;</em><br />
<em>&lt;a href=&#8221;&lt;%=conexao[acaso]%&gt;&#8221;&gt;&lt;img src=&#8221;&lt;%=imagem[acaso]%&gt;&#8221; border=&#8221;0&#8243;&gt;&lt;/a&gt;</em></p>
<p>Salve o arquivo como banner.asp.</p>
<p><strong>O script AJAX</strong></p>
<p>Vejamos agora o roteiro de AJAX JavaScript que chama o arquivo via XMLHTTP ASP para exibir o banner.</p>
<p>Começamos com a parte do código principal:</p>
<p><em>var XMLHTTP;</em></p>
<p><em>function Pedido()</em><br />
<em>{</em><br />
<em> XMLHTTP = RicavaBrowser(CambioStato);</em><br />
<em> XMLHTTP.open(&#8220;GET&#8221;, &#8220;banner.ext&#8221;, true);</em><br />
<em> XMLHTTP.send(null);</em><br />
<em>}</em></p>
<p>Para completar, vemos o resto do código com as funções de JavaScript em apoio do pedido AJAX:</p>
<p><em>function CambioStato()</em><br />
<em>{</em><br />
<em> if (XMLHTTP.readyState == 4)</em><br />
<em> {</em><br />
<em> var R = document.getElementById(&#8220;resultado&#8221;);</em><br />
<em> R.innerHTML = XMLHTTP.responseText;</em><br />
<em> }</em><br />
<em>}</em></p>
<p><em>function RicavaBrowser(QualBrowser)</em><br />
<em>{</em><br />
<em> if (navigator.userAgent.indexOf(&#8220;MSIE&#8221;) != (-1))</em><br />
<em> {</em><br />
<em> var Classe = &#8220;Msxml2.XMLHTTP&#8221;;</em><br />
<em> if (navigator.appVersion.indexOf(&#8220;MSIE 5.5&#8243;) != (-1));</em><br />
<em> {</em><br />
<em> Classe = &#8220;Microsoft.XMLHTTP&#8221;;</em><br />
<em> } </em><br />
<em> try</em><br />
<em> {</em><br />
<em> OggettoXMLHTTP = new ActiveXObject(Classe);</em><br />
<em> OggettoXMLHTTP.onreadystatechange = QualBrowser;</em><br />
<em> return OggettoXMLHTTP;</em><br />
<em> }</em><br />
<em> catch(e)</em><br />
<em> {</em><br />
<em> alert(&#8220;Error: o ActiveX não foi executado!&#8221;);</em><br />
<em> }</em><br />
<em> }</em><br />
<em> else if (navigator.userAgent.indexOf(&#8220;Mozilla&#8221;) != (-1))</em><br />
<em> {</em><br />
<em> OggettoXMLHTTP = new XMLHttpRequest();</em><br />
<em> OggettoXMLHTTP.onload = QualBrowser;</em><br />
<em> OggettoXMLHTTP.onerror = QualBrowser;</em><br />
<em> return OggettoXMLHTTP;</em><br />
<em> }</em><br />
<em> else</em><br />
<em> {</em><br />
<em> alert(&#8220;O exemplo não funciona com outros navegadores!&#8221;);</em><br />
<em> }</em><br />
<em>}</em></p>
<p>Salve todo o código Javascript como banner.js.</p>
<p><strong>código HTML </strong></p>
<p>Nós apenas temos que ver o banner na tela de qualquer arquivo HTML (ASP) do nosso site.</p>
<p>Primeiro incluir o arquivo JavaScript:</p>
<p><em>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;banner.js&#8221;&gt;&lt;/script&gt;</em><br />
Então, chamamos a função AJAX no carregamento da página e, em seguida, com um temporizador a cada 10 segundos:</p>
<p><em>&lt;script type=&#8221;text/javascript&#8221;&gt;</em><br />
<em>window.onload = function()</em><br />
<em>{</em><br />
<em> Pedido();</em><br />
<em>}</em><br />
<em>function RecarregarBanner()</em><br />
<em>{</em><br />
<em> Pedido();</em><br />
<em>}</em><br />
<em>window.setInterval(&#8220;RecarregarBanner()&#8221;, 10000); // 10 secondi</em><br />
<em>&lt;/script&gt;</em></p>
<p>Exibimos o banner na tela criando uma camada de texto com uma identificação específica, útil para acesso via AJAX:</p>
<p><em>&lt;div id=&#8221;resultado&#8221;&gt;&lt;/div&gt;</em></p>
<p>Para testar o exemplo, eu sugiro para diminuir o tempo de espera, reduzindo de 10 segundos para 3 segundos:</p>
<p><em>window.setInterval(&#8220;RecarregarBanner()&#8221;, 3000); // 3 segundos</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/aspnet/asp-banner-rotativo-com-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Controle TreeView</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/controle-treeview/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/controle-treeview/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 00:50:30 +0000</pubDate>
		<dc:creator>X@nBuRzUm</dc:creator>
				<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dreamweaver]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[TreeView]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=8221</guid>
		<description><![CDATA[Um controle TreeView é extremamente simples fazer em ASP. Este código mostra como criar uma classe simples treeview usando ASP e estilo em cascata. Excelente para programadores que desejam aprender como criar simples controles ASP. Vamos começar adicionando o TreeNodes manualmente Para criar um treeview devemos incluir o seu arquivo de classe treeview (clsTreeView.asp) código [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mxstudio.com.br/wp-content/uploads/2012/01/asp.gif"><img class="aligncenter size-full wp-image-8292" src="http://www.mxstudio.com.br/wp-content/uploads/2012/01/asp.gif" alt="" width="140" height="120" /></a>Um controle TreeView é extremamente simples fazer em ASP. Este código  mostra como criar uma classe simples treeview usando ASP e estilo em  cascata. Excelente para programadores que desejam aprender como criar  simples controles ASP. Vamos começar adicionando o TreeNodes manualmente<br />
Para criar um treeview devemos incluir o seu arquivo de classe treeview (clsTreeView.asp) código mostrado abaixo:</p>
<p><em>&lt;!&#8211;#include file=&#8221;clsTreeView.asp&#8221;&#8211;&gt;</em><br />
<em>&lt;%</em><br />
<em> &#8216;declarar seu objeto treeview</em><br />
<em> Dim objTV </em></p>
<p><em> &#8216;criar uma instância de seu treeview</em><br />
<em> Set objTV = New TreeView </em></p>
<p><em> &#8216;adicionar 2 nós para o seu treeview</em><br />
<em> objTV.AddNode(&#8220;Node1&#8243;) </em><br />
<em> objTV.AddNode(&#8220;Node2&#8243;) </em></p>
<p><em> &#8216;adicionar 2 folhas ao seu primeiro nó </em><br />
<em> objTV.Nodes(0).Add(objTV.CreateNode(&#8220;Node 1:1&#8243;,&#8221;page1.htm&#8221;,&#8221;Tool                  tip text&#8221;)) </em><br />
<em> objTV.Nodes(0).Add(objTV.CreateNode(&#8220;Node 1:2&#8243;,&#8221;page2.htm&#8221;,&#8221;Tool                  tip text&#8221;)) </em></p>
<p><em> &#8216;adicionar um nó childNode para o seu segundo nó</em><br />
<em> objTV.Nodes(1).Add(objTV.CreateSimpleNode(&#8220;Node 2:1&#8243;)) </em></p>
<p><em> &#8216;adicionar folhas para o seu primeiro filho segundo nó </em><br />
<em> With objTV.Nodes(1).ChildNodes(0) </em><br />
<em> .Add(objTV.CreateNode(&#8220;Msn Brasil &#8220;,&#8221;http://br.msn.com&#8221;,&#8221;Msn Brasil(2:1:1)&#8221;)) </em><br />
<em> .Add(objTV.CreateNode(&#8220;Burzum &#8220;,&#8221;http://Burzum.com&#8221;,&#8221;Burzum(2:1:2)&#8221;)) </em></p>
<p><em> &#8216;adicionar uma imagem diferente para o link Msn Brasil</em><br />
<em> .ChildNodes(0).ImageUrl=&#8221;http://www.msn.com/favicon.ico&#8221; </em><br />
<em> End With </em></p>
<p><em> &#8216;mostrar o seu treeview</em><br />
<em> objTV.Display </em></p>
<p><em> &#8216;limpa a memória</em><br />
<em> Set objTV = Nothing</em></p>
<p><em> %&gt;</em></p>
<p>Usando Múltiplas TreeViews<br />
Se você quiser usar mais de uma treeview na mesma página, adicione um valor de identificação para cada árvore como segue:</p>
<p><em>&#8216;declarar objetos</em><br />
<em> Dim objTV1, objTV2</em></p>
<p><em> &#8216;</em>criar instâncias de sua treeviews<br />
<em> Set objTV1 = New TreeView</em><br />
<em> Set objTV2 = New TreeView</em></p>
<p><em> &#8216;</em>ID do set treeview<br />
<em> objTV1.ID = &#8220;TV1&#8243;</em><br />
<em> objTV2.ID = &#8220;TV2&#8243;</em></p>
<p><strong>Carregamento de um banco de dados</strong><br />
Se você quiser carregar o treeview de uma tabela de banco de dados,  verifique se você tem uma tabela em seu banco de dados com a seguinte  estrutura:</p>
<p><img src="http://sintchospir.com.br/dbfields.gif" alt="" /> <img src="http://sintchospir.com.br/dbstructure.gif" alt="" /></p>
<p>Onde  o campo ParentID é o primeiro ancestral do nó de árvore.O ParentID de  zero indica um nó raiz na árvore. Os campos URL e ToolTip pode ser  deixado vazio para nós não-folha. Você pode então carregar o treeview,  chamando o método LoadFromDB da seguinte forma:</p>
<p><em>TreeView.LoadFromDB (Connection String, Nome da tabela Menu)</em></p>
<p>O código de exemplo abaixo mostra como carregar o treeview de uma tabela de banco de dados chamado de menu:</p>
<p><em>&lt;!&#8211;#include file=&#8221;clsTreeView.asp&#8221;&#8211;&gt;</em><br />
<em>&lt;%</em></p>
<p><em> &#8216;declare objetos</em><br />
<em> Dim objTV, strConn</em></p>
<p><em> &#8216;definir a sua seqüência de conexão</em><br />
<em> strConn = &#8220;DRIVER={Microsoft Access Driver (*.mdb)};&#8221; _</em><br />
<em> &amp; &#8220;DBQ=&#8221; &amp; Server.MapPath(&#8220;site.mdb&#8221;)</em></p>
<p><em> &#8216;criar instâncias de seu treeview</em><br />
<em> Set objTV = New TreeView</em></p>
<p><em> &#8216;carregar a treeview da tabela de banco &#8216;Menu&#8217;</em><br />
<em> Call objTV.LoadFromDB(strConn,&#8221;Menu&#8221;)</em></p>
<p><em> &#8216;exibie o treeview </em><br />
<em> objTV.Display </em></p>
<p><em> &#8216;limpar a memória </em><br />
<em> Set objTV = Nothing</em></p>
<p><em> %&gt;</em></p>
<p>Você sempre pode modificar o banco de  dados e da Classe TreeView (arquivo clsTreeView.asp) para atender às  suas necessidades como a adição de um campo ImageURL ou mesmo otimizar o  procedimento LoadFromDB.</p>
<p><strong>Exibindo um diretório windows / pasta</strong></p>
<p>Se você quiser exibir o conteúdo de uma pasta como o Windows Explorer,  tudo que você tem a fazer é chamar o DisplayFolderContents com o caminho  da pasta como mostrado abaixo:</p>
<p><em>&lt;!&#8211;#include file=&#8221;clsTreeView.asp&#8221;&#8211;&gt;</em><br />
<em> &lt;%</em></p>
<p><em> &#8216;declarar os objetos</em><br />
<em> Dim objTV</em></p>
<p><em> &#8216;criar uma instância de seu treeview</em><br />
<em> Set objTV = New TreeView</em><br />
<em> Call objTV.DisplayFolderContents(&#8220;C:\InetPub\wwwroot&#8221;)</em></p>
<p><em> &#8216;limpar memória</em><br />
<em> Set objTV = Nothing</em></p>
<p><em> %&gt;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/controle-treeview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP &#8211; Calendário de eventos</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/asp-calendario-de-eventos/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/asp-calendario-de-eventos/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 23:05:03 +0000</pubDate>
		<dc:creator>X@nBuRzUm</dc:creator>
				<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[Dreamweaver]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Usabilidade]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=7873</guid>
		<description><![CDATA[Um aplicativo de calendário grande, com eventos atuais que foram adicionados e editados por utilizadores registados. Vamos começar por obter o seu código e nomear a página, calendar.asp. Nós estamos simplesmente usando seu código como um ponto genérico de partida. Você  , precisa de um lugar para armazenar os seus eventos. Eu criei um banco [...]]]></description>
			<content:encoded><![CDATA[<p>Um aplicativo de calendário grande, com eventos atuais que foram adicionados e editados por utilizadores registados. Vamos começar por obter o seu código e nomear a página, calendar.asp. Nós estamos simplesmente usando seu código como um ponto genérico de partida.<br />
Você  , precisa de um lugar para armazenar os seus eventos. Eu criei um banco de dados de acesso chamado &#8220;usuários&#8221;. Eu, então, criou uma tabela dentro desse banco de dados chamado &#8221; users &#8220;. A tabela calendar tem os seguintes campos:</p>
<div>
<table border="1" cellspacing="1" cellpadding="0">
<tbody>
<tr>
<td colspan="2"><strong>Calendar</strong></td>
</tr>
<tr>
<td>ID</td>
<td>Auto Number (Primary Key)</td>
</tr>
<tr>
<td>Subject</td>
<td>Texto</td>
</tr>
<tr>
<td>Message</td>
<td>Memo</td>
</tr>
<tr>
<td>Day</td>
<td>Numero</td>
</tr>
<tr>
<td>Month</td>
<td>Numero</td>
</tr>
<tr>
<td>Year</td>
<td>Numero</td>
</tr>
<tr>
<td>AddedBy</td>
<td>Texto</td>
</tr>
<tr>
<td>DateAdded</td>
<td>Data</td>
</tr>
</tbody>
</table>
</div>
<p>Todos os registros são bastante auto-explicativo com exceção do campo ID. Vamos usá-lo para apresentar o evento desejado.<br />
Uma vez que o banco de dados é feita, você precisa para criar suas páginas ASP. Neste exemplo, vamos usar quatro páginas; calendar.asp, display_event.asp, add_event.asp e edit_event.asp. Você poderia provavelmente começar afastado com apenas duas páginas, mas para a facilidade de uso, vamos criar quatro.<br />
Vamos começar com a página calendar.asp.</p>
<p>&lt;&#8211;#include file=&#8221;adovbs.inc&#8221;&#8211;&gt;</p>
<p>Dim DB_CONNECTIONSTRING</p>
<p>Dim objRecordset</p>
<p>DB_CONNECTIONSTRING = &#8220;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=&#8221; &amp; _</p>
<p>Server.Mappath(&#8220;users.mdb&#8221;) &amp; &#8220;;&#8221;</p>
<p>Set objRecordset = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)</p>
<p>objRecordset.Open &#8220;calendar&#8221;, DB_CONNECTIONSTRING, adOpenStatic, adLockPessimistic, adCmdTable</p>
<p>Essa parte do código que escreve os dias do calendário e inserir os assuntos de nosso banco de dados com um link para a página display_event.asp. Isso dará a usuários a clicar em algo para veiw todo o evento.</p>
<p>If Not objRecordset.BOF Then</p>
<p>&#8216;&#8211; Mover para o primeiro registro</p>
<p>objRecordset.MoveFirst</p>
<p>Do Until objRecordset.EOF</p>
<p>If objRecordset.Fields(&#8220;Year&#8221;) = Year(dDate) Then</p>
<p>If objRecordset.Fields(&#8220;Month&#8221;) = Month(dDate) Then</p>
<p>If objRecordset.Fields(&#8220;Day&#8221;) = iCurrent Then</p>
<p>&#8216;&#8211; Se tudo coincide com o dia atual, em seguida, exibir<br />
&#8216;o sujeito com o ID coresponding &#8211;</p>
<p>Response.Write(&#8220;&lt;br&gt;&lt;font size=2&gt;&lt;a href=&#8221; &amp; _</p>
<p>Chr(34) &amp; &#8220;display_event.asp?ID=&#8221; &amp; _</p>
<p>objRecordset.Fields(&#8220;ID&#8221;) &amp; Chr(34) &amp; &#8220;&gt;&#8221; &amp; _</p>
<p>objRecordset.Fields(&#8220;Subject&#8221;) &amp; _</p>
<p>&#8220;&lt;/a&gt;&lt;/font&gt;&lt;br&gt;&#8221;)</p>
<p>End If</p>
<p>End If</p>
<p>End If</p>
<p>&#8216;&#8211; Se nada corresponde, passar para o próximo registro e<br />
&#8216;começar tudo de novo &#8211;</p>
<p>objRecordset.MoveNext</p>
<p>Loop</p>
<p>End If</p>
<p>Temos agora apresentado o tema do evento correto com o ID de evento anexado na URL como uma seqüência de consulta (ex. display_event.asp? ID = 10). Quando o usuário clica sobre o tema do evento, passamos o ID de evento para a página display_event.asp.<br />
Que nos leva à página do evento. Você precisa primeiro se conectar ao banco de dados (o mesmo que acima). Então você precisa para obter o ID de eventos a partir da seqüência de consulta e percorrer o banco de dados até encontrarmos o evento:</p>
<p>EventToShow = CInt(Request.QueryString(&#8220;ID&#8221;))</p>
<p>If Not objRecordset.EOF Then</p>
<p>objRecordset.MoveFirst</p>
<p>Do Until objRecordset.Fields(&#8220;ID&#8221;) = EventToShow</p>
<p>objRecordset.MoveNext</p>
<p>Loop</p>
<p>End If</p>
<p>Em seguida, deseja correlacionar o evento exibido com uma variável de sessão para editar e exibir o evento::</p>
<p>Session(&#8220;EventToEdit&#8221;) = EventToShow</p>
<p>Date:</p>
<p>&lt;%</p>
<p>Response.Write objRecordset.Fields(&#8220;Month&#8221;) &amp; &#8220;/&#8221; &amp; _</p>
<p>objRecordset.Fields(&#8220;Day&#8221;) &amp; &#8220;/&#8221; &amp; _</p>
<p>objRecordset.Fields(&#8220;Year&#8221;)</p>
<p>%&gt;</p>
<p>Subject:</p>
<p>&lt;%</p>
<p>Response.Write objRecordset.Fields(&#8220;Subject&#8221;)</p>
<p>%&gt;</p>
<p>Message: &lt;%= objRecordset.Fields(&#8220;Message&#8221;) %&gt;</p>
<p>Added By:</p>
<p>&lt;%</p>
<p>Response.Write objRecordset.Fields(&#8220;AddedBy&#8221;) &amp; _</p>
<p>&#8221; on &#8221; &amp; objRecordset.Fields(&#8220;DateAdded&#8221;)</p>
<p>%&gt;</p>
<p>Não se esqueça de limpar a sua conexão com o banco:</p>
<p>objRecordset.Close<br />
Set objRecordset = Nothing</p>
<p>As próximas duas páginas (edit_event.asp &amp; add_event.asp) são muito semelhantes. A única exceção é que com o evento de edição, queremos mostrar o evento existente dentro do formulário. Como mencionei anteriormente, você poderia provavelmente começar com a combinação destas duas páginas. A única coisa que você precisa manter em mente é com a manipulação do recorset. Na página de atualização, precisamos usar objRecordset.Update, enquanto na página add_event.asp, você vai querer usar objRecordset.AddNew.<br />
Em ambos os casos, precisamos conectar ao banco de dados de entrada e os dados do formulário para os campos, semelhante ao abaixo:</p>
<p>objRecordset.Fields(&#8220;Subject&#8221;) = Request.Form(&#8220;txtSubject&#8221;)<br />
objRecordset.Fields(&#8220;Message&#8221;) = Request.Form(&#8220;Message&#8221;)<br />
objRecordset.Fields(&#8220;Day&#8221;) = Request.Form(&#8220;txtDay&#8221;)<br />
objRecordset.Fields(&#8220;Month&#8221;) = Request.Form(&#8220;txtMonth&#8221;)<br />
objRecordset.Fields(&#8220;Year&#8221;) = Request.Form(&#8220;txtYear&#8221;)<br />
objRecordset.Fields(&#8220;AddedBy&#8221;) = Request.Form(&#8220;txtAddedBy&#8221;)<br />
objRecordset.Fields(&#8220;DateAdded&#8221;) = Now()</p>
<p>Há obviamente muito mais que você pode fazer com este exemplo, mas isso vai lhe proporcionar um bom ponto de partida. Você pode querer só permitem aos usuários editar / excluir eventos que eles postaram (este é onde o campo AddedBy vem no lugar). Você também pode querer inserir um tempo para o evento. Você poderia código de evento de cor os dias que têm eventos postados.Abaixo todos os códigos das págins.</p>
<p>add_event.asp</p>
<p>&lt;%@ LANGUAGE=VBSCRIPT %&gt;</p>
<p>&lt;%Option Explicit%&gt;</p>
<p>&lt;%</p>
<p>Dim DB_CONNECTIONSTRING</p>
<p>Dim objRecordset</p>
<p>Dim Added</p>
<p>%&gt;</p>
<p>&lt;!&#8211;#include file=&#8221;adovbs.inc&#8221;&#8211;&gt;</p>
<p>&lt;%</p>
<p>DB_CONNECTIONSTRING = &#8220;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=&#8221; &amp; Server.Mappath(&#8220;users.mdb&#8221;) &amp; &#8220;;&#8221;</p>
<p>Set objRecordset = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)</p>
<p>objRecordset.Open &#8220;calendar&#8221;, DB_CONNECTIONSTRING, adOpenStatic, adLockPessimistic, adCmdTable</p>
<p>If Request.Form(&#8220;btnAdd&#8221;) = &#8220;Add Event&#8221; Then</p>
<p>objRecordset.AddNew</p>
<p>&#8216;&#8211; Adiciona records no database do form &#8211;</p>
<p>objRecordset.Fields(&#8220;Subject&#8221;) = Request.Form(&#8220;txtSubject&#8221;)</p>
<p>objRecordset.Fields(&#8220;Message&#8221;) = Request.Form(&#8220;Message&#8221;)</p>
<p>objRecordset.Fields(&#8220;Day&#8221;) = Request.Form(&#8220;selDay&#8221;)</p>
<p>objRecordset.Fields(&#8220;Month&#8221;) = Request.Form(&#8220;selMonth&#8221;)</p>
<p>objRecordset.Fields(&#8220;Year&#8221;) = Request.Form(&#8220;selYear&#8221;)</p>
<p>objRecordset.Fields(&#8220;AddedBy&#8221;) = Request.Form(&#8220;txtAddedBy&#8221;)</p>
<p>objRecordset.Fields(&#8220;DateAdded&#8221;) = Now()</p>
<p>objRecordset.Update</p>
<p>Added = &#8220;True&#8221;</p>
<p>End If</p>
<p>objRecordset.Close</p>
<p>Set objRecordset = Nothing</p>
<p>If Added = &#8220;True&#8221; Then</p>
<p>Response.Redirect(&#8220;calendar.asp&#8221;)</p>
<p>End If</p>
<p>%&gt;</p>
<p>&lt;html&gt;</p>
<p>&lt;center&gt;</p>
<p>&lt;form method=&#8221;post&#8221; action=&#8221;add_event.asp&#8221;&gt;</p>
<p>&lt;table border=&#8221;0&#8243; cellpadding=&#8221;0&#8243; cellspacing=&#8221;0&#8243;&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td&gt;Dia:</p>
<p>&lt;select name=&#8221;selDay&#8221;&gt;</p>
<p>&lt;option value=&#8221;1&#8243;&gt;1&lt;/option&gt;</p>
<p>&lt;option value=&#8221;2&#8243;&gt;2&lt;/option&gt;</p>
<p>&lt;option value=&#8221;3&#8243;&gt;3&lt;/option&gt;</p>
<p>&lt;option value=&#8221;4&#8243;&gt;4&lt;/option&gt;</p>
<p>&lt;option value=&#8221;5&#8243;&gt;5&lt;/option&gt;</p>
<p>&lt;option value=&#8221;6&#8243;&gt;6&lt;/option&gt;</p>
<p>&lt;option value=&#8221;7&#8243;&gt;7&lt;/option&gt;</p>
<p>&lt;option value=&#8221;8&#8243;&gt;8&lt;/option&gt;</p>
<p>&lt;option value=&#8221;9&#8243;&gt;9&lt;/option&gt;</p>
<p>&lt;option value=&#8221;10&#8243;&gt;10&lt;/option&gt;</p>
<p>&lt;option value=&#8221;11&#8243;&gt;11&lt;/option&gt;</p>
<p>&lt;option value=&#8221;12&#8243;&gt;12&lt;/option&gt;</p>
<p>&lt;option value=&#8221;13&#8243;&gt;13&lt;/option&gt;</p>
<p>&lt;option value=&#8221;14&#8243;&gt;14&lt;/option&gt;</p>
<p>&lt;option value=&#8221;15&#8243;&gt;15&lt;/option&gt;</p>
<p>&lt;option value=&#8221;16&#8243;&gt;16&lt;/option&gt;</p>
<p>&lt;option value=&#8221;17&#8243;&gt;17&lt;/option&gt;</p>
<p>&lt;option value=&#8221;18&#8243;&gt;18&lt;/option&gt;</p>
<p>&lt;option value=&#8221;19&#8243;&gt;19&lt;/option&gt;</p>
<p>&lt;option value=&#8221;20&#8243;&gt;20&lt;/option&gt;</p>
<p>&lt;option value=&#8221;21&#8243;&gt;21&lt;/option&gt;</p>
<p>&lt;option value=&#8221;22&#8243;&gt;22&lt;/option&gt;</p>
<p>&lt;option value=&#8221;23&#8243;&gt;23&lt;/option&gt;</p>
<p>&lt;option value=&#8221;24&#8243;&gt;24&lt;/option&gt;</p>
<p>&lt;option value=&#8221;25&#8243;&gt;25&lt;/option&gt;</p>
<p>&lt;option value=&#8221;26&#8243;&gt;26&lt;/option&gt;</p>
<p>&lt;option value=&#8221;27&#8243;&gt;27&lt;/option&gt;</p>
<p>&lt;option value=&#8221;28&#8243;&gt;28&lt;/option&gt;</p>
<p>&lt;option value=&#8221;29&#8243;&gt;29&lt;/option&gt;</p>
<p>&lt;option value=&#8221;30&#8243;&gt;30&lt;/option&gt;</p>
<p>&lt;option value=&#8221;31&#8243;&gt;31&lt;/option&gt;</p>
<p>&lt;/select&gt;&lt;/td&gt;</p>
<p>&lt;td&gt;Mês:</p>
<p>&lt;select name=&#8221;selMonth&#8221;&gt;</p>
<p>&lt;OPTION VALUE=&#8221;1&#8243;&gt;Janeiro&lt;/option&gt;</p>
<p>&lt;OPTION VALUE=&#8221;2&#8243;&gt;Fevereiro&lt;/option&gt;</p>
<p>&lt;OPTION VALUE=&#8221;3&#8243;&gt;Março&lt;/option&gt;</p>
<p>&lt;OPTION VALUE=&#8221;4&#8243;&gt;Abril&lt;/option&gt;</p>
<p>&lt;OPTION VALUE=&#8221;5&#8243;&gt;Maio&lt;/option&gt;</p>
<p>&lt;OPTION VALUE=&#8221;6&#8243;&gt;Junho&lt;/option&gt;</p>
<p>&lt;OPTION VALUE=&#8221;7&#8243;&gt;Julho&lt;/option&gt;</p>
<p>&lt;OPTION VALUE=&#8221;8&#8243;&gt;Agosto&lt;/option&gt;</p>
<p>&lt;OPTION VALUE=&#8221;9&#8243;&gt;Setembro&lt;/option&gt;</p>
<p>&lt;OPTION VALUE=&#8221;10&#8243;&gt;Outubro&lt;/option&gt;</p>
<p>&lt;OPTION VALUE=&#8221;11&#8243;&gt;Novembro&lt;/option&gt;</p>
<p>&lt;OPTION VALUE=&#8221;12&#8243;&gt;Dezembro&lt;/option&gt;</p>
<p>&lt;/select&gt;&lt;/td&gt;</p>
<p>&lt;td&gt;Ano:</p>
<p>&lt;select name=&#8221;selYear&#8221;&gt;</p>
<p>&lt;option value=&#8221;1999&#8243;&gt;1999&lt;/option&gt;</p>
<p>&lt;option value=&#8221;2000&#8243;&gt;2000&lt;/option&gt;</p>
<p>&lt;option value=&#8221;2001&#8243;&gt;2001&lt;/option&gt;</p>
<p>&lt;option value=&#8221;2002&#8243;&gt;2002&lt;/option&gt;</p>
<p>&lt;option value=&#8221;2003&#8243;&gt;2003&lt;/option&gt;</p>
<p>&lt;option value=&#8221;2004&#8243;&gt;2004&lt;/option&gt;</p>
<p>&lt;/select&gt;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=&#8221;3&#8243;&gt;&amp;nbsp;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=&#8221;3&#8243; align=&#8221;center&#8221;&gt;Assunto:</p>
<p>&lt;input type=&#8221;text&#8221; name=&#8221;txtSubject&#8221; size=&#8221;35&#8243;&gt;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=&#8221;3&#8243;&gt;&amp;nbsp;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=&#8221;3&#8243; align=&#8221;center&#8221;&gt;&lt;textarea name=&#8221;Message&#8221; cols=&#8221;40&#8243; rows=&#8221;10&#8243;&gt;&lt;/textarea&gt;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=&#8221;3&#8243;&gt;&amp;nbsp;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=&#8221;3&#8243; align=&#8221;center&#8221;&gt;Adicionado por:</p>
<p>&lt;input type=&#8221;text&#8221; name=&#8221;txtAddedBy&#8221; size=&#8221;35&#8243; value=&#8221;&lt;%= Session(&#8220;FirstName&#8221;) &amp; &#8221; &#8221; &amp; Session(&#8220;LastName&#8221;)%&gt;&#8221;&gt;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;/table&gt;</p>
<p>&lt;p&gt;</p>
<p>&lt;input type=&#8221;submit&#8221; name=&#8221;btnAdd&#8221; value=&#8221;Adiciona&#8221;&gt;&amp;nbsp;&amp;nbsp;&lt;input type=&#8221;Reset&#8221; name=&#8221;btnReset&#8221; value=&#8221;Limpar&#8221;&gt;</p>
<p>&lt;/form&gt;</p>
<p>&lt;/center&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>Aqui a página calendar.asp</p>
<p>&lt;%@ LANGUAGE=VBSCRIPT %&gt;</p>
<p>&lt;%Option Explicit%&gt;</p>
<p>&lt;!&#8211;#include file=&#8221;adovbs.inc&#8221;&#8211;&gt;</p>
<p>&lt;%</p>
<p>If Request.Form(&#8220;AddEvent&#8221;) = &#8220;Add Event&#8221; Then</p>
<p>Response.Redirect(&#8220;add_event.asp&#8221;)</p>
<p>End If</p>
<p>If Request.Form(&#8220;EditEvent&#8221;) = &#8220;Edit Event&#8221; Then</p>
<p>Response.Redirect(&#8220;edit_event.asp&#8221;)</p>
<p>End If</p>
<p>Dim DB_CONNECTIONSTRING</p>
<p>Dim objRecordset</p>
<p>DB_CONNECTIONSTRING = &#8220;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=&#8221; &amp; Server.Mappath(&#8220;users.mdb&#8221;) &amp; &#8220;;&#8221;</p>
<p>Set objRecordset = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)</p>
<p>objRecordset.Open &#8220;calendar&#8221;, DB_CONNECTIONSTRING, adOpenStatic, adLockPessimistic, adCmdTable</p>
<p>%&gt;</p>
<p>&lt;%</p>
<p>Function GetDaysInMonth(iMonth, iYear)</p>
<p>Select Case iMonth</p>
<p>Case 1, 3, 5, 7, 8, 10, 12</p>
<p>GetDaysInMonth = 31</p>
<p>Case 4, 6, 9, 11</p>
<p>GetDaysInMonth = 30</p>
<p>Case 2</p>
<p>If IsDate(&#8220;February 29, &#8221; &amp; iYear) Then</p>
<p>GetDaysInMonth = 29</p>
<p>Else</p>
<p>GetDaysInMonth = 28</p>
<p>End If</p>
<p>End Select</p>
<p>End Function</p>
<p>Function GetWeekdayMonthStartsOn(iMonth, iYear)</p>
<p>GetWeekdayMonthStartsOn = WeekDay(CDate(iMonth &amp; &#8220;/1/&#8221; &amp; iYear))</p>
<p>End Function</p>
<p>Function SubtractOneMonth(dDate)</p>
<p>Dim iDay, iMonth, iYear</p>
<p>iDay = Day(dDate)</p>
<p>iMonth = Month(dDate)</p>
<p>iYear = Year(dDate)</p>
<p>If iMonth = 1 Then</p>
<p>iMonth = 12</p>
<p>iYear = iYear &#8211; 1</p>
<p>Else</p>
<p>iMonth = iMonth &#8211; 1</p>
<p>End If</p>
<p>If iDay &gt; GetDaysInMonth(iMonth, iYear) Then iDay = GetDaysInMonth(iMonth, iYear)</p>
<p>SubtractOneMonth = CDate(iMonth &amp; &#8220;-&#8221; &amp; iDay &amp; &#8220;-&#8221; &amp; iYear)</p>
<p>End Function</p>
<p>Function AddOneMonth(dDate)</p>
<p>Dim iDay, iMonth, iYear</p>
<p>iDay = Day(dDate)</p>
<p>iMonth = Month(dDate)</p>
<p>iYear = Year(dDate)</p>
<p>If iMonth = 12 Then</p>
<p>iMonth = 1</p>
<p>iYear = iYear + 1</p>
<p>Else</p>
<p>iMonth = iMonth + 1</p>
<p>End If</p>
<p>If iDay &gt; GetDaysInMonth(iMonth, iYear) Then iDay = GetDaysInMonth(iMonth, iYear)</p>
<p>AddOneMonth = CDate(iMonth &amp; &#8220;-&#8221; &amp; iDay &amp; &#8220;-&#8221; &amp; iYear)</p>
<p>End Function</p>
<p>Dim dDate     &#8216; Data estamos exibindo calendário para</p>
<p>Dim iDIM      &#8216; Dias no mês</p>
<p>Dim iDOW      &#8216; Dia da semana que começa no mês</p>
<p>Dim iCurrent  &#8216; Variável que usamos para segurar dia atual do mês como nós escrevemos tabela</p>
<p>Dim iPosition &#8216; Variável que usamos para manter a posição atual na tabela</p>
<p>If IsDate(Request.QueryString(&#8220;date&#8221;)) Then</p>
<p>dDate = CDate(Request.QueryString(&#8220;date&#8221;))</p>
<p>Else</p>
<p>If IsDate(Request.QueryString(&#8220;month&#8221;) &amp; &#8220;-&#8221; &amp; Request.QueryString(&#8220;day&#8221;) &amp; &#8220;-&#8221; &amp; Request.QueryString(&#8220;year&#8221;)) Then</p>
<p>dDate = CDate(Request.QueryString(&#8220;month&#8221;) &amp; &#8220;-&#8221; &amp; Request.QueryString(&#8220;day&#8221;) &amp; &#8220;-&#8221; &amp; Request.QueryString(&#8220;year&#8221;))</p>
<p>Else</p>
<p>dDate = Date()</p>
<p>If Request.QueryString.Count &lt;&gt; 0 Then</p>
<p>Response.Write &#8220;a data que você escolheu não era uma data válida. O calendário foi definido para a data de hoje.&lt;BR&gt;&lt;BR&gt;&#8221;</p>
<p>End If</p>
<p>End If</p>
<p>End If</p>
<p>iDIM = GetDaysInMonth(Month(dDate), Year(dDate))</p>
<p>iDOW = GetWeekdayMonthStartsOn(Month(dDate), Year(dDate))</p>
<p>%&gt;</p>
<p>&lt;html&gt;</p>
<p>&lt;center&gt;</p>
<p>&lt;table border=&#8221;1&#8243; cellspacing=&#8221;0&#8243; cellpadding=&#8221;1&#8243;&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td bgcolor=&#8221;blue&#8221; align=&#8221;center&#8221; colspan=&#8221;7&#8243;&gt;</p>
<p>&lt;table width=&#8221;100%&#8221; border=&#8221;0&#8243; cellspacing=&#8221;0&#8243; cellpadding=&#8221;0&#8243;&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td align=&#8221;right&#8221;&gt;&lt;b&gt;&lt;A HREF=&#8221;calendar.asp?date=&lt;%= SubtractOneMonth(dDate) %&gt;&#8221; style=&#8221;color: #FFFFFF&#8221;&gt;&amp;lt;&#8211;&lt;/A&gt;&lt;/b&gt;&lt;/TD&gt;</p>
<p>&lt;td align=&#8221;center&#8221;&gt;&lt;font color=&#8221;#FFFFFF&#8221;&gt;&lt;B&gt;&lt;%= MonthName(Month(dDate)) &amp; &#8220;  &#8221; &amp; Year(dDate) %&gt;&lt;/B&gt;&lt;/font&gt;&lt;/TD&gt;</p>
<p>&lt;td align=&#8221;left&#8221;&gt;&lt;b&gt;&lt;A HREF=&#8221;calendar.asp?date=&lt;%= AddOneMonth(dDate) %&gt;&#8221; style=&#8221;color: #FFFFFF&#8221;&gt;&#8211;&amp;gt;&lt;/A&gt;&lt;/b&gt;&lt;/TD&gt;</p>
<p>&lt;td align=&#8221;right&#8221; valign=&#8221;top&#8221;&gt;&lt;a href=&#8221;http://www.4guysfromrolla.com&#8221;&gt;&lt;img src=&#8221;close.gif&#8221; border=&#8221;0&#8243;&gt;&lt;/a&gt;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;/TABLE&gt;</p>
<p>&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr bgcolor=&#8221;blue&#8221;&gt;</p>
<p>&lt;td ALIGN=&#8221;center&#8221; width=&#8221;80&#8243;&gt;&lt;B&gt;&lt;font color=&#8221;#FFFFFF&#8221;&gt;Dom&lt;/font&gt;&lt;/B&gt;&lt;/TD&gt;</p>
<p>&lt;td ALIGN=&#8221;center&#8221; width=&#8221;80&#8243;&gt;&lt;B&gt;&lt;font color=&#8221;#FFFFFF&#8221;&gt;Seg&lt;/font&gt;&lt;/B&gt;&lt;/TD&gt;</p>
<p>&lt;td ALIGN=&#8221;center&#8221; width=&#8221;80&#8243;&gt;&lt;B&gt;&lt;font color=&#8221;#FFFFFF&#8221;&gt;Ter&lt;/font&gt;&lt;/B&gt;&lt;/TD&gt;</p>
<p>&lt;td ALIGN=&#8221;center&#8221; width=&#8221;80&#8243;&gt;&lt;B&gt;&lt;font color=&#8221;#FFFFFF&#8221;&gt;Qua&lt;/font&gt;&lt;/B&gt;&lt;/TD&gt;</p>
<p>&lt;td ALIGN=&#8221;center&#8221; width=&#8221;80&#8243;&gt;&lt;B&gt;&lt;font color=&#8221;#FFFFFF&#8221;&gt;Qui&lt;/font&gt;&lt;/B&gt;&lt;/TD&gt;</p>
<p>&lt;td ALIGN=&#8221;center&#8221; width=&#8221;80&#8243;&gt;&lt;B&gt;&lt;font color=&#8221;#FFFFFF&#8221;&gt;Sex&lt;/font&gt;&lt;/B&gt;&lt;/TD&gt;</p>
<p>&lt;td ALIGN=&#8221;center&#8221; width=&#8221;80&#8243;&gt;&lt;B&gt;&lt;font color=&#8221;#FFFFFF&#8221;&gt;Sab&lt;/font&gt;&lt;/B&gt;&lt;/TD&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;%</p>
<p>If iDOW &lt;&gt; 1 Then</p>
<p>Response.Write(vbTab &amp; &#8220;&lt;tr&gt;&#8221; &amp; vbCrLf)</p>
<p>iPosition = 1</p>
<p>Do While iPosition &lt; iDOW</p>
<p>Response.Write(vbTab &amp; vbTab &amp; &#8220;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&#8221; &amp; vbCrLf)</p>
<p>iPosition = iPosition + 1</p>
<p>Loop</p>
<p>End If</p>
<p>&#8216;&#8211; Escreva dia do mês em slots bom dia &#8211;</p>
<p>iCurrent = 1</p>
<p>iPosition = iDOW</p>
<p>Do While iCurrent &lt;= iDIM</p>
<p>&#8216;&#8211; opeabre a tabela &#8211;</p>
<p>If iPosition = 1 Then</p>
<p>Response.Write(vbTab &amp; &#8220;&lt;tr&gt;&#8221; &amp; vbCrLf)</p>
<p>End If</p>
<p>&#8216;&#8211; Write na data e assun &#8211;to</p>
<p>Response.Write(vbTab &amp; vbTab &amp; &#8220;&lt;td align=left valign=top height=60&gt;&lt;b&gt;&#8221; &amp; iCurrent &amp; &#8220;&lt;/b&gt;&#8221;)</p>
<p>If Not objRecordset.BOF Then</p>
<p>objRecordset.MoveFirst</p>
<p>Do Until objRecordset.EOF</p>
<p>If objRecordset.Fields(&#8220;Year&#8221;) = Year(dDate) Then</p>
<p>If objRecordset.Fields(&#8220;Month&#8221;) = Month(dDate) Then</p>
<p>If objRecordset.Fields(&#8220;Day&#8221;) = iCurrent Then</p>
<p>Response.Write(&#8220;&lt;br&gt;&lt;font size=2&gt;&lt;a href=&#8221; &amp; Chr(34) &amp; &#8220;display_event.asp?ID=&#8221; &amp; objRecordset.Fields(&#8220;ID&#8221;) &amp; Chr(34) &amp; &#8220;&gt;&#8221; &amp; objRecordset.Fields(&#8220;Subject&#8221;) &amp; &#8220;&lt;/a&gt;&lt;/font&gt;&lt;br&gt;&#8221;)</p>
<p>End If</p>
<p>End If</p>
<p>End If</p>
<p>objRecordset.MoveNext</p>
<p>Loop</p>
<p>End If</p>
<p>Response.Write(&#8220;&lt;/td&gt;&#8221; &amp; vbCrLf)</p>
<p>&#8216;&#8211; Fecha a tabela &#8211;</p>
<p>If iPosition = 7 Then</p>
<p>Response.Write vbTab &amp; &#8220;&lt;/tr&gt;&#8221; &amp; vbCrLf</p>
<p>iPosition = 0</p>
<p>End If</p>
<p>&#8216;&#8211; Incrementa as  variaveis &#8211;</p>
<p>iCurrent = iCurrent + 1</p>
<p>iPosition = iPosition + 1</p>
<p>Loop</p>
<p>If iPosition &lt;&gt; 1 Then</p>
<p>Do While iPosition &lt;= 7</p>
<p>Response.Write(vbTab &amp; vbTab &amp; &#8220;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&#8221; &amp; vbCrLf)</p>
<p>iPosition = iPosition + 1</p>
<p>Loop</p>
<p>Response.Write vbTab &amp; &#8220;&lt;/TR&gt;&#8221; &amp; vbCrLf</p>
<p>End If</p>
<p>%&gt;</p>
<p>&lt;/table&gt;</p>
<p>&lt;%</p>
<p>objRecordset.Close</p>
<p>Set objRecordset = Nothing</p>
<p>%&gt;</p>
<p>&lt;%</p>
<p>Response.Write(&#8220;&lt;form action=&#8221; &amp; Chr(34) &amp; &#8220;calendar.asp&#8221; &amp; Chr(34) &amp; &#8221; method=&#8221; &amp; Chr(34) &amp; &#8220;post&#8221; &amp; Chr(34) &amp; &#8220;&gt;&#8221; &amp; Chr(10))</p>
<p>Response.Write(&#8220;&lt;input type=&#8221; &amp; Chr(34) &amp; &#8220;submit&#8221; &amp; Chr(34) &amp; &#8221; name=&#8221; &amp; Chr(34) &amp; &#8220;AddEvent&#8221; &amp; Chr(34) &amp; &#8221; value=&#8221; &amp; Chr(34) &amp; &#8220;Add Event&#8221; &amp; Chr(34) &amp; &#8220;&gt;&#8221; &amp; &#8220;&amp;nbsp;&amp;nbsp;&#8221;)</p>
<p>Response.Write(&#8220;&lt;/form&gt;&#8221;)</p>
<p>%&gt;</p>
<p>&lt;/center&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>Display_event.asp</p>
<p>&lt;%@ LANGUAGE=VBSCRIPT %&gt;</p>
<p>&lt;%Option Explicit%&gt;</p>
<p>&lt;%</p>
<p>Dim MyName</p>
<p>Dim DB_CONNECTIONSTRING</p>
<p>Dim objRecordset</p>
<p>Dim EventToShow</p>
<p>%&gt;</p>
<p>&lt;!&#8211;#include file=&#8221;adovbs.inc&#8221;&#8211;&gt;</p>
<p>&lt;%</p>
<p>MyName = Session(&#8220;Firstname&#8221;) &amp; &#8221; &#8221; &amp; Session(&#8220;LastName&#8221;)</p>
<p>DB_CONNECTIONSTRING = &#8220;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=&#8221; &amp; Server.Mappath(&#8220;users.mdb&#8221;) &amp; &#8220;;&#8221;</p>
<p>Set objRecordset = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)</p>
<p>objRecordset.Open &#8220;calendar&#8221;, DB_CONNECTIONSTRING, adOpenStatic, adLockPessimistic, adCmdTable</p>
<p>EventToShow = CInt(Request.QueryString(&#8220;ID&#8221;))</p>
<p>If Not objRecordset.EOF Then</p>
<p>objRecordset.MoveFirst</p>
<p>Do Until objRecordset.Fields(&#8220;ID&#8221;) = EventToShow</p>
<p>objRecordset.MoveNext</p>
<p>Loop</p>
<p>End If</p>
<p>Session(&#8220;EventToEdit&#8221;) = EventToShow</p>
<p>%&gt;</p>
<p>&lt;html&gt;</p>
<p>Data:&lt;/b&gt; &lt;%= objRecordset.Fields(&#8220;Month&#8221;) &amp; &#8220;/&#8221; &amp; objRecordset.Fields(&#8220;Day&#8221;) &amp; &#8220;/&#8221; &amp; objRecordset.Fields(&#8220;Year&#8221;) %&gt;&lt;p&gt;</p>
<p>&lt;b&gt;Assunto:&lt;/b&gt; &lt;%= objRecordset.Fields(&#8220;Subject&#8221;) %&gt;&lt;p&gt;</p>
<p>&lt;b&gt;Mensagem:&lt;/b&gt; &lt;%= objRecordset.Fields(&#8220;Message&#8221;) %&gt;&lt;p&gt;</p>
<p>&lt;b&gt;Adicionado por:&lt;/b&gt; &lt;%= objRecordset.Fields(&#8220;AddedBy&#8221;) &amp; &#8221; on &#8221; &amp; objRecordset.Fields(&#8220;DateAdded&#8221;)%&gt;</p>
<p>&lt;p&gt;&amp;nbsp;&lt;/p&gt;</p>
<p>&lt;form method=&#8221;post&#8221; action=&#8221;edit_event.asp&#8221;&gt;</p>
<p>&lt;input type=&#8221;submit&#8221; name=&#8221;btnEditEvent&#8221; value=&#8221;Edita/Exclui Evento&#8221;&gt;</p>
<p>&lt;/form&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>&lt;%</p>
<p>objRecordset.Close</p>
<p>Set objRecordset = Nothing</p>
<p>%&gt;</p>
<p>Edit_event.asp</p>
<p>&lt;%@ LANGUAGE=VBSCRIPT %&gt;</p>
<p>&lt;%Option Explicit%&gt;</p>
<p>&lt;%</p>
<p>Dim DB_CONNECTIONSTRING</p>
<p>Dim objRecordset</p>
<p>Dim Updated</p>
<p>%&gt;</p>
<p>&lt;!&#8211;#include file=&#8221;adovbs.inc&#8221;&#8211;&gt;</p>
<p>&lt;%</p>
<p>If Request.Form(&#8220;btnCalendar&#8221;) = &#8220;Back To Calendar&#8221; Then</p>
<p>Response.Redirect(&#8220;calendar.asp&#8221;)</p>
<p>End If</p>
<p>DB_CONNECTIONSTRING = &#8220;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=&#8221; &amp; Server.Mappath(&#8220;users.mdb&#8221;) &amp; &#8220;;&#8221;</p>
<p>Set objRecordset = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)</p>
<p>objRecordset.Open &#8220;calendar&#8221;, DB_CONNECTIONSTRING, adOpenStatic, adLockPessimistic, adCmdTable</p>
<p>If Session(&#8220;EventToEdit&#8221;) &lt;&gt; 0 Then</p>
<p>If Not objRecordset.EOF Then</p>
<p>objRecordset.MoveFirst</p>
<p>Do Until objRecordset.Fields(&#8220;ID&#8221;) = Session(&#8220;EventToEdit&#8221;)</p>
<p>objRecordset.MoveNext</p>
<p>Loop</p>
<p>End If</p>
<p>End If</p>
<p>If Request.Form(&#8220;btnEdit&#8221;) = &#8220;Update&#8221; Then</p>
<p>&#8216;&#8211; Adiciona records no database do form &#8211;</p>
<p>objRecordset.Fields(&#8220;Subject&#8221;) = Request.Form(&#8220;txtSubject&#8221;)</p>
<p>objRecordset.Fields(&#8220;Message&#8221;) = Request.Form(&#8220;Message&#8221;)</p>
<p>objRecordset.Fields(&#8220;Day&#8221;) = Request.Form(&#8220;txtDay&#8221;)</p>
<p>objRecordset.Fields(&#8220;Month&#8221;) = Request.Form(&#8220;txtMonth&#8221;)</p>
<p>objRecordset.Fields(&#8220;Year&#8221;) = Request.Form(&#8220;txtYear&#8221;)</p>
<p>objRecordset.Fields(&#8220;AddedBy&#8221;) = Request.Form(&#8220;txtAddedBy&#8221;)</p>
<p>objRecordset.Fields(&#8220;DateAdded&#8221;) = Now()</p>
<p>objRecordset.Update</p>
<p>Updated = &#8220;True&#8221;</p>
<p>End If</p>
<p>If Request.Form(&#8220;btnDelete&#8221;) = &#8220;Delete&#8221; Then</p>
<p>&#8216;&#8211;Delete o evento no database &#8211;</p>
<p>objRecordset.Delete adAffectCurrent</p>
<p>Response.Redirect(&#8220;calendar.asp&#8221;)</p>
<p>End If</p>
<p>%&gt;</p>
<p>&lt;html&gt;</p>
<p>&lt;center&gt;</p>
<p>&lt;%</p>
<p>If Updated = &#8220;True&#8221; Then</p>
<p>Response.Write(&#8220;&lt;font size=4&gt;&lt;b&gt;&lt;font color=&#8221; &amp; Chr(34) &amp; &#8220;red&#8221; &amp; Chr(34) &amp; &#8220;&gt;&#8221; &amp; objRecordset.Fields(&#8220;Subject&#8221;) &amp; &#8220;&lt;/font&gt; has been updated&lt;/b&gt;&lt;/font&gt;&lt;p&gt;&#8221;)</p>
<p>End If</p>
<p>%&gt;</p>
<p>&lt;form method=&#8221;post&#8221; action=&#8221;edit_event.asp&#8221;&gt;</p>
<p>&lt;table border=&#8221;0&#8243; cellpadding=&#8221;0&#8243; cellspacing=&#8221;0&#8243;&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td&gt;Dia:</p>
<p>&lt;input type=&#8221;text&#8221; name=&#8221;txtDay&#8221; size=&#8221;4&#8243; value=&#8221;&lt;%= objRecordset.Fields(&#8220;Day&#8221;)%&gt;&#8221;&gt;&lt;/td&gt;</p>
<p>&lt;td&gt;Mês:</p>
<p>&lt;input type=&#8221;text&#8221; name=&#8221;txtMonth&#8221; size=&#8221;10&#8243; value=&#8221;&lt;%= objRecordset.Fields(&#8220;Month&#8221;)%&gt;&#8221;&gt;&lt;/td&gt;</p>
<p>&lt;td&gt;Ano:</p>
<p>&lt;input type=&#8221;text&#8221; name=&#8221;txtYear&#8221; size=&#8221;5&#8243; value=&#8221;&lt;%= objRecordset.Fields(&#8220;Year&#8221;)%&gt;&#8221;&gt;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=&#8221;3&#8243;&gt;&amp;nbsp;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=&#8221;3&#8243; align=&#8221;center&#8221;&gt;Assunto:</p>
<p>&lt;input type=&#8221;text&#8221; name=&#8221;txtSubject&#8221; size=&#8221;35&#8243; value=&#8221;&lt;%= objRecordset.Fields(&#8220;Subject&#8221;)%&gt;&#8221;&gt;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=&#8221;3&#8243;&gt;&amp;nbsp;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=&#8221;3&#8243; align=&#8221;center&#8221;&gt;&lt;textarea name=&#8221;Message&#8221; cols=&#8221;40&#8243; rows=&#8221;10&#8243;&gt;&lt;%= objRecordset.Fields(&#8220;Message&#8221;)%&gt;&lt;/textarea&gt;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=&#8221;3&#8243;&gt;&amp;nbsp;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td colspan=&#8221;3&#8243; align=&#8221;center&#8221;&gt;Adicionado por:</p>
<p>&lt;input type=&#8221;text&#8221; name=&#8221;txtAddedBy&#8221; size=&#8221;35&#8243; value=&#8221;&lt;%= objRecordset.Fields(&#8220;AddedBy&#8221;)%&gt;&#8221;&gt;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;/table&gt;</p>
<p>&lt;p&gt;</p>
<p>&lt;input type=&#8221;submit&#8221; name=&#8221;btnEdit&#8221; value=&#8221;Atualizar&#8221;&gt;&amp;nbsp;&amp;nbsp;</p>
<p>&lt;input type=&#8221;submit&#8221; name=&#8221;btnDelete&#8221; value=&#8221;Excluir&#8221;&gt;&amp;nbsp;&amp;nbsp;</p>
<p>&lt;input type=&#8221;Reset&#8221; name=&#8221;btnReset&#8221; value=&#8221;Limpar&#8221;&gt;&amp;nbsp;&amp;nbsp;</p>
<p>&lt;input type=&#8221;submit&#8221; name=&#8221;btnCalendar&#8221; value=&#8221;Voltar Calendario&#8221;&gt;</p>
<p>&lt;/form&gt;</p>
<p>&lt;/center&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>&lt;%</p>
<p>objRecordset.Close</p>
<p>Set objRecordset = Nothing</p>
<p>%&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/asp-calendario-de-eventos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP &#8211; Gráficos de barras</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/aspnet/asp-graficos-de-barras/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/aspnet/asp-graficos-de-barras/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 16:10:02 +0000</pubDate>
		<dc:creator>X@nBuRzUm</dc:creator>
				<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=6515</guid>
		<description><![CDATA[Mais uma técnica para mostrar gráficos de barras usando apenas HTML. Ele também garante que ele irá exibir corretamente para qualquer navegador que suporta tabelas. Primeiro vou apresentar um gráfico de barras estáticas, com pontos de dados a serem plotado, podemos recuperar as informações de um banco de dados para preencher dinamicamente o gráfico de [...]]]></description>
			<content:encoded><![CDATA[<p>Mais uma técnica para mostrar gráficos de barras usando apenas HTML. Ele também garante que ele irá exibir corretamente para qualquer navegador que suporta tabelas.</p>
<p>Primeiro vou apresentar um gráfico de barras estáticas, com pontos de dados a serem plotado, podemos recuperar as informações de um banco de dados para preencher dinamicamente o gráfico de barras.</p>
<p>Vamos iniciar um exemplo mais simples de duas:</p>
<p><strong><code>&lt;%@ %&gt;</code><br />
<code>&lt;% Option Explicit %&gt;</code></strong></p>
<p>Usando o Option Explicit, para otimizar o código, essa instrução força a declaração (com Dim, Private, Public ou ReDim) de todas as variáveis usadas no script, antes de serem utilizadas.<br />
Deve ser colocado no script antes de qualquer outra instrução. Qualquer tentativa de usar uma variável não declarada ocasionará um erro. A declaração de variáveis antes de usá-las faz com que o script seja executado mais rapidamente.</p>
<p>Agora, queremos definir algumas constantes que irá afetar a forma como o gráfico é exibido. Essas constantes são a altura do gráfico em pixels, a largura do gráfico em pixels, e o nome da imagem que será as barras do gráfico. Neste exemplo, foi uma criado uma imagem de 20 pixels de largura e 5 pixels de altura, chamada bluebar.gif, voê pode criar uma barra de dimensão semelhante, com a cor  que desejar.</p>
<p><strong><code>&lt;%</code><br />
&#8216;Quantos pixels de altura / largura queremos que o nosso gráfico de barras<br />
<code>Const graphHeight = 300</code><br />
<code>Const graphWidth = 450</code> </strong><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>‘caminho da imagem bar</strong> <strong><br />
<code>Const barImage = "/images/bluebar.gif"</code></strong></p>
<p>Agora estamos prontos para escrever a nossa sub-rotina que irá exibir o gráfico de barras. A sub-rotina é chamada BarChart e leva quatro parâmetros:</p>
<p>-  data: um array de dimensão de todos os pontos de dados (começa em 0)<br />
-  labels: um array de dimensão de todas as etiquetas para as barras (começa em 0, deve ser do mesmo tamanho que a matriz de dados)<br />
-  title: uma string; o título que deseja na barra do gráfico<br />
-  axislabel &#8211; uma string; o título que você deseja para suas etiquetas</p>
<p>Basicamente, estamos indo para exibir uma tabela que tem n +1 colunas, onde n é igual array. Em cada coluna, exceto para a primeira, vamos fazer uma &lt;IMG SRC&#8230;&gt; com uma altura proporcional ao valor do datapoint atual no array.</p>
<p><strong>sub BarChart(data, labels, title, axislabel)</strong></p>
<p><strong> </strong></p>
<p><strong>&#8216;Exibe título(heading)</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;&lt;TABLE CELLSPACING=0 CELLPADDING=1 BORDER=0&#8243;)</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8221; WIDTH=&#8221; &amp; graphWidth &amp; &#8220;&gt;&#8221; &amp; chr(13))</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;&lt;TR&gt;&lt;TH COLSPAN=&#8221; &amp; UBound(data) &#8211; LBound(data) + 2)</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;&gt;&#8221;)</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;&lt;FONT SIZE=+2&gt;&#8221; &amp; title &amp; &#8220;&lt;/FONT&gt;&lt;/TH&gt;&lt;/TR&gt;&#8221;</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;&lt;TR&gt;&lt;TD VALIGN=TOP ALIGN=RIGHT&gt;&#8221; &amp; chr(13))</strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>‘Encontrar o maior valor</strong></p>
<p><strong> </strong></p>
<p><strong>Dim hi, low</strong></p>
<p><strong> </strong></p>
<p><strong>hi = data(LBound(data))</strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>Dim i</strong></p>
<p><strong> </strong></p>
<p><strong>for i = LBound(data) to UBound(data)</strong></p>
<p><strong> </strong></p>
<p><strong>if data(i) &gt; hi then hi = data(i)</strong></p>
<p><strong> </strong></p>
<p><strong>next</strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>&#8216;Exibe o maior valor no topo do gráfico</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(hi &amp; &#8220;&lt;/TD&gt;&#8221;)</strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>Dim widthpercent</strong></p>
<p><strong> </strong></p>
<p><strong>widthpercent = CInt((1 / (UBound(data) &#8211; LBound(data) + 1)) * 100)</strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>For i = LBound(data) to UBound(data)</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8221; &lt;TD VALIGN=BOTTOM ROWSPAN=2 WIDTH=&#8221;</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(widthpercent &amp; &#8220;% &gt;&#8221; &amp; chr(13))</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;   &lt;IMG SRC=&#8221;"&#8221; &amp; barImage &amp; &#8220;&#8221;" WIDTH=100% &#8220;)</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;HEIGHT=&#8221; &amp; CInt(data(i)/hi * graphHeight) &amp; &#8220;&gt;&#8221;)</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(chr(13))</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8221; &lt;/TD&gt;&#8221; &amp; chr(13))</strong></p>
<p><strong> </strong></p>
<p><strong>Next</strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;&lt;/TR&gt;&#8221;)</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;&lt;TR&gt;&lt;TD VALIGN=BOTTOM ALIGN=RIGH&gt;&gt;0&lt;/TD&gt;&lt;/TR&gt;&#8221;)</strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>&#8216;rodapé /labels</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;&lt;TR&gt;&lt;TD ALIGN=RIGHT VALIGN=BOTTOM&gt;&#8221;)</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(axislabel &amp; &#8220;&lt;/TD&gt;&#8221; &amp; chr(13))</strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>for i = LBound(labels) to UBound(labels)</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;&lt;TD VALIGN=BOTTOM ALIGN=CENTER&gt;&#8221; &amp; labels(i))</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;&lt;/TD&gt;&#8221; &amp; chr(13))</strong></p>
<p><strong> </strong></p>
<p><strong>next</strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;&lt;/TR&gt;&#8221; &amp; chr(13))</strong></p>
<p><strong> </strong></p>
<p><strong>Response.Write(&#8220;&lt;/TABLE&gt;&#8221;)</strong></p>
<p><strong> </strong></p>
<p><strong>end sub</strong></p>
<p><strong> </strong></p>
<p><strong>%&gt;</strong></p>
<p>Antes de podermos chamar a subrotina, precisamos criar e inicializar os dados do array. Aqui estão alguns valores aleatórios em ambos os arrays:</p>
<pre><strong>Dim dataArray(10)</strong>
<strong>dataArray(0) = 8</strong>
<strong>dataArray(1) = 10</strong>
<strong>dataArray(2) = 8</strong>
<strong>dataArray(3) = 14</strong>
<strong>dataArray(4) = 6</strong>
<strong>dataArray(5) = 13</strong>
<strong>dataArray(6) = 7</strong>
<strong>dataArray(7) = 11</strong>
<strong>dataArray(8) = 8</strong>
<strong>dataArray(9) = 9</strong>
<strong> </strong>
<strong>Dim labelArray(10)</strong>
<strong>labelArray(0) = "3/2"</strong>
<strong>labelArray(1) = "3/3"</strong>
<strong>labelArray(2) = "3/4"</strong>
<strong>labelArray(3) = "3/5"</strong>
<strong>labelArray(4) = "3/6"</strong>
<strong>labelArray(5) = "3/7"</strong>
<strong>labelArray(6) = "3/8"</strong>
<strong>labelArray(7) = "3/9"</strong>
<strong>labelArray(8) = "3/10"</strong>
<strong>labelArray(9) = "3/11"</strong>
<strong> </strong>
<strong>%&gt;</strong></pre>
<p>Agora, para mostrar o gráfico, dentro das tags HTML, só precisamos chamar a função BarChart passar os dados do arrays rótulo, bem como o título do gráfico de barras e os rótulos dos eixos.</p>
<p>Aqui está um exemplo:</p>
<p><strong>&lt;HTML&gt;<br />
&lt;BODY&gt;<br />
&lt;% BarChar dataArray, labelArray, &#8220;Vendas Telefone&#8221;, &#8220;Data&#8221;%&gt;<br />
&lt;/ BODY&gt;<br />
&lt;/ HTML&gt;</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/aspnet/asp-graficos-de-barras/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP &#8211; ISAPI REWRITE</title>
		<link>http://www.mxstudio.com.br/marketingdigital/usabilidade/asp-isapi-rewrite-2/</link>
		<comments>http://www.mxstudio.com.br/marketingdigital/usabilidade/asp-isapi-rewrite-2/#comments</comments>
		<pubDate>Sun, 24 Apr 2011 14:00:24 +0000</pubDate>
		<dc:creator>X@nBuRzUm</dc:creator>
				<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Usabilidade]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/marketingdigital/usabilidade/asp-isapi-rewrite-2/</guid>
		<description><![CDATA[ISAPI REWRITE é um mecanismo de reescrita que modifica a aparência de uma URL da web ,cria regras e extensões que são executadas antes de um servidor web mostrar o conteúdo solicitado por um usuário. São controladas por eventos do servidor não por requisições do cliente. Aqui algumas ótimas referencias de estudo sobre o assunto, [...]]]></description>
			<content:encoded><![CDATA[<p>ISAPI REWRITE é um mecanismo de reescrita que modifica a aparência de uma URL da web ,cria regras e extensões que são executadas antes de um servidor web mostrar o conteúdo solicitado por um usuário. São controladas por eventos do servidor não por requisições do cliente. Aqui algumas ótimas referencias de estudo sobre o assunto, <a title="http://www.isapirewrite.com/" href="http://www.isapirewrite.com/" target="_blank">http://www.isapirewrite.com/</a>, <a title="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html" href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html" target="_blank">http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html</a>.</p>
<p>Podemos por exemplo, mudar uma URL assim:</p>
<p>http://exemplo.com.br/teste/index.asp?titulo= titulo_pagina</p>
<p>Para:</p>
<pre>http:// exemplo.com.br/ teste / titulo_pagina

Um Fórum pode ter uma URL que codifica as datas de cada entrada:</pre>
<p><a href="http://www.site.com.br/Forum/Posts.asp?Dia=11&amp;Mes=04&amp;Ano=2011">http://www.site.com.br/Forum/Posts.asp?Dia=11&amp;Mes=04&amp;Ano=2011</a><br />
Ela pode ser alterada como esta:</p>
<p>http://www. site.com.br/Forum /11/04/2011/</p>
<p>que também permite ao usuário alterar a URL para ver todos os lançamentos disponíveis em abril, basta remover a codificação de texto no dia &#8217;11 &#8216;, como se a navegação fosse &#8220;para cima&#8221; de um diretório:</p>
<p>http://www. site.com.br/Forum/04/2011/</p>
<h2>Podemos também utilizar para proteção de hotlink, no seu arquivo <strong>httpd.ini</strong> adicione essas linhas:</h2>
<p>#<strong> </strong>proteção<strong> </strong>hotlink<br />
RewriteCond Host: (.+)<br />
RewriteCond Referer: (?!http://1.*).*<br />
RewriteRule .*.(?:gif|jpg|png) /block.gif [I,O]</p>
<p>Para esta expressão protegemos todos os formatos de arquivos com extensão <strong>gif, jpg </strong>e <strong>png</strong>. Você pode proteger outros formatos adicionando-os na última linha do código.</p>
<p><strong>Instalando</strong></p>
<p>Para a instalação necessitamos ter controle total de um servidor local ou próprio se a instalação for em um servidor compartilhado, utilize o painel de controle, geralmente por um botão de comando ativar/desativar, ou então por uma solicitação no helpdesk.</p>
<h2>Criando regras para as urls amigáveis.</h2>
<p>Vamos criar regras básicas, para facilitar o entendimento e absorção do material e neste caso, vamos criar uma regra para cada arquivo.<br />
O site que vamos utilizar como exemplo para implementar as URL’s amigáveis tem as seguintes páginas:  home.asp, empresa.asp, produtos.asp, contato.asp</p>
<p>A pagina de home é uma pagina dinâmica, que recebe até 3 parâmetros: id do produto, categoria e quantidade (em caso de paginação). Ou seja, a pagina de noticias é acessada da seguinte maneira:</p>
<p><a href="http://www.site.com.br/home.asp?categoria=15&amp;idproduto=23&amp;quantidade=3">HTTP://www.site.com.br/home.asp?categoria=15&amp;idproduto=23&amp;quantidade=3</a></p>
<p>Logo, a regra deverá ser:</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td><code>RewriteRule     ^/</code><code>preco</code><code>/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)-([0-9]+),([0-9]+),([0-9]+)/?(.html)?$    /</code><code>home</code><code>.asp?</code> categoria   <code>=$3&amp;id</code><code>produto</code><code>=$4&amp;</code><code>quantidade</code><code>=$5   [I,L]</code></td>
</tr>
</tbody>
</table>
<p>Esta é regra a conversão do link acima, que retornará o seguinte endereço:</p>
<p>HTTP://www.site.com.br/home/informatica/mouse-otico-15,23,3.html</p>
<p>Para as demais paginas, que não recebem parâmetros as regras ficarão mais simples, veja:</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td><code>RewriteRule    ^/default/?([a-zA-Z0-9_-]+)?(.html)?$ /default.asp [I,L]</code></td>
</tr>
<tr>
<td colspan="2"><code>RewriteRule    ^/quemsomos/?([a-zA-Z0-9_-]+)?(.html)?$ /</code><code>empresa</code><code>.asp   [I,L]</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td colspan="2"><code>RewriteRule    ^/servicos/?([a-zA-Z0-9_-]+)?(.html)?$ /</code><code>produtos</code><code>.asp   [I,L]</code></td>
</tr>
<tr>
<td><code>RewriteRule    ^/contato/?([a-zA-Z0-9_-]+)?(.html)?$ /contato.asp [I,L]</code></td>
</tr>
</tbody>
</table>
<h2>Modificando os links internos</h2>
<p>Depois que as regras foram mapeadas e concluídas, e todas paginas já estão funcionando com a utilização do ISAPI REWRITE, chega a hora então e apontar os links internos do site para a novo formato do link. Vamos efetuar uma busca no site por todas as ocorrências da tag <em>“&lt;a&gt;…&lt;/a&gt;”</em>. Localize e abra todos os arquivos que contenha a sintax <em>“&lt;a href=</em>”.</p>
<p>Com os links já localizados, faça a modificação do código tomado como exemplo. Troque:</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td><code>&lt;a   href="</code><code>home</code><code>.asp?</code><code>c=15&amp;</code><code>Categoria=23&amp;</code><code>quantidade</code><code>=3"&gt;Titulo   Notícia&lt;/a&gt;</code></td>
</tr>
</tbody>
</table>
<p>Por:</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td><code>&lt;a    href="&lt;%=URLamigavel("</code><code>home</code><code>.asp?</code><code>v</code><code>=15&amp;idCategoria=23&amp;</code><code> quantidade </code><code>=3","nome    da Categoria","Titulo Noticia")%&gt;"&gt;Titulo   Notícia&lt;/a&gt;</code></td>
</tr>
</tbody>
</table>
<p>Para que o site permaneça funcionando, basta criar uma função que retorne o mesmo valor. Assim também é possível manter o site funcionando caso ocorre algum problema com o servidor ou com a própria aplicação.</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td colspan="2"><code>Function</code> <code>URLamigavel(param)</code></td>
</tr>
<tr>
<td><code>URLamigavel   = param</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td><code>End</code> <code>Function</code></td>
</tr>
</tbody>
</table>
<h2>Função para converter url amigável</h2>
<p>Precisaremos então de uma função que converta os links atuais, para os novos formatos de links. Na sua biblioteca de funções cria as seguinte funções:</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code>&lt;pre&gt;Function</code> <code>urlAmigavel(pag,   ByVal</code> <code>cat, ByVal</code> <code>tit)</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code> </code><code>dim   URL, arquivo, parametros, sField, sValue, valor</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> URL = "</code><code><a href="http://www.site.com.br/">http://www.site.com.br/</a></code><code>"</code></td>
</tr>
<tr>
<td></td>
<td><code> If</code> <code>InStr(pag,   ".asp"</code> <code>)   &gt; 0 Then</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> arquivo   = Left( pag, ( InStr(pag, ".asp"</code> <code>) -1)    )</code></td>
</tr>
<tr>
<td></td>
<td><code> If</code> <code>InStr(pag,   "?"</code> <code>)   Then</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> parametros = Split( Right( pag , Len(pag)   -  InStr(pag, "?"</code> <code>)   ) , "&amp;")</code></td>
</tr>
<tr>
<td></td>
<td><code> For</code> <code>j   = 0 To</code> <code>UBound(   parametros )</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> sField   = left ( parametros(j) , InStr( parametros(j) , "=") -1 )</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code> sValue   = Right( parametros(j) , Len(parametros(j)) -  InStr( parametros(j) ,   "=") )</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> if valor = ""</code> <code>Then</code> <code>valor =   sValue Else</code> <code>valor   = valor &amp;","&amp; sValue End</code> <code>If</code></td>
</tr>
<tr>
<td></td>
<td><code> </code><code>Next</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> End</code> <code>if</code></td>
</tr>
<tr>
<td></td>
<td><code> End</code> <code>if</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> If</code> <code>tit   &lt;&gt; ""</code> <code>then</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code> tit =   "/"&amp; FormataTitulo( tit )</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> If</code> <code>cat   &lt;&gt; ""</code> <code>then</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code> cat =   "/"&amp; FormataTitulo( cat )</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> End</code> <code>if</code></td>
</tr>
<tr>
<td></td>
<td><code> Else</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> tit =   "/"</code></td>
</tr>
<tr>
<td></td>
<td><code> End</code> <code>if</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> If</code> <code>valor   &lt;&gt; ""</code> <code>Then</code> <code>valor =   "-"</code> <code>&amp;   valor&amp;".html"</code> <code>End</code> <code>If</code></td>
</tr>
<tr>
<td></td>
<td><code> </code><code>urlAmigavel   = URL &amp; arquivo &amp; cat &amp; tit &amp; valor</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code>End</code> <code>Function</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code>'---------------------------------------------------------------</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code>Function</code> <code>ereg_replace(ByVal</code> <code>ereg_vetor,   ByVal</code> <code>repl, ByVal</code> <code>valor)</code></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code>&lt;pre&gt; ereg_vetorV = Split(ereg_vetor,   "-")</code></td>
</tr>
<tr>
<td></td>
<td><code> If</code> <code>ubound(ereg_vetorV)   &gt; 0 Then</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> charName     = Split(ereg_vetorV(0),"|")</code></td>
</tr>
<tr>
<td></td>
<td><code> For</code> <code>i_ereg   = 0 To</code> <code>UBound(charName)</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> valor   = Replace(valor, charName(i_ereg), repl)</code></td>
</tr>
<tr>
<td></td>
<td><code> Next</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> If</code> <code>UBound(ereg_vetorV)   &gt;= 1 then</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code> </code><code>charID       = Split(ereg_vetorV(1),"|")</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> If</code> <code>Join(charID)   &lt;&gt; ""</code> <code>then</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code> For</code> <code>i_ereg   = 0 To</code> <code>UBound(charID)</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> valor   = Replace(valor, "&amp;#"</code> <code>&amp;   charID(i_ereg) &amp; ";", repl)</code></td>
</tr>
<tr>
<td></td>
<td><code> Next</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> End</code> <code>if</code></td>
</tr>
<tr>
<td></td>
<td><code> End</code> <code>if</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> End</code> <code>If</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code> ereg_replace   = valor</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code>End</code> <code>Function</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code>Function</code> <code>FormataTitulo(   ByVal</code> <code>s )</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> s =   Trim(s)</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code> s =   LCase(s)</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> s =   ereg_replace("á|à|â|ã|ä|ª-@|224|225|226|227|228|229","a",s)</code></td>
</tr>
<tr>
<td></td>
<td><code> s =   ereg_replace("é|è|ê|ë-232|233|234|235","e",s)</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> s =   ereg_replace("í|ì|î|ï-236|237|238|239","i",s)</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code> </code><code>s   =   ereg_replace("ó|ò|ô|õ|º|ö-242|243|244|245|246|186","o",s)</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> s =   ereg_replace("ú|ù|û|ü-249|250|251|252","u",s)</code></td>
</tr>
<tr>
<td></td>
<td><code> s =   ereg_replace("ç-231","c",s)</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> s =   ereg_replace("ñ","n",s)</code></td>
</tr>
<tr>
<td></td>
<td><code> s =   replace(s , "-", "")</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> s =   replace(s , "&amp;", "")</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code> s =   replace(s , " ", "-")</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> s =   replace(s , ",", "")</code></td>
</tr>
<tr>
<td></td>
<td><code> s =   replace(s , "?", "")</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> s =   replace(s , ":", "")</code></td>
</tr>
<tr>
<td></td>
<td><code> s =   replace(s , "/", "")</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> s =   replace(s , ".", "")</code></td>
</tr>
<tr>
<td></td>
<td><code> s =   replace(s , "'", "")</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code> s =   replace(s , "´", "")</code></td>
</tr>
<tr>
<td></td>
<td colspan="2"><code> s =   replace(s , "&amp;quot;", "")</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> s =   replace(s , "$", "s")</code></td>
</tr>
<tr>
<td></td>
<td><code> s =   replace(s , "!", "")</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td colspan="2"><code> s =   replace(s , "%", "")</code></td>
</tr>
<tr>
<td></td>
<td><code> FormataTitulo   = s</code></td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td></td>
<td><code>End</code> <code>Function&lt;/pre&gt;</code></td>
</tr>
</tbody>
</table>
<p><span style="text-decoration: underline"> </span></p>
<p>Abaixo alguns metacaracteres, com o seu significado entre parêntesis a seguir:</p>
<p>•	. (qualquer caractere)<br />
•	* (zero ou mais precedentes)<br />
•	+ (uma ou mais precedentes)<br />
•	{} (mínimo ao máximo quantificador)<br />
•	? (modificador ungreedy)<br />
•	! (no início da string significa &#8220;padrão negativo &#8220;)<br />
•	^ (início da seqüência de caracteres, ou &#8220;negativo&#8221; se no início de uma série)<br />
•	$ (final da string)<br />
•	[] (corresponde a nenhum conteúdo)<br />
•	- (intervalo se usado entre colchetes)<br />
•	() (grupo, de volta referenciado)<br />
•	| (alternativa, ou)<br />
•	\ (o próprio caractere de escape)</p>
<p>Usando expressões regulares, é possível pesquisar por todos os tipos de padrões de URLs e reescrevê-los quando eles coincidem. Hora para um outro exemplo &#8211; que queríamos antes de ser capaz de identificar essa URL e reescrevê-lo:</p>
<p>http://www.site.com.br/ araras/brasil-azul/</p>
<p>Vamos fazer o servidor interpretar isso como o seguinte, mas para todos os produtos:</p>
<p>http://www. site.com.br /produto_por_nome.asp?produto_nome= brasil-azul</p>
<p>E podemos fazer isso de forma relativamente simples, com a seguinte regra:</p>
<p>RewriteRule ^ araras/([A-Za-z0-9-]+)/?$      produto_por_nome.asp?produto_nome =$1                  [NC,L]               # Processo araras</p>
<p>Com essa regra, qualquer URL que começa com &#8221; araras &#8220;, seguido por uma barra (araras /), então um ou mais (+) em qualquer combinação de letras, números e hífens ([A-Za-z0-9]) ( Observe o hífen no final da seleção de caracteres entre colchetes &#8211; que deve ser adicionado lá para ser tratado, literalmente, ao invés de como um separador de intervalo),nome do produto de referência entre parênteses, com $1 na substituição.</p>
<p>Podemos fazer ainda mais genérica, se queremos, de modo que não importa o diretório de um produto, assim:</p>
<p>RewriteRule ^ [A-Za-z-]+/([ produto_por_nome.asp A-Za-z0-9-]+)/?$           ? produto_nome = $ 1               [NC, L]                 # Processa todos os produtos</p>
<p>Como você pode ver, temos substituído &#8221; araras&#8221; com um padrão que combina letras e hífens. Essa regra será para diretório araras ou qualquer outro diretório cujo nome é composto de pelo menos uma ou mais letras e hífens.</p>
<p>Flags</p>
<p>Flags são adicionados ao final de uma regra como interpretar e lidar com a regra. Elas podem ser usadas para tratar a regra como case-sensitive, para parar regras de processamento, e os  one matches atual, ou uma variedade de outras opções. Eles são separados por vírgula, e entre colchetes. Aqui está uma lista das Flags, com seus significados (esta informação é incluído no cheat sheet).</p>
<p>•	C (acorrentado com a regra seguinte)<br />
•	CO=cookie (set cookie especificado)<br />
•	E=var:value (var conjunto variável de ambiente para o valor)<br />
•	F (forbidden [proibido] &#8211; envia um cabeçalho de 403 para o usuário)<br />
•	G (gone [se foi] &#8211; não existe mais)<br />
•	H=handler (conjunto manipulador)<br />
•	L (last &#8211; deixar de regras de processamento)<br />
•	N (next &#8211; continua regras de processamento)<br />
•	NC (case insensitive)<br />
•	NE (n ão escapar caracteres especiais na URL de saída)<br />
•	NS (ignorar esta regra se o pedido é um SUBPEDIDO)<br />
•	P (proxy &#8211; ou seja, o Apache deve pegar o conteúdo remoto especificado na seção de substituição e devolvê-lo)<br />
•	PT (passar &#8211; use quando URLs com os manipuladores de processamento adicional, por exemplo, mod_alias)<br />
•	R (temporária redirecionar para nova URL)<br />
•	R=301 (redirecionamento permanente para nova URL)<br />
•	QSA (query string de pedido de URL substituído)<br />
•	S=x (ignorar as regras ao lado x)<br />
•	T=mime-type (força especificada tipo mime)</p>
<p>Exceções e casos especiais</p>
<p>As condições podem ser testadas em algumas maneiras diferentes ,elas não precisam ser tratadas como padrões de expressões regulares, embora esta seja a maneira mais comum de serem usadas. Aqui estão as várias maneiras reescrever conditons pode ser processado:</p>
<p>•Pattern (seqüência de teste é maior do padrão)<br />
•	=Pattern (seqüência de teste é igual ao padrão)<br />
•	-d (seqüência de teste é um diretório válido)<br />
•	-f (seqüência de teste é um arquivo válido)<br />
•	-s (seqüência de teste é um arquivo válido com tamanho maior que zer)<br />
•	-l (eqüência de teste é um link simbólico)<br />
•	-F (seqüência de teste é um arquivo válido e acessível (via SUBPEDIDO))<br />
•	-U (seqüência de teste é uma URL válida, e acessíveis (via SUBPEDIDO))</p>
<p>Variáveis de Servidor</p>
<p>Variáveis do servidor são uma seleção de itens que você pode testar quando estiver a escrever reescrever condições. Isto permite-lhe aplicar as regras com base em todos os tipos de parâmetros da requisição, incluindo os identificadores navegador, URL de referência ou uma infinidade de outras seqüências. As variáveis são do seguinte formato:<br />
% {variable_name}</p>
<p>•	HTTP Headers<br />
o	HTTP_USER_AGENT<br />
o	HTTP_REFERER<br />
o	HTTP_COOKIE<br />
o	HTTP_FORWARDED<br />
o	HTTP_HOST<br />
o	HTTP_PROXY_CONNECTION<br />
o	HTTP_ACCEPT<br />
•	Variáveis Connection<br />
o	REMOTE_ADDR<br />
o	REMOTE_HOST<br />
o	REMOTE_USER<br />
o	REMOTE_IDENT<br />
o	REQUEST_METHOD<br />
o	SCRIPT_FILENAME<br />
o	PATH_INFO<br />
o	QUERY_STRING<br />
o	AUTH_TYPE<br />
•	Server Variables<br />
o	DOCUMENT_ROOT<br />
o	SERVER_ADMIN<br />
o	SERVER_NAME<br />
o	SERVER_ADDR<br />
o	SERVER_PORT<br />
o	SERVER_PROTOCOL<br />
o	SERVER_SOFTWARE<br />
•	Data e Hora<br />
o	TIME_YEAR<br />
o	TIME_MON<br />
o	TIME_DAY<br />
o	TIME_HOUR<br />
o	TIME_MIN<br />
o	TIME_SEC<br />
o	TIME_WDAY<br />
o	TIME<br />
•	Itens Especiais<br />
o	API_VERSION<br />
o	THE_REQUEST<br />
o	REQUEST_URI<br />
o	REQUEST_FILENAME<br />
o	IS_SUBREQ</p>
<p>Exemplo de regras</p>
<p>Para redirecionar um domínio antigo para um novo domínio:</p>
<p>RewriteCond %{HTTP_HOST} velho_dominio\.com [NC] RewriteRule ^(.*)$ http://www.novo_dominio.com /$1 [L,R=301]</p>
<p>Para redirecionar todas as solicitações faltando &#8220;www&#8221; (sim www):</p>
<p>RewriteCond %{HTTP_HOST} ^dominio\.com [NC] RewriteRule ^(.*)$ http://www.dominio.com/$1 [L,R=301]</p>
<p>Para redirecionar todas as solicitações com &#8220;www&#8221; (sem www):</p>
<p>RewriteCond %{HTTP_HOST} ^www\.dominio\.com [NC] RewriteRule ^(.*)$ http:// dominio.com/$1 [L,R=301]</p>
<p>Redirecionar página antiga para a nova página:</p>
<p>RewriteRule ^old-url\.htm$ http://www.dominio.com/nova-url.htm [NC,R=301,L]</p>
<p>[size="1"][font="Garamond"]<br />
Fonte: vários sites e URL´s citadas no próprio post.[/font][/size]Abaixo alguns metacaracteres, com o seu significado entre parêntesis a seguir:</p>
<p>•	. (qualquer caractere)<br />
•	* (zero ou mais precedentes)<br />
•	+ (uma ou mais precedentes)<br />
•	{} (mínimo ao máximo quantificador)<br />
•	? (modificador ungreedy)<br />
•	! (no início da string significa &#8220;padrão negativo &#8220;)<br />
•	^ (início da seqüência de caracteres, ou &#8220;negativo&#8221; se no início de uma série)<br />
•	$ (final da string)<br />
•	[] (corresponde a nenhum conteúdo)<br />
•	- (intervalo se usado entre colchetes)<br />
•	() (grupo, de volta referenciado)<br />
•	| (alternativa, ou)<br />
•	\ (o próprio caractere de escape)</p>
<p>Usando expressões regulares, é possível pesquisar por todos os tipos de padrões de URLs e reescrevê-los quando eles coincidem. Hora para um outro exemplo &#8211; que queríamos antes de ser capaz de identificar essa URL e reescrevê-lo:</p>
<p>http://www.site.com.br/ araras/brasil-azul/</p>
<p>Vamos fazer o servidor interpretar isso como o seguinte, mas para todos os produtos:</p>
<p>http://www. site.com.br /produto_por_nome.asp?produto_nome= brasil-azul</p>
<p>E podemos fazer isso de forma relativamente simples, com a seguinte regra:</p>
<p>RewriteRule ^ araras/([A-Za-z0-9-]+)/?$<br />
produto_por_nome.asp?produto_nome =$1 [NC,L] # Processo araras</p>
<p>Com essa regra, qualquer URL que começa com &#8221; araras &#8220;, seguido por uma barra (araras /), então um ou mais (+) em qualquer combinação de letras, números e hífens ([A-Za-z0-9]) ( Observe o hífen no final da seleção de caracteres entre colchetes &#8211; que deve ser adicionado lá para ser tratado, literalmente, ao invés de como um separador de intervalo),nome do produto de referência entre parênteses, com $1 na substituição.</p>
<p>Ppodemos fazer ainda mais genérica, se queremos, de modo que não importa o diretório de um produto, assim:</p>
<p>RewriteRule ^ [A-Za-z-]+/([ produto_por_nome.asp A-Za-z0-9-]+)/?$? produto_nome = $ 1 [NC, L] # Processa todos os produtos</p>
<p>Como você pode ver, temos substituído &#8221; araras&#8221; com um padrão que combina letras e hífens. Essa regra será para diretório araras ou qualquer outro diretório cujo nome é composto de pelo menos uma ou mais letras e hífens.</p>
<p>Flags</p>
<p>Flags são adicionados ao final de uma regra como interpretar e lidar com a regra. Elas podem ser usadas para tratar a regra como case-sensitive, para parar regras de processamento, e os  one matches atual, ou uma variedade de outras opções. Eles são separados por vírgula, e entre colchetes. Aqui está uma lista das Flags, com seus significados (esta informação é incluído no cheat sheet).</p>
<p>•	C (acorrentado com a regra seguinte)<br />
•	CO=cookie (set cookie especificado)<br />
•	E=var:value (var conjunto variável de ambiente para o valor)<br />
•	F (forbidden [proibido] &#8211; envia um cabeçalho de 403 para o usuário)<br />
•	G (gone [se foi] &#8211; não existe mais)<br />
•	H=handler (conjunto manipulador)<br />
•	L (last &#8211; deixar de regras de processamento)<br />
•	N (next &#8211; continua regras de processamento)<br />
•	NC (case insensitive)<br />
•	NE (n ão escapar caracteres especiais na URL de saída)<br />
•	NS (ignorar esta regra se o pedido é um SUBPEDIDO)<br />
•	P (proxy &#8211; ou seja, o Apache deve pegar o conteúdo remoto especificado na seção de substituição e devolvê-lo)<br />
•	PT (passar &#8211; use quando URLs com os manipuladores de processamento adicional, por exemplo, mod_alias)<br />
•	R (temporária redirecionar para nova URL)<br />
•	R=301 (redirecionamento permanente para nova URL)<br />
•	QSA (query string de pedido de URL substituído)<br />
•	S=x (ignorar as regras ao lado x)<br />
•	T=mime-type (força especificada tipo mime)</p>
<p>Exceções e casos especiais</p>
<p>As condições podem ser testadas em algumas maneiras diferentes ,elas não precisam ser tratadas como padrões de expressões regulares, embora esta seja a maneira mais comum de serem usadas. Aqui estão as várias maneiras reescrever conditons pode ser processado:</p>
<p>•<br />
Pattern (seqüência de teste é maior do padrão)<br />
•	=Pattern (seqüência de teste é igual ao padrão)<br />
•	-d (seqüência de teste é um diretório válido)<br />
•	-f (seqüência de teste é um arquivo válido)<br />
•	-s (seqüência de teste é um arquivo válido com tamanho maior que zer)<br />
•	-l (eqüência de teste é um link simbólico)<br />
•	-F (seqüência de teste é um arquivo válido e acessível (via SUBPEDIDO))<br />
•	-U (seqüência de teste é uma URL válida, e acessíveis (via SUBPEDIDO))</p>
<p>Variáveis de Servidor</p>
<p>Variáveis do servidor são uma seleção de itens que você pode testar quando estiver a escrever reescrever condições. Isto permite-lhe aplicar as regras com base em todos os tipos de parâmetros da requisição, incluindo os identificadores navegador, URL de referência ou uma infinidade de outras seqüências. As variáveis são do seguinte formato:<br />
% {variable_name}</p>
<p>•	HTTP Headers<br />
o	HTTP_USER_AGENT<br />
o	HTTP_REFERER<br />
o	HTTP_COOKIE<br />
o	HTTP_FORWARDED<br />
o	HTTP_HOST<br />
o	HTTP_PROXY_CONNECTION<br />
o	HTTP_ACCEPT<br />
•	Variáveis Connection<br />
o	REMOTE_ADDR<br />
o	REMOTE_HOST<br />
o	REMOTE_USER<br />
o	REMOTE_IDENT<br />
o	REQUEST_METHOD<br />
o	SCRIPT_FILENAME<br />
o	PATH_INFO<br />
o	QUERY_STRING<br />
o	AUTH_TYPE<br />
•	Server Variables<br />
o	DOCUMENT_ROOT<br />
o	SERVER_ADMIN<br />
o	SERVER_NAME<br />
o	SERVER_ADDR<br />
o	SERVER_PORT<br />
o	SERVER_PROTOCOL<br />
o	SERVER_SOFTWARE<br />
•	Data e Hora<br />
o	TIME_YEAR<br />
o	TIME_MON<br />
o	TIME_DAY<br />
o	TIME_HOUR<br />
o	TIME_MIN<br />
o	TIME_SEC<br />
o	TIME_WDAY<br />
o	TIME<br />
•	Itens Especiais<br />
o	API_VERSION<br />
o	THE_REQUEST<br />
o	REQUEST_URI<br />
o	REQUEST_FILENAME<br />
o	IS_SUBREQ</p>
<p>Exemplo de regras</p>
<p>Para redirecionar um domínio antigo para um novo domínio:</p>
<p>RewriteCond %{HTTP_HOST} velho_dominio\.com [NC] RewriteRule ^(.*)$ http://www.novo_dominio.com /$1 [L,R=301]</p>
<p>Para redirecionar todas as solicitações faltando &#8220;www&#8221; (sim www):</p>
<p>RewriteCond %{HTTP_HOST} ^dominio\.com [NC] RewriteRule ^(.*)$ http://www.dominio.com/$1 [L,R=301]</p>
<p>Para redirecionar todas as solicitações com &#8220;www&#8221; (sem www):</p>
<p>RewriteCond %{HTTP_HOST} ^www\.dominio\.com [NC] RewriteRule ^(.*)$ http:// dominio.com/$1 [L,R=301]</p>
<p>Redirecionar página antiga para a nova página:</p>
<p>RewriteRule ^old-url\.htm$ http://www.dominio.com/nova-url.htm [NC,R=301,L]</p>
<p>Para ter os usuários do site assim www.meusite.com.br/usuario, sem o default.asp?usr=NOME, só pelo /usuário:</p>
<p>RewriteEngine on<br />
#<code> </code>Internamente adicionar extensões ao pedido<br />
RewriteCond %{REQUEST_FILENAME}.asp -f<br />
RewriteRule (.*) $1.asp</p>
<p>Fonte: vários sites e URL´s citadas no próprio post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/marketingdigital/usabilidade/asp-isapi-rewrite-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ASP &#8211; Exibir, Ordenar e Consultar Bancos de Dados Dinamicamente</title>
		<link>http://www.mxstudio.com.br/tecnologia/geral/asp-exibir-ordenar-e-consultar-bancos-de-dados-dinamicamente/</link>
		<comments>http://www.mxstudio.com.br/tecnologia/geral/asp-exibir-ordenar-e-consultar-bancos-de-dados-dinamicamente/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 16:02:56 +0000</pubDate>
		<dc:creator>X@nBuRzUm</dc:creator>
				<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Dreamweaver]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=5667</guid>
		<description><![CDATA[Uma solução simples para exibir dados e ser capaz de ordenar e consultá-lo. Consiste no conceito fundamental da relação pai / filho em bancos de dados relacionais, sem entrar em conceitos de normalização e da teoria por trás de bancos de dados relacionais. Para este trabalho, você vai precisar do IIS (Internet Information Server), VisualStudio [...]]]></description>
			<content:encoded><![CDATA[<p>Uma solução simples para exibir dados e ser capaz de ordenar e consultá-lo. Consiste no conceito fundamental da relação pai / filho em bancos de dados relacionais, sem entrar em conceitos de normalização e da teoria por trás de bancos de dados relacionais. Para este trabalho, você vai precisar do IIS (Internet Information Server), VisualStudio ou Dreamweaver e Microsoft Access, algum conhecimento sobre HTML, ASP e VBScripting. Você pode usar o Internet Explorer, Google Chrome ou Firefox para visualizar as páginas. No servidor Web IIS crie uma pasta e vamos chamá-lo masterdetail. Crie uma pasta chamada FPDB e copie o banco de dados Northwind na pasta. Criar um DSN (Data Source Name) para o banco de dados Northwind e também chamá-lo de banco1. Na pasta masterdetail criar 2 páginas ASP. Salve a página principal de MASTER.ASP e a segunda página como DETAIL.ASP. Agora vamos escrever o código para a página MASTER.ASP. Lembre-se MASTER.ASP é a nossa página principal e queremos ser capaz de classificar e pesquisar os dados também. Figura 1, dá os detalhes de como esta página vai ficar depois que a codificação é concluída.</p>
<p><img src="http://sintchospir.com.br/imagens/1.jpg" alt="Figura 1: Master. Asp Exibindo tabela Pedidos com classificação e pesquisa" /></p>
<p>Agora, quando o usuário clica no campo CódigoDoPedido para o cliente Xan, a página DETAIL.ASP irá mostrar todos os registros relacionados.Conforme Figura 2.</p>
<p><img src="http://sintchospir.com.br/imagens/2.jpg" alt="Figura 2: Detalhe. Asp Exibindo Detalhes sobre o cliente Xan" /></p>
<p>Se o usuário clica em qualquer botão intitulado como A-Z, Z-A, esta ação irá classificar nesse campo específico. Por exemplo, se o usuário quer ver todos os pedidos (orders) com base nas datas em ordem decrescente, ele ou ela vai clicar no botão Z-A no campo data do pedido (Order Date). Isso vai resolver todos os pedidos em ordem decrescente com base em ordem de data e o usuário será capaz de ver as últimas encomendas. O usuário poderá pesquisar o nome embarcador, que deve ser auto-explicativo.</p>
<p>Usando uma estrutura de dados, com duas tabelas, mostrada abaixo:</p>
<p>Tabela1<br />
<img src="http://sintchospir.com.br/imagens/tab1.jpg" alt="Tabela Orders" /></p>
<p>Tabela2<br />
<img src="http://sintchospir.com.br/imagens/tab2.jpg" alt="Tabela Order_Details" /></p>
<p>Vamos iniciar com o arquivo Master.Asp. Vamos dividir o código em três partes. Na parte 1 vamos declarar todas as variáveis, fazer uma conexão para o arquivo Northwind.mdb usando o DSN Northwind criado anteriormente, você pode mudar o tipo da conexão, usando OLEDB diretamente.</p>
<p>master.asp</p>
<h2>Northwind Orders</h2>
<p>Por favor, clique em OrderID para obter mais detalhes ou Ordem.<br />
Pesquisar no nome do remetente.</p>
<p>&#8216;&#8211;Declara todas as variaveis<br />
Dim cn, rsOrders, rsEmployees<br />
Dim strConnect, strSQL, intCounter<br />
Dim strFieldValue, strFieldName<br />
Dim strHREF, strEmpFName, strEmpLastName<br />
Dim intEmpID<br />
Dim SearchText</p>
<p>&#8216;&#8211;Entrada para pesquisar o nome<br />
SearchText = Request.Form(&#8220;txtSearchText&#8221;)</p>
<p>&#8216;&#8211;Criar objetos<br />
Set cn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)</p>
<p>&#8216;&#8211;nome da fonte que você criou para o banco de dados<br />
strConnect = &#8220;DSN=Northwind&#8221;</p>
<p>Call cn.Open(strConnect)</p>
<p>&#8216;&#8211;Criar Recordsets<br />
Set rsOrders = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)</p>
<p>strSQL = &#8220;SELECT OrderID, CustomerID, OrderDate, ShipName FROM orders ORDER BY orderDate DESC;&#8221;</p>
<p>&#8216;&#8211; Ordenar SQL Data<br />
If Request.Form(&#8220;btnsortdate&#8221;) = &#8220;A-Z&#8221; Then<br />
strSQL = &#8220;SELECT OrderID, CustomerID, OrderDate, ShipName FROM orders ORDER BY OrderDate ASC;&#8221;<br />
end if<br />
If Request.Form(&#8220;btnsortdate&#8221;) = &#8220;Z-A&#8221; Then<br />
strSQL = &#8220;SELECT OrderID, CustomerID, OrderDate, ShipName FROM orders ORDER BY OrderDate DESC;&#8221;<br />
end if</p>
<p>&#8216;&#8211; Ordenar OrderID SQL<br />
If Request.Form(&#8220;btnsortOID&#8221;) = &#8220;A-Z&#8221; Then<br />
strSQL = &#8220;SELECT OrderID, CustomerID, OrderDate, ShipName FROM orders ORDER BY OrderID ASC;&#8221;<br />
end if<br />
If Request.Form(&#8220;btnsortdate&#8221;) = &#8220;Z-A&#8221; Then<br />
strSQL = &#8220;SELECT OrderID, CustomerID, OrderDate, ShipName  FROM orders ORDER BY OrderID DESC;&#8221;<br />
end if</p>
<p>&#8216;&#8211; Ordenar CustomerID SQL<br />
If Request.Form(&#8220;btnsortUID&#8221;) = &#8220;A-Z&#8221; Then<br />
strSQL = &#8220;SELECT OrderID, CustomerID, OrderDate, ShipName FROM orders ORDER BY CustomerID ASC;&#8221;<br />
end if<br />
If Request.Form(&#8220;btnsortUID&#8221;) = &#8220;Z-A&#8221; Then<br />
strSQL = &#8220;SELECT OrderID, CustomerID, OrderDate, ShipName FROM orders ORDER BY CustomerID DESC;&#8221;<br />
end if</p>
<p>&#8216;&#8211; Ordenar ShipName SQL<br />
If Request.Form(&#8220;btnsortFN&#8221;) = &#8220;A-Z&#8221; Then<br />
strSQL = &#8220;SELECT OrderID, CustomerID, OrderDate, ShipName FROM orders ORDER BY ShipName ASC;&#8221;<br />
end if<br />
If Request.Form(&#8220;btnsortFN&#8221;) = &#8220;Z-A&#8221; Then<br />
strSQL = &#8220;SELECT OrderID, CustomerID, OrderDate, ShipName FROM orders ORDER BY ShipName DESC;&#8221;<br />
end if</p>
<p>&#8216;&#8211; Search SQL<br />
If Request.Form(&#8220;btnSearch&#8221;) = &#8220;Search&#8221; Then<br />
strSQL = &#8220;SELECT OrderID, CustomerID, OrderDate, ShipName FROM [Orders]&#8221; &amp; _<br />
&#8220;WHERE ShipName LIKE &#8216;%&#8221; &amp; SearchText &amp; &#8220;%&#8217;;&#8221;</p>
<p>End If</p>
<p>&#8216;&#8211;Abre Orders recordset<br />
Call rsOrders.Open(strSQL, cn, 0, 1)</p>
<p>&#8216;&#8211;Escreva os dados em tabelas através da apresentação dos formulários<br />
Call Response.Write(&#8221;</p>
<form>&#8220;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221; &amp; &#8220;&#8221;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)</p>
<p>&#8216;&#8211;Escreva títulos personalizados<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)</p>
<p>&#8216;&#8211;Botões Ascendente e Descendente<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)</p>
<p>While(rsOrders.EOF = False)</p>
<p>Call Response.Write(&#8221;</p>
<p>&#8220;)</p>
<p>for intCounter = 0 to rsOrders.Fields.Count &#8211; 1<br />
&#8216;Escreva os dados de campo.<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
next</p>
<p>Call Response.Write(&#8221;</p>
<p>&#8220;)</p>
<p>rsOrders.MoveNext</p>
<p>Wend</p>
<p>Response.Write(&#8221;</p>
<table border="3" cellspacing="2" cellpadding="2">
<tbody>
<tr>
<td width="0" bgcolor="#800000">&#8221; &amp; &#8220;<strong><em><span style="color: #ffffff;">Orders</span></em></strong><span style="color: #ffffff;">&#8221; &amp; &#8220;</span></td>
</tr>
<tr>
<th>&#8221; &amp; &#8220;<strong>Order ID</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Customer ID</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Order Date</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Shipper Name</strong>&#8221; &amp; &#8220;</th>
</tr>
<tr>
<td align="center">&#8221; &amp; &#8220;&#8221; &amp; &#8220;&#8221; &amp;&#8221;</td>
<td align="center">&#8221; &amp; &#8220;&#8221; &amp; &#8220;&#8221; &amp;&#8221;</td>
<td align="center">&#8221; &amp; &#8220;&#8221; &amp; &#8220;&#8221; &amp;&#8221;</td>
<td align="center">&#8221; &amp; &#8220;&#8221; &amp; &#8220;&#8221; &amp;&#8221;</td>
</tr>
<tr>
<td width="10%">&#8220;)<br />
strFieldName = rsOrders.Fields(intCounter).Name<br />
strFieldValue = rsOrders.Fields(intCounter).Value</p>
<p>If(strFieldName = &#8220;OrderID&#8221;)Then<br />
&#8216;&#8211;Este é o campo chave(Master).<br />
&#8216;&#8211;Nós queremos fazer neste domínio um link para o campo de detalhes<br />
&#8216;&#8211;vamos criar uma URL e acrescentar a chave para a URL, a fim<br />
&#8216;&#8211;para recuperá-lo na página de detalhes utilizando a<br />
&#8216;&#8211;Request.QueryString().<br />
&#8216;&#8211;Por favor, coloque o seu endereço de hospedagem após o http<br />
&#8216;strHREF = &#8220;<a>&#8221; &amp; strFieldValue &amp; &#8220;</a>&#8221;</p>
<p>strHREF = &#8220;<a>&#8221; &amp; strFieldValue &amp; &#8220;</a>&#8221;</p>
<p>Call Response.Write(strHREF)</p>
<p>ElseIf(IsNull(strFieldValue))Then</p>
<p>&#8216;&#8211;campo está vazio, basta escrever para fora um espaço de HTML.<br />
call Response.Write(&#8220; &#8221;)<br />
Else<br />
Call Response.Write(strFieldValue)<br />
End If</p>
<p>Call Response.Write(&#8220;</td>
</tr>
<tr></tr>
</tbody>
</table>
<p>&#8220;)<br />
Response.Write(&#8221;</p>
</form>
<p>&#8220;)<br />
Set rsOrders = Nothing<br />
Set cn = Nothing<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)</p>
<p>detail.asp</p>
<h2>Northwind Order Details</h2>
<p>Por favor, pressione o botão Voltar do navegador para voltar ao Award Express<a href="master.asp"> Pedidos<br />
</a></p>
<p>&#8216;&#8211;Declara todas as variaveis<br />
Dim cn, rs, drs<br />
Dim strConnect, strSQL, intCounter, strSQL2<br />
Dim intOrderID</p>
<p>intOrderID = CInt(Request.QueryString(&#8220;strID&#8221;))</p>
<p>Set cn = Server.CreateObject(&#8220;ADODB.Connection&#8221;)<br />
strConnect = &#8220;DSN=Northwind&#8221;</p>
<p>Call cn.Open(strConnect)</p>
<p>&#8216;&#8211;Criar vários conjuntos de registros<br />
Set rs = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)<br />
set rs2 = Server.CreateObject(&#8220;ADODB.Recordset&#8221;)</p>
<p>&#8216;&#8211; SQL<br />
strSQL = &#8221; SELECT * FROM [Orders] O WHERE O.OrderID=&#8221; &amp; intOrderID<br />
strSQL2 = &#8220;SELECT * FROM [Order Details] D WHERE D.OrderID =&#8221; &amp; intOrderID<br />
Call rs.Open(strSQL, strConnect, 0, 1)<br />
Call rs2.Open(strSQL2, strConnect, 0, 1)</p>
<p>DO WHILE NOT rs.EOF</p>
<p>Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)</p>
<p>&#8216;&#8211;títulos personalizados<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)</p>
<p>Call Response.Write(&#8221;</p>
<p>&#8220;)</p>
<p>&#8216;&#8211;Escreva os dados nos campos<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<table border="3" cellspacing="2" cellpadding="2">
<tbody>
<tr>
<td width="0" bgcolor="#800000">&#8221; &amp; &#8220;<strong><em><span style="color: #ffffff;">Pedido</span></em></strong><span style="color: #ffffff;">&#8221; &amp; &#8220;</span></td>
</tr>
<tr>
<th>&#8221; &amp; &#8220;<strong>Order ID</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Customer ID</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Order Date</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Required Date</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Shipped Date</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Ship Via</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Freight</strong>&#8221;  &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Address</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>City</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Region</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Postal Code</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Country</strong>&#8221; &amp; &#8220;</th>
</tr>
<tr>
<td>&#8221; &amp; rs.Fields(&#8220;OrderID&#8221;) &amp; &#8220;</td>
<td>&#8221; &amp; rs.Fields(&#8220;CustomerID&#8221;) &amp; &#8220;</td>
<td>&#8221; &amp; rs.Fields(&#8220;OrderDate&#8221;) &amp; &#8220;</td>
<td>&#8221; &amp; rs.Fields(&#8220;RequiredDate&#8221;) &amp; &#8220;</td>
<td>&#8221; &amp; rs.Fields(&#8220;ShippedDate&#8221;) &amp; &#8220;</td>
<td>&#8221; &amp; rs.Fields(&#8220;ShipVia&#8221;) &amp; &#8220;</td>
<td>&#8221; &amp; rs.Fields(&#8220;Freight&#8221;) &amp; &#8220;</td>
<td width="25%">&#8221; &amp; rs.Fields(&#8220;ShipAddress&#8221;) &amp; &#8220;</td>
<td>&#8221; &amp; rs.Fields(&#8220;ShipCity&#8221;) &amp; &#8220;</td>
<td>&#8221; &amp; rs.Fields(&#8220;ShipRegion&#8221;) &amp; &#8220;</td>
<td width="15%">&#8221; &amp; rs.Fields(&#8220;ShipPostalCode&#8221;) &amp; &#8220;</td>
<td width="15%">&#8221; &amp; rs.Fields(&#8220;ShipCountry&#8221;) &amp; &#8220;</td>
</tr>
</tbody>
</table>
<p>&#8220;)</p>
<p>rs.Movenext<br />
Loop</p>
<p>Response.Write &#8220; &#8221;<br />
Response.Write &#8220; &#8221;<br />
&#8216;&#8211;Set drs = rs(&#8220;Order_Details&#8221;).value<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)</p>
<p>&#8216;&#8211;títulos personalizados<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8220;&#8221;)</p>
<p>While(rs2.EOF=False)<br />
&#8216;&#8211;Escreva todos os dados disponíveis<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8220;&#8221;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)<br />
Call Response.Write(&#8221;</p>
<p>&#8220;)</p>
<p>rs2.MoveNext</p>
<p>WEND<br />
Call Response.Write(&#8221;</p>
<table border="3" cellspacing="2" cellpadding="2">
<tbody>
<tr>
<td width="0" bgcolor="#800000">&#8221; &amp; &#8220;<strong><em><span style="color: #ffffff;">Order Details</span></em></strong><span style="color: #ffffff;">&#8221; &amp; &#8220;</span></td>
</tr>
<tr>
<th>&#8221; &amp; &#8220;<strong>Product ID</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Quantity</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Unit Price</strong>&#8221; &amp; &#8220;</th>
<th>&#8221; &amp; &#8220;<strong>Discount</strong>&#8221; &amp; &#8220;</th>
</tr>
<tr>
<td>&#8221; &amp; rs2.Fields(&#8220;ProductID&#8221;) &amp; &#8220;</td>
<td>&#8221; &amp; rs2.Fields(&#8220;Quantity&#8221;) &amp; &#8220;</td>
<td>&#8221; &amp; rs2.Fields(&#8220;UnitPrice&#8221;) &amp; &#8220;</td>
<td>&#8221; &amp; rs2.Fields(&#8220;Discount&#8221;) &amp; &#8220;</td>
</tr>
</tbody>
</table>
<p>&#8220;)</p>
<p>Set rs2 = Nothing<br />
Set rs = Nothing<br />
Set cn = Nothing</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/tecnologia/geral/asp-exibir-ordenar-e-consultar-bancos-de-dados-dinamicamente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP &#8211; Login com MD5</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/aspnet/asp-login-com-md5/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/aspnet/asp-login-com-md5/#comments</comments>
		<pubDate>Sat, 25 Sep 2010 22:37:55 +0000</pubDate>
		<dc:creator>X@nBuRzUm</dc:creator>
				<category><![CDATA[ASP.net]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=5281</guid>
		<description><![CDATA[Autenticação de Usuário Este método pode ser usado para autenticar usuários, permitindo-lhes escrevendo seu endereço de e-mail e senha. Este método usa algoritmo MD5 para enviar a senha criptografada. Muitos sites usam a autenticação básica com os arquivos. htaccess ou formulários web simples, combinadas com cookies para autenticar seus usuários. Apenas alguns deles usam um [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste">Autenticação de Usuário</div>
<div></div>
<div id="_mcePaste">Este método pode ser usado para autenticar usuários, permitindo-lhes escrevendo seu endereço de e-mail e senha. Este método usa algoritmo MD5 para enviar a senha criptografada.</div>
<div></div>
<div id="_mcePaste">Muitos sites usam a autenticação básica com os arquivos. htaccess ou formulários web simples, combinadas com cookies para autenticar seus usuários. Apenas alguns deles usam um servidor HTTPS para enviar os dados.Um usuário mal intensionado pode dar um sniffing de pacotes na rede, e facilmente capturar as senhas, e usá-lo para obter acesso às contas. Vamos criar um &#8220;hash&#8221; da senha antes de enviá-lo.</div>
<div id="_mcePaste">Um seed é incluído na página onde o usuário está sendo solicitado para sua senha. Uma cópia seed é armazenada no objeto de sessão no lado do servidor. Quando o usuário envia a página, um javascript calcula o hash MD5 da seed e a senha:</div>
<div id="_mcePaste">hash = MD5 (senha de sementes)</div>
<div></div>
<div id="_mcePaste">O endereço de e-mail e o hash são enviados para o servidor. Quando o servidor recebe esses dados, ele lê a senha para o e-mail digitado no banco de dados, e calcula o hash utilizando a seed que é armazenado no objeto Session.</div>
<div id="_mcePaste">Ambos os hashes são comparados, e se eles são iguais, o usuário está sendo concedido o acesso ao site.</div>
<div></div>
<div id="_mcePaste">login.asp</div>
<div id="_mcePaste">&lt;%</div>
<div id="_mcePaste">If Session(&#8220;autent&#8221;) = &#8220;true&#8221; Then</div>
<div id="_mcePaste">Response.Redirect &#8220;seguro.asp&#8221;</div>
<div id="_mcePaste">Response.End</div>
<div id="_mcePaste">End If</div>
<div id="_mcePaste">Randomize Timer</div>
<div id="_mcePaste">Dim sLeft : Dim sRight</div>
<div id="_mcePaste">sLeft = CStr(Int(Rnd * 99999)) : If Len(sLeft) &lt; 5 Then sLeft = String(5 &#8211; Len(sLeft), &#8220;0&#8243;) &amp; sLeft</div>
<div id="_mcePaste">sRight = CStr(Int(Rnd * 99999)) : If Len(sRight)</div>
<div id="_mcePaste">c</div>
<div id="_mcePaste">&lt;FORM METHOD=&#8221;POST&#8221; ACTION=&#8221;validar.asp&#8221; Id=&#8221;formLogin&#8221; onSubmit=&#8221;md5auth(&#8221;);&#8221;&gt;</div>
<div id="_mcePaste">Email:</div>
<div id="_mcePaste">senha:</div>
<div id="_mcePaste">logoff.asp</div>
<div id="_mcePaste">Log out</div>
<div id="_mcePaste">Você está logado agora.</div>
<div id="_mcePaste">Cliquehere para fazer login.</div>
<div id="_mcePaste">md5.asp</div>
<div id="_mcePaste">&lt;%</div>
<div id="_mcePaste">Private Const BITS_TO_A_BYTE = 8</div>
<div id="_mcePaste">Private Const BYTES_TO_A_WORD = 4</div>
<div id="_mcePaste">Private Const BITS_TO_A_WORD = 32</div>
<div id="_mcePaste">Private m_lOnBits(30)</div>
<div id="_mcePaste">Private m_l2Power(30)</div>
<div id="_mcePaste">m_lOnBits(0) = CLng(1)</div>
<div id="_mcePaste">m_lOnBits(1) = CLng(3)</div>
<div id="_mcePaste">m_lOnBits(2) = CLng(7)</div>
<div id="_mcePaste">m_lOnBits(3) = CLng(15)</div>
<div id="_mcePaste">m_lOnBits(4) = CLng(31)</div>
<div id="_mcePaste">m_lOnBits(5) = CLng(63)</div>
<div id="_mcePaste">m_lOnBits(6) = CLng(127)</div>
<div id="_mcePaste">m_lOnBits(7) = CLng(255)</div>
<div id="_mcePaste">m_lOnBits(8) = CLng(511)</div>
<div id="_mcePaste">m_lOnBits(9) = CLng(1023)</div>
<div id="_mcePaste">m_lOnBits(10) = CLng(2047)</div>
<div id="_mcePaste">m_lOnBits(11) = CLng(4095)</div>
<div id="_mcePaste">m_lOnBits(12) = CLng(8191)</div>
<div id="_mcePaste">m_lOnBits(13) = CLng(16383)</div>
<div id="_mcePaste">m_lOnBits(14) = CLng(32767)</div>
<div id="_mcePaste">m_lOnBits(15) = CLng(65535)</div>
<div id="_mcePaste">m_lOnBits(16) = CLng(131071)</div>
<div id="_mcePaste">m_lOnBits(17) = CLng(262143)</div>
<div id="_mcePaste">m_lOnBits(18) = CLng(524287)</div>
<div id="_mcePaste">m_lOnBits(19) = CLng(1048575)</div>
<div id="_mcePaste">m_lOnBits(20) = CLng(2097151)</div>
<div id="_mcePaste">m_lOnBits(21) = CLng(4194303)</div>
<div id="_mcePaste">m_lOnBits(22) = CLng(8388607)</div>
<div id="_mcePaste">m_lOnBits(23) = CLng(16777215)</div>
<div id="_mcePaste">m_lOnBits(24) = CLng(33554431)</div>
<div id="_mcePaste">m_lOnBits(25) = CLng(67108863)</div>
<div id="_mcePaste">m_lOnBits(26) = CLng(134217727)</div>
<div id="_mcePaste">m_lOnBits(27) = CLng(268435455)</div>
<div id="_mcePaste">m_lOnBits(28) = CLng(536870911)</div>
<div id="_mcePaste">m_lOnBits(29) = CLng(1073741823)</div>
<div id="_mcePaste">m_lOnBits(30) = CLng(2147483647)</div>
<div id="_mcePaste">m_l2Power(0) = CLng(1)</div>
<div id="_mcePaste">m_l2Power(1) = CLng(2)</div>
<div id="_mcePaste">m_l2Power(2) = CLng(4)</div>
<div id="_mcePaste">m_l2Power(3) = CLng(8)</div>
<div id="_mcePaste">m_l2Power(4) = CLng(16)</div>
<div id="_mcePaste">m_l2Power(5) = CLng(32)</div>
<div id="_mcePaste">m_l2Power(6) = CLng(64)</div>
<div id="_mcePaste">m_l2Power(7) = CLng(128)</div>
<div id="_mcePaste">m_l2Power(8) = CLng(256)</div>
<div id="_mcePaste">m_l2Power(9) = CLng(512)</div>
<div id="_mcePaste">m_l2Power(10) = CLng(1024)</div>
<div id="_mcePaste">m_l2Power(11) = CLng(2048)</div>
<div id="_mcePaste">m_l2Power(12) = CLng(4096)</div>
<div id="_mcePaste">m_l2Power(13) = CLng(8192)</div>
<div id="_mcePaste">m_l2Power(14) = CLng(16384)</div>
<div id="_mcePaste">m_l2Power(15) = CLng(32768)</div>
<div id="_mcePaste">m_l2Power(16) = CLng(65536)</div>
<div id="_mcePaste">m_l2Power(17) = CLng(131072)</div>
<div id="_mcePaste">m_l2Power(18) = CLng(262144)</div>
<div id="_mcePaste">m_l2Power(19) = CLng(524288)</div>
<div id="_mcePaste">m_l2Power(20) = CLng(1048576)</div>
<div id="_mcePaste">m_l2Power(21) = CLng(2097152)</div>
<div id="_mcePaste">m_l2Power(22) = CLng(4194304)</div>
<div id="_mcePaste">m_l2Power(23) = CLng(8388608)</div>
<div id="_mcePaste">m_l2Power(24) = CLng(16777216)</div>
<div id="_mcePaste">m_l2Power(25) = CLng(33554432)</div>
<div id="_mcePaste">m_l2Power(26) = CLng(67108864)</div>
<div id="_mcePaste">m_l2Power(27) = CLng(134217728)</div>
<div id="_mcePaste">m_l2Power(28) = CLng(268435456)</div>
<div id="_mcePaste">m_l2Power(29) = CLng(536870912)</div>
<div id="_mcePaste">m_l2Power(30) = CLng(1073741824)</div>
<div id="_mcePaste">Private Function LShift(lValue, iShiftBits)</div>
<div id="_mcePaste">If iShiftBits = 0 Then</div>
<div id="_mcePaste">LShift = lValue</div>
<div id="_mcePaste">Exit Function</div>
<div id="_mcePaste">ElseIf iShiftBits = 31 Then</div>
<div id="_mcePaste">If lValue And 1 Then</div>
<div id="_mcePaste">LShift = &amp;H80000000</div>
<div id="_mcePaste">Else</div>
<div id="_mcePaste">LShift = 0</div>
<div id="_mcePaste">End If</div>
<div id="_mcePaste">Exit Function</div>
<div id="_mcePaste">ElseIf iShiftBits 31 Then</div>
<div id="_mcePaste">Err.Raise 6</div>
<div id="_mcePaste">End If</div>
<div id="_mcePaste">If (lValue And m_l2Power(31 &#8211; iShiftBits)) Then</div>
<div id="_mcePaste">LShift = ((lValue And m_lOnBits(31 &#8211; (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &amp;H80000000</div>
<div id="_mcePaste">Else</div>
<div id="_mcePaste">LShift = ((lValue And m_lOnBits(31 &#8211; iShiftBits)) * m_l2Power(iShiftBits))</div>
<div id="_mcePaste">End If</div>
<div id="_mcePaste">End Function</div>
<div id="_mcePaste">Private Function RShift(lValue, iShiftBits)</div>
<div id="_mcePaste">If iShiftBits = 0 Then</div>
<div id="_mcePaste">RShift = lValue</div>
<div id="_mcePaste">Exit Function</div>
<div id="_mcePaste">ElseIf iShiftBits = 31 Then</div>
<div id="_mcePaste">If lValue And &amp;H80000000 Then</div>
<div id="_mcePaste">RShift = 1</div>
<div id="_mcePaste">Else</div>
<div id="_mcePaste">RShift = 0</div>
<div id="_mcePaste">End If</div>
<div id="_mcePaste">Exit Function</div>
<div id="_mcePaste">ElseIf iShiftBits 31 Then</div>
<div id="_mcePaste">Err.Raise 6</div>
<div id="_mcePaste">End If</div>
<div id="_mcePaste">RShift = (lValue And &amp;H7FFFFFFE) \ m_l2Power(iShiftBits)</div>
<div id="_mcePaste">If (lValue And &amp;H80000000) Then</div>
<div id="_mcePaste">RShift = (RShift Or (&amp;H40000000 \ m_l2Power(iShiftBits &#8211; 1)))</div>
<div id="_mcePaste">End If</div>
<div id="_mcePaste">End Function</div>
<div id="_mcePaste">Private Function RotateLeft(lValue, iShiftBits)</div>
<div id="_mcePaste">RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 &#8211; iShiftBits))</div>
<div id="_mcePaste">End Function</div>
<div id="_mcePaste">Private Function AddUnsigned(lX, lY)</div>
<div id="_mcePaste">Dim lX4</div>
<div id="_mcePaste">Dim lY4</div>
<div id="_mcePaste">Dim lX8</div>
<div id="_mcePaste">Dim lY8</div>
<div id="_mcePaste">Dim lResult</div>
<div id="_mcePaste">lX8 = lX And &amp;H80000000</div>
<div id="_mcePaste">lY8 = lY And &amp;H80000000</div>
<div id="_mcePaste">lX4 = lX And &amp;H40000000</div>
<div id="_mcePaste">lY4 = lY And &amp;H40000000</div>
<div id="_mcePaste">lResult = (lX And &amp;H3FFFFFFF) + (lY And &amp;H3FFFFFFF)</div>
<div id="_mcePaste">If lX4 And lY4 Then</div>
<div id="_mcePaste">lResult = lResult Xor &amp;H80000000 Xor lX8 Xor lY8</div>
<div id="_mcePaste">ElseIf lX4 Or lY4 Then</div>
<div id="_mcePaste">If lResult And &amp;H40000000 Then</div>
<div id="_mcePaste">lResult = lResult Xor &amp;HC0000000 Xor lX8 Xor lY8</div>
<div id="_mcePaste">Else</div>
<div id="_mcePaste">lResult = lResult Xor &amp;H40000000 Xor lX8 Xor lY8</div>
<div id="_mcePaste">End If</div>
<div id="_mcePaste">Else</div>
<div id="_mcePaste">lResult = lResult Xor lX8 Xor lY8</div>
<div id="_mcePaste">End If</div>
<div id="_mcePaste">AddUnsigned = lResult</div>
<div id="_mcePaste">End Function</div>
<div id="_mcePaste">Private Function F(x, y, z)</div>
<div id="_mcePaste">F = (x And y) Or ((Not x) And z)</div>
<div id="_mcePaste">End Function</div>
<div id="_mcePaste">Private Function G(x, y, z)</div>
<div id="_mcePaste">G = (x And z) Or (y And (Not z))</div>
<div id="_mcePaste">End Function</div>
<div id="_mcePaste">Private Function H(x, y, z)</div>
<div id="_mcePaste">H = (x Xor y Xor z)</div>
<div id="_mcePaste">End Function</div>
<div id="_mcePaste">Private Function I(x, y, z)</div>
<div id="_mcePaste">I = (y Xor (x Or (Not z)))</div>
<div id="_mcePaste">End Function</div>
<div id="_mcePaste">Private Sub FF(a, b, c, d, x, s, ac)</div>
<div id="_mcePaste">a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac))</div>
<div id="_mcePaste">a = RotateLeft(a, s)</div>
<div id="_mcePaste">a = AddUnsigned(a, b)</div>
<div id="_mcePaste">End Sub</div>
<div id="_mcePaste">Private Sub GG(a, b, c, d, x, s, ac)</div>
<div id="_mcePaste">a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac))</div>
<div id="_mcePaste">a = RotateLeft(a, s)</div>
<div id="_mcePaste">a = AddUnsigned(a, b)</div>
<div id="_mcePaste">End Sub</div>
<div id="_mcePaste">Private Sub HH(a, b, c, d, x, s, ac)</div>
<div id="_mcePaste">a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac))</div>
<div id="_mcePaste">a = RotateLeft(a, s)</div>
<div id="_mcePaste">a = AddUnsigned(a, b)</div>
<div id="_mcePaste">End Sub</div>
<div id="_mcePaste">Private Sub II(a, b, c, d, x, s, ac)</div>
<div id="_mcePaste">a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac))</div>
<div id="_mcePaste">a = RotateLeft(a, s)</div>
<div id="_mcePaste">a = AddUnsigned(a, b)</div>
<div id="_mcePaste">End Sub</div>
<div id="_mcePaste">Private Function ConvertToWordArray(sMessage)</div>
<div id="_mcePaste">Dim lMessageLength</div>
<div id="_mcePaste">Dim lNumberOfWords</div>
<div id="_mcePaste">Dim lWordArray()</div>
<div id="_mcePaste">Dim lBytePosition</div>
<div id="_mcePaste">Dim lByteCount</div>
<div id="_mcePaste">Dim lWordCount</div>
<div id="_mcePaste">Const MODULUS_BITS = 512</div>
<div id="_mcePaste">Const CONGRUENT_BITS = 448</div>
<div id="_mcePaste">lMessageLength = Len(sMessage)</div>
<div id="_mcePaste">lNumberOfWords = (((lMessageLength + ((MODULUS_BITS &#8211; CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)</div>
<div id="_mcePaste">ReDim lWordArray(lNumberOfWords &#8211; 1)</div>
<div id="_mcePaste">lBytePosition = 0</div>
<div id="_mcePaste">lByteCount = 0</div>
<div id="_mcePaste">Do Until lByteCount &gt;= lMessageLength</div>
<div id="_mcePaste">lWordCount = lByteCount \ BYTES_TO_A_WORD</div>
<div id="_mcePaste">lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE</div>
<div id="_mcePaste">lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)</div>
<div id="_mcePaste">lByteCount = lByteCount + 1</div>
<div id="_mcePaste">Loop</div>
<div id="_mcePaste">lWordCount = lByteCount \ BYTES_TO_A_WORD</div>
<div id="_mcePaste">lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE</div>
<div id="_mcePaste">lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&amp;H80, lBytePosition)</div>
<div id="_mcePaste">lWordArray(lNumberOfWords &#8211; 2) = LShift(lMessageLength, 3)</div>
<div id="_mcePaste">lWordArray(lNumberOfWords &#8211; 1) = RShift(lMessageLength, 29)</div>
<div id="_mcePaste">ConvertToWordArray = lWordArray</div>
<div id="_mcePaste">End Function</div>
<div id="_mcePaste">Private Function WordToHex(lValue)</div>
<div id="_mcePaste">Dim lByte</div>
<div id="_mcePaste">Dim lCount</div>
<div id="_mcePaste">For lCount = 0 To 3</div>
<div id="_mcePaste">lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE &#8211; 1)</div>
<div id="_mcePaste">WordToHex = WordToHex &amp; Right(&#8220;0&#8243; &amp; Hex(lByte), 2)</div>
<div id="_mcePaste">Next</div>
<div id="_mcePaste">End Function</div>
<div id="_mcePaste">Public Function MD5(sMessage)</div>
<div id="_mcePaste">Dim x</div>
<div id="_mcePaste">Dim k</div>
<div id="_mcePaste">Dim AA</div>
<div id="_mcePaste">Dim BB</div>
<div id="_mcePaste">Dim CC</div>
<div id="_mcePaste">Dim DD</div>
<div id="_mcePaste">Dim a</div>
<div id="_mcePaste">Dim b</div>
<div id="_mcePaste">Dim c</div>
<div id="_mcePaste">Dim d</div>
<div id="_mcePaste">Const S11 = 7</div>
<div id="_mcePaste">Const S12 = 12</div>
<div id="_mcePaste">Const S13 = 17</div>
<div id="_mcePaste">Const S14 = 22</div>
<div id="_mcePaste">Const S21 = 5</div>
<div id="_mcePaste">Const S22 = 9</div>
<div id="_mcePaste">Const S23 = 14</div>
<div id="_mcePaste">Const S24 = 20</div>
<div id="_mcePaste">Const S31 = 4</div>
<div id="_mcePaste">Const S32 = 11</div>
<div id="_mcePaste">Const S33 = 16</div>
<div id="_mcePaste">Const S34 = 23</div>
<div id="_mcePaste">Const S41 = 6</div>
<div id="_mcePaste">Const S42 = 10</div>
<div id="_mcePaste">Const S43 = 15</div>
<div id="_mcePaste">Const S44 = 21</div>
<div id="_mcePaste">x = ConvertToWordArray(sMessage)</div>
<div id="_mcePaste">a = &amp;H67452301</div>
<div id="_mcePaste">b = &amp;HEFCDAB89</div>
<div id="_mcePaste">c = &amp;H98BADCFE</div>
<div id="_mcePaste">d = &amp;H10325476</div>
<div id="_mcePaste">For k = 0 To UBound(x) Step 16</div>
<div id="_mcePaste">AA = a</div>
<div id="_mcePaste">BB = b</div>
<div id="_mcePaste">CC = c</div>
<div id="_mcePaste">DD = d</div>
<div id="_mcePaste">FF a, b, c, d, x(k + 0), S11, &amp;HD76AA478</div>
<div id="_mcePaste">FF d, a, b, c, x(k + 1), S12, &amp;HE8C7B756</div>
<div id="_mcePaste">FF c, d, a, b, x(k + 2), S13, &amp;H242070DB</div>
<div id="_mcePaste">FF b, c, d, a, x(k + 3), S14, &amp;HC1BDCEEE</div>
<div id="_mcePaste">FF a, b, c, d, x(k + 4), S11, &amp;HF57C0FAF</div>
<div id="_mcePaste">FF d, a, b, c, x(k + 5), S12, &amp;H4787C62A</div>
<div id="_mcePaste">FF c, d, a, b, x(k + 6), S13, &amp;HA8304613</div>
<div id="_mcePaste">FF b, c, d, a, x(k + 7), S14, &amp;HFD469501</div>
<div id="_mcePaste">FF a, b, c, d, x(k + 8), S11, &amp;H698098D8</div>
<div id="_mcePaste">FF d, a, b, c, x(k + 9), S12, &amp;H8B44F7AF</div>
<div id="_mcePaste">FF c, d, a, b, x(k + 10), S13, &amp;HFFFF5BB1</div>
<div id="_mcePaste">FF b, c, d, a, x(k + 11), S14, &amp;H895CD7BE</div>
<div id="_mcePaste">FF a, b, c, d, x(k + 12), S11, &amp;H6B901122</div>
<div id="_mcePaste">FF d, a, b, c, x(k + 13), S12, &amp;HFD987193</div>
<div id="_mcePaste">FF c, d, a, b, x(k + 14), S13, &amp;HA679438E</div>
<div id="_mcePaste">FF b, c, d, a, x(k + 15), S14, &amp;H49B40821</div>
<div id="_mcePaste">GG a, b, c, d, x(k + 1), S21, &amp;HF61E2562</div>
<div id="_mcePaste">GG d, a, b, c, x(k + 6), S22, &amp;HC040B340</div>
<div id="_mcePaste">GG c, d, a, b, x(k + 11), S23, &amp;H265E5A51</div>
<div id="_mcePaste">GG b, c, d, a, x(k + 0), S24, &amp;HE9B6C7AA</div>
<div id="_mcePaste">GG a, b, c, d, x(k + 5), S21, &amp;HD62F105D</div>
<div id="_mcePaste">GG d, a, b, c, x(k + 10), S22, &amp;H2441453</div>
<div id="_mcePaste">GG c, d, a, b, x(k + 15), S23, &amp;HD8A1E681</div>
<div id="_mcePaste">GG b, c, d, a, x(k + 4), S24, &amp;HE7D3FBC8</div>
<div id="_mcePaste">GG a, b, c, d, x(k + 9), S21, &amp;H21E1CDE6</div>
<div id="_mcePaste">GG d, a, b, c, x(k + 14), S22, &amp;HC33707D6</div>
<div id="_mcePaste">GG c, d, a, b, x(k + 3), S23, &amp;HF4D50D87</div>
<div id="_mcePaste">GG b, c, d, a, x(k + 8), S24, &amp;H455A14ED</div>
<div id="_mcePaste">GG a, b, c, d, x(k + 13), S21, &amp;HA9E3E905</div>
<div id="_mcePaste">GG d, a, b, c, x(k + 2), S22, &amp;HFCEFA3F8</div>
<div id="_mcePaste">GG c, d, a, b, x(k + 7), S23, &amp;H676F02D9</div>
<div id="_mcePaste">GG b, c, d, a, x(k + 12), S24, &amp;H8D2A4C8A</div>
<div id="_mcePaste">HH a, b, c, d, x(k + 5), S31, &amp;HFFFA3942</div>
<div id="_mcePaste">HH d, a, b, c, x(k + 8), S32, &amp;H8771F681</div>
<div id="_mcePaste">HH c, d, a, b, x(k + 11), S33, &amp;H6D9D6122</div>
<div id="_mcePaste">HH b, c, d, a, x(k + 14), S34, &amp;HFDE5380C</div>
<div id="_mcePaste">HH a, b, c, d, x(k + 1), S31, &amp;HA4BEEA44</div>
<div id="_mcePaste">HH d, a, b, c, x(k + 4), S32, &amp;H4BDECFA9</div>
<div id="_mcePaste">HH c, d, a, b, x(k + 7), S33, &amp;HF6BB4B60</div>
<div id="_mcePaste">HH b, c, d, a, x(k + 10), S34, &amp;HBEBFBC70</div>
<div id="_mcePaste">HH a, b, c, d, x(k + 13), S31, &amp;H289B7EC6</div>
<div id="_mcePaste">HH d, a, b, c, x(k + 0), S32, &amp;HEAA127FA</div>
<div id="_mcePaste">HH c, d, a, b, x(k + 3), S33, &amp;HD4EF3085</div>
<div id="_mcePaste">HH b, c, d, a, x(k + 6), S34, &amp;H4881D05</div>
<div id="_mcePaste">HH a, b, c, d, x(k + 9), S31, &amp;HD9D4D039</div>
<div id="_mcePaste">HH d, a, b, c, x(k + 12), S32, &amp;HE6DB99E5</div>
<div id="_mcePaste">HH c, d, a, b, x(k + 15), S33, &amp;H1FA27CF8</div>
<div id="_mcePaste">HH b, c, d, a, x(k + 2), S34, &amp;HC4AC5665</div>
<div id="_mcePaste">II a, b, c, d, x(k + 0), S41, &amp;HF4292244</div>
<div id="_mcePaste">II d, a, b, c, x(k + 7), S42, &amp;H432AFF97</div>
<div id="_mcePaste">II c, d, a, b, x(k + 14), S43, &amp;HAB9423A7</div>
<div id="_mcePaste">II b, c, d, a, x(k + 5), S44, &amp;HFC93A039</div>
<div id="_mcePaste">II a, b, c, d, x(k + 12), S41, &amp;H655B59C3</div>
<div id="_mcePaste">II d, a, b, c, x(k + 3), S42, &amp;H8F0CCC92</div>
<div id="_mcePaste">II c, d, a, b, x(k + 10), S43, &amp;HFFEFF47D</div>
<div id="_mcePaste">II b, c, d, a, x(k + 1), S44, &amp;H85845DD1</div>
<div id="_mcePaste">II a, b, c, d, x(k + 8), S41, &amp;H6FA87E4F</div>
<div id="_mcePaste">II d, a, b, c, x(k + 15), S42, &amp;HFE2CE6E0</div>
<div id="_mcePaste">II c, d, a, b, x(k + 6), S43, &amp;HA3014314</div>
<div id="_mcePaste">II b, c, d, a, x(k + 13), S44, &amp;H4E0811A1</div>
<div id="_mcePaste">II a, b, c, d, x(k + 4), S41, &amp;HF7537E82</div>
<div id="_mcePaste">II d, a, b, c, x(k + 11), S42, &amp;HBD3AF235</div>
<div id="_mcePaste">II c, d, a, b, x(k + 2), S43, &amp;H2AD7D2BB</div>
<div id="_mcePaste">II b, c, d, a, x(k + 9), S44, &amp;HEB86D391</div>
<div id="_mcePaste">a = AddUnsigned(a, AA)</div>
<div id="_mcePaste">b = AddUnsigned(b, BB)</div>
<div id="_mcePaste">c = AddUnsigned(c, CC)</div>
<div id="_mcePaste">d = AddUnsigned(d, DD)</div>
<div id="_mcePaste">Next</div>
<div id="_mcePaste">MD5 = LCase(WordToHex(a) &amp; WordToHex(b) &amp; WordToHex(c) &amp; WordToHex(d))</div>
<div id="_mcePaste">End Function</div>
<div id="_mcePaste">%&gt;</div>
<div id="_mcePaste">seguro.asp</div>
<div id="_mcePaste">Você está autenticado com o endereço de e-mail:</div>
<div id="_mcePaste">Click aqui para logout.</div>
<div id="_mcePaste">validar.asp</div>
<div id="_mcePaste">Secure Login</div>
<div id="_mcePaste">&lt;%</div>
<div id="_mcePaste">If sSeed = &#8220;&#8221; Then</div>
<div id="_mcePaste">Response.Write &#8220;Sua sessão expirou. Você tem esperado por muito tempo, ou seu navegador não suporta cookies.&#8221;</div>
<div id="_mcePaste">ElseIf sEmailAddress = &#8220;&#8221; Then</div>
<div id="_mcePaste">Response.Write &#8220;Você não introduzir um endereço de e-mail.&#8221;</div>
<div id="_mcePaste">ElseIf LCase(sEmailAddress) LCase(sValidEmailAddress) Then</div>
<div id="_mcePaste">Response.Write &#8220;Você digitou um endereço de e-mail não registrado.&#8221;</div>
<div id="_mcePaste">ElseIf sHash = &#8220;&#8221; And sPassword &#8220;&#8221; Then</div>
<div id="_mcePaste">If sPassword sValidPassword Then</div>
<div id="_mcePaste">Response.Write &#8220;A senha digitada no incorreta. (Inseguro)&#8221;</div>
<div id="_mcePaste">Else</div>
<div id="_mcePaste">Response.Write &#8220;Login feito com sucesso!</div>
<div id="_mcePaste">Click aqui para continuar.</div>
<div id="_mcePaste">Click aqui para logout.&#8221;</div>
<div id="_mcePaste">&#8216; Store credentials in the Session object</div>
<div id="_mcePaste">Session(&#8220;autent&#8221;) = &#8220;true&#8221;</div>
<div id="_mcePaste">Session(&#8220;auth_emailaddress&#8221;) = sEmailAddress</div>
<div id="_mcePaste">End If</div>
<div id="_mcePaste">ElseIf sHash &#8220;&#8221; Then</div>
<div id="_mcePaste">If sHash sValidHash Then</div>
<div id="_mcePaste">Response.Write &#8220;A senha digitada esta incorreta.&#8221;</div>
<div id="_mcePaste">Else</div>
<div id="_mcePaste">Response.Write &#8220;Login feito com sucesso!</div>
<div id="_mcePaste">Click aqui para continuar.</div>
<div id="_mcePaste">Click aqui para logout.&#8221;</div>
<div id="_mcePaste">Session(&#8220;autent&#8221;) = &#8220;true&#8221;</div>
<div id="_mcePaste">Session(&#8220;auth_emailaddress&#8221;) = sEmailAddress</div>
<div id="_mcePaste">End If</div>
<div id="_mcePaste">Else</div>
<div id="_mcePaste">Response.Write &#8220;Ocorreu um erro.&#8221;</div>
<div id="_mcePaste">End If</div>
<div id="_mcePaste">%&gt;</div>
<div id="_mcePaste">Voltar</div>
<div id="_mcePaste">md5.js</div>
<div id="_mcePaste">function array(n) {</div>
<div id="_mcePaste">for(i=0;i=0) {</div>
<div id="_mcePaste">a=a%0&#215;80000000;</div>
<div id="_mcePaste">a&gt;&gt;=b;</div>
<div id="_mcePaste">a+=0&#215;40000000&gt;&gt;(b-1);</div>
<div id="_mcePaste">} else</div>
<div id="_mcePaste">a&gt;&gt;=b;</div>
<div id="_mcePaste">return a;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function shl1(a) {</div>
<div id="_mcePaste">a=a%0&#215;80000000;</div>
<div id="_mcePaste">if (a&amp;0&#215;40000000==0&#215;40000000)</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">a-=0&#215;40000000;</div>
<div id="_mcePaste">a*=2;</div>
<div id="_mcePaste">a+=0&#215;80000000;</div>
<div id="_mcePaste">} else</div>
<div id="_mcePaste">a*=2;</div>
<div id="_mcePaste">return a;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function shl(a,b) {</div>
<div id="_mcePaste">a=integer(a);</div>
<div id="_mcePaste">b=integer(b);</div>
<div id="_mcePaste">for (var i=0;i=0)</div>
<div id="_mcePaste">if (t2&gt;=0)</div>
<div id="_mcePaste">return ((t1&amp;t2)+0&#215;80000000);</div>
<div id="_mcePaste">else</div>
<div id="_mcePaste">return (t1&amp;b);</div>
<div id="_mcePaste">else</div>
<div id="_mcePaste">if (t2&gt;=0)</div>
<div id="_mcePaste">return (a&amp;t2);</div>
<div id="_mcePaste">else</div>
<div id="_mcePaste">return (a&amp;b);</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function or(a,b) {</div>
<div id="_mcePaste">a=integer(a);</div>
<div id="_mcePaste">b=integer(b);</div>
<div id="_mcePaste">var t1=(a-0&#215;80000000);</div>
<div id="_mcePaste">var t2=(b-0&#215;80000000);</div>
<div id="_mcePaste">if (t1&gt;=0)</div>
<div id="_mcePaste">if (t2&gt;=0)</div>
<div id="_mcePaste">return ((t1|t2)+0&#215;80000000);</div>
<div id="_mcePaste">else</div>
<div id="_mcePaste">return ((t1|b)+0&#215;80000000);</div>
<div id="_mcePaste">else</div>
<div id="_mcePaste">if (t2&gt;=0)</div>
<div id="_mcePaste">return ((a|t2)+0&#215;80000000);</div>
<div id="_mcePaste">else</div>
<div id="_mcePaste">return (a|b);</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function xor(a,b) {</div>
<div id="_mcePaste">a=integer(a);</div>
<div id="_mcePaste">b=integer(b);</div>
<div id="_mcePaste">var t1=(a-0&#215;80000000);</div>
<div id="_mcePaste">var t2=(b-0&#215;80000000);</div>
<div id="_mcePaste">if (t1&gt;=0)</div>
<div id="_mcePaste">if (t2&gt;=0)</div>
<div id="_mcePaste">return (t1^t2);</div>
<div id="_mcePaste">else</div>
<div id="_mcePaste">return ((t1^b)+0&#215;80000000);</div>
<div id="_mcePaste">else</div>
<div id="_mcePaste">if (t2&gt;=0)</div>
<div id="_mcePaste">return ((a^t2)+0&#215;80000000);</div>
<div id="_mcePaste">else</div>
<div id="_mcePaste">return (a^b);</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function not(a) {</div>
<div id="_mcePaste">a=integer(a);</div>
<div id="_mcePaste">return (0xffffffff-a);</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">/* Here begin the real algorithm */</div>
<div id="_mcePaste">var state = new array(4);</div>
<div id="_mcePaste">var count = new array(2);</div>
<div id="_mcePaste">count[0] = 0;</div>
<div id="_mcePaste">count[1] = 0;</div>
<div id="_mcePaste">var buffer = new array(64);</div>
<div id="_mcePaste">var transformBuffer = new array(16);</div>
<div id="_mcePaste">var digestBits = new array(16);</div>
<div id="_mcePaste">var S11 = 7;</div>
<div id="_mcePaste">var S12 = 12;</div>
<div id="_mcePaste">var S13 = 17;</div>
<div id="_mcePaste">var S14 = 22;</div>
<div id="_mcePaste">var S21 = 5;</div>
<div id="_mcePaste">var S22 = 9;</div>
<div id="_mcePaste">var S23 = 14;</div>
<div id="_mcePaste">var S24 = 20;</div>
<div id="_mcePaste">var S31 = 4;</div>
<div id="_mcePaste">var S32 = 11;</div>
<div id="_mcePaste">var S33 = 16;</div>
<div id="_mcePaste">var S34 = 23;</div>
<div id="_mcePaste">var S41 = 6;</div>
<div id="_mcePaste">var S42 = 10;</div>
<div id="_mcePaste">var S43 = 15;</div>
<div id="_mcePaste">var S44 = 21;</div>
<div id="_mcePaste">function F(x,y,z) {</div>
<div id="_mcePaste">return or(and(x,y),and(not(x),z));</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function G(x,y,z) {</div>
<div id="_mcePaste">return or(and(x,z),and(y,not(z)));</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function H(x,y,z) {</div>
<div id="_mcePaste">return xor(xor(x,y),z);</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function I(x,y,z) {</div>
<div id="_mcePaste">return xor(y ,or(x , not(z)));</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function rotateLeft(a,n) {</div>
<div id="_mcePaste">return or(shl(a, n),(shr(a,(32 &#8211; n))));</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function FF(a,b,c,d,x,s,ac) {</div>
<div id="_mcePaste">a = a+F(b, c, d) + x + ac;</div>
<div id="_mcePaste">a = rotateLeft(a, s);</div>
<div id="_mcePaste">a = a+b;</div>
<div id="_mcePaste">return a;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function GG(a,b,c,d,x,s,ac) {</div>
<div id="_mcePaste">a = a+G(b, c, d) +x + ac;</div>
<div id="_mcePaste">a = rotateLeft(a, s);</div>
<div id="_mcePaste">a = a+b;</div>
<div id="_mcePaste">return a;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function HH(a,b,c,d,x,s,ac) {</div>
<div id="_mcePaste">a = a+H(b, c, d) + x + ac;</div>
<div id="_mcePaste">a = rotateLeft(a, s);</div>
<div id="_mcePaste">a = a+b;</div>
<div id="_mcePaste">return a;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function II(a,b,c,d,x,s,ac) {</div>
<div id="_mcePaste">a = a+I(b, c, d) + x + ac;</div>
<div id="_mcePaste">a = rotateLeft(a, s);</div>
<div id="_mcePaste">a = a+b;</div>
<div id="_mcePaste">return a;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function transform(buf,offset) {</div>
<div id="_mcePaste">var a=0, b=0, c=0, d=0;</div>
<div id="_mcePaste">var x = transformBuffer;</div>
<div id="_mcePaste">a = state[0];</div>
<div id="_mcePaste">b = state[1];</div>
<div id="_mcePaste">c = state[2];</div>
<div id="_mcePaste">d = state[3];</div>
<div id="_mcePaste">for (i = 0; i &lt; 16; i++) {</div>
<div id="_mcePaste">x[i] = and(buf[i*4+offset],0xff);</div>
<div id="_mcePaste">for (j = 1; j &lt; 4; j++) {</div>
<div id="_mcePaste">x[i]+=shl(and(buf[i*4+j+offset] ,0xff), j * 8);</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">/* Round 1 */</div>
<div id="_mcePaste">a = FF ( a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */</div>
<div id="_mcePaste">d = FF ( d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */</div>
<div id="_mcePaste">c = FF ( c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */</div>
<div id="_mcePaste">b = FF ( b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */</div>
<div id="_mcePaste">a = FF ( a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */</div>
<div id="_mcePaste">d = FF ( d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */</div>
<div id="_mcePaste">c = FF ( c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */</div>
<div id="_mcePaste">b = FF ( b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */</div>
<div id="_mcePaste">a = FF ( a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */</div>
<div id="_mcePaste">d = FF ( d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */</div>
<div id="_mcePaste">c = FF ( c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */</div>
<div id="_mcePaste">b = FF ( b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */</div>
<div id="_mcePaste">a = FF ( a, b, c, d, x[12], S11, 0x6b901122); /* 13 */</div>
<div id="_mcePaste">d = FF ( d, a, b, c, x[13], S12, 0xfd987193); /* 14 */</div>
<div id="_mcePaste">c = FF ( c, d, a, b, x[14], S13, 0xa679438e); /* 15 */</div>
<div id="_mcePaste">b = FF ( b, c, d, a, x[15], S14, 0x49b40821); /* 16 */</div>
<div id="_mcePaste">/* Round 2 */</div>
<div id="_mcePaste">a = GG ( a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */</div>
<div id="_mcePaste">d = GG ( d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */</div>
<div id="_mcePaste">c = GG ( c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */</div>
<div id="_mcePaste">b = GG ( b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */</div>
<div id="_mcePaste">a = GG ( a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */</div>
<div id="_mcePaste">d = GG ( d, a, b, c, x[10], S22, 0&#215;2441453); /* 22 */</div>
<div id="_mcePaste">c = GG ( c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */</div>
<div id="_mcePaste">b = GG ( b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */</div>
<div id="_mcePaste">a = GG ( a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */</div>
<div id="_mcePaste">d = GG ( d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */</div>
<div id="_mcePaste">c = GG ( c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */</div>
<div id="_mcePaste">b = GG ( b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */</div>
<div id="_mcePaste">a = GG ( a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */</div>
<div id="_mcePaste">d = GG ( d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */</div>
<div id="_mcePaste">c = GG ( c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */</div>
<div id="_mcePaste">b = GG ( b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */</div>
<div id="_mcePaste">/* Round 3 */</div>
<div id="_mcePaste">a = HH ( a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */</div>
<div id="_mcePaste">d = HH ( d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */</div>
<div id="_mcePaste">c = HH ( c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */</div>
<div id="_mcePaste">b = HH ( b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */</div>
<div id="_mcePaste">a = HH ( a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */</div>
<div id="_mcePaste">d = HH ( d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */</div>
<div id="_mcePaste">c = HH ( c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */</div>
<div id="_mcePaste">b = HH ( b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */</div>
<div id="_mcePaste">a = HH ( a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */</div>
<div id="_mcePaste">d = HH ( d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */</div>
<div id="_mcePaste">c = HH ( c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */</div>
<div id="_mcePaste">b = HH ( b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */</div>
<div id="_mcePaste">a = HH ( a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */</div>
<div id="_mcePaste">d = HH ( d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */</div>
<div id="_mcePaste">c = HH ( c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */</div>
<div id="_mcePaste">b = HH ( b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */</div>
<div id="_mcePaste">/* Round 4 */</div>
<div id="_mcePaste">a = II ( a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */</div>
<div id="_mcePaste">d = II ( d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */</div>
<div id="_mcePaste">c = II ( c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */</div>
<div id="_mcePaste">b = II ( b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */</div>
<div id="_mcePaste">a = II ( a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */</div>
<div id="_mcePaste">d = II ( d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */</div>
<div id="_mcePaste">c = II ( c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */</div>
<div id="_mcePaste">b = II ( b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */</div>
<div id="_mcePaste">a = II ( a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */</div>
<div id="_mcePaste">d = II ( d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */</div>
<div id="_mcePaste">c = II ( c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */</div>
<div id="_mcePaste">b = II ( b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */</div>
<div id="_mcePaste">a = II ( a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */</div>
<div id="_mcePaste">d = II ( d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */</div>
<div id="_mcePaste">c = II ( c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */</div>
<div id="_mcePaste">b = II ( b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */</div>
<div id="_mcePaste">state[0] +=a;</div>
<div id="_mcePaste">state[1] +=b;</div>
<div id="_mcePaste">state[2] +=c;</div>
<div id="_mcePaste">state[3] +=d;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function init() {</div>
<div id="_mcePaste">count[0]=count[1] = 0;</div>
<div id="_mcePaste">state[0] = 0&#215;67452301;</div>
<div id="_mcePaste">state[1] = 0xefcdab89;</div>
<div id="_mcePaste">state[2] = 0x98badcfe;</div>
<div id="_mcePaste">state[3] = 0&#215;10325476;</div>
<div id="_mcePaste">for (i = 0; i &lt; digestBits.length; i++)</div>
<div id="_mcePaste">digestBits[i] = 0;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function update(b) {</div>
<div id="_mcePaste">var index,i;</div>
<div id="_mcePaste">index = and(shr(count[0],3) , 0x3f);</div>
<div id="_mcePaste">if (count[0]= 63) {</div>
<div id="_mcePaste">transform(buffer, 0);</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">function finish() {</div>
<div id="_mcePaste">var bits = new array(8);</div>
<div id="_mcePaste">var	padding;</div>
<div id="_mcePaste">var	i=0, index=0, padLen=0;</div>
<div id="_mcePaste">for (i = 0; i &lt; 4; i++) {</div>
<div id="_mcePaste">bits[i] = and(shr(count[0],(i * 8)), 0xff);</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">for (i = 0; i &lt; 4; i++) {</div>
<div id="_mcePaste">bits[i+4]=and(shr(count[1],(i * 8)), 0xff);</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">index = and(shr(count[0], 3) ,0x3f);</div>
<div id="_mcePaste">padLen = (index &lt; 56) ? (56 &#8211; index) : (120 &#8211; index);</div>
<div id="_mcePaste">padding = new array(64);</div>
<div id="_mcePaste">padding[0] = 0&#215;80;</div>
<div id="_mcePaste">for (i=0;i&lt;padLen;i++)</div>
<div id="_mcePaste">update(padding[i]);</div>
<div id="_mcePaste">for (i=0;i&lt;8;i++)</div>
<div id="_mcePaste">update(bits[i]);</div>
<div id="_mcePaste">for (i = 0; i &lt; 4; i++) {</div>
<div id="_mcePaste">for (j = 0; j &lt; 4; j++) {</div>
<div id="_mcePaste">digestBits[i*4+j] = and(shr(state[i], (j * 8)) , 0xff);</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">/* End of the MD5 algorithm */</div>
<div id="_mcePaste">function hexa(n) {</div>
<div id="_mcePaste">var hexa_h = &#8220;0123456789abcdef&#8221;;</div>
<div id="_mcePaste">var hexa_c=&#8221;";</div>
<div id="_mcePaste">var hexa_m=n;</div>
<div id="_mcePaste">for (hexa_i=0;hexa_i&lt;8;hexa_i++) {</div>
<div id="_mcePaste">hexa_c=hexa_h.charAt(Math.abs(hexa_m)%16)+hexa_c;</div>
<div id="_mcePaste">hexa_m=Math.floor(hexa_m/16);</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">return hexa_c;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">var ascii=&#8221;01234567890123456789012345678901&#8243; +</div>
<div id="_mcePaste">&#8221; !\&#8221;#$%&amp;&#8217;()*+,-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ&#8221;+</div>
<div id="_mcePaste">&#8220;[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~&#8221;;</div>
<div id="_mcePaste">function MD5(entree)</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">var l,s,k,ka,kb,kc,kd;</div>
<div id="_mcePaste">init();</div>
<div id="_mcePaste">for (k=0;k&lt;entree.length;k++) {</div>
<div id="_mcePaste">l=entree.charAt(k);</div>
<div id="_mcePaste">update(ascii.lastIndexOf(l));</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">finish();</div>
<div id="_mcePaste">ka=kb=kc=kd=0;</div>
<div id="_mcePaste">for (i=0;i&lt;4;i++) ka+=shl(digestBits[15-i], (i*8));</div>
<div id="_mcePaste">for (i=4;i&lt;8;i++) kb+=shl(digestBits[15-i], ((i-4)*8));</div>
<div id="_mcePaste">for (i=8;i&lt;12;i++) kc+=shl(digestBits[15-i], ((i-8)*8));</div>
<div id="_mcePaste">for (i=12;i&lt;16;i++) kd+=shl(digestBits[15-i], ((i-12)*8));</div>
<div id="_mcePaste">s=hexa(kd)+hexa(kc)+hexa(kb)+hexa(ka);</div>
<div id="_mcePaste">return s;</div>
<div id="_mcePaste">}</div>
<p>Autenticação de Usuário<br />
Este método pode ser usado para autenticar usuários, permitindo-lhes escrevendo seu endereço de e-mail e senha. Este método usa algoritmo MD5 para enviar a senha criptografada.<br />
Muitos sites usam a autenticação básica com os arquivos. htaccess ou formulários web simples, combinadas com cookies para autenticar seus usuários. Apenas alguns deles usam um servidor HTTPS para enviar os dados.Um usuário mal intensionado pode dar um sniffing de pacotes na rede, e facilmente capturar as senhas, e usá-lo para obter acesso às contas. Vamos criar um &#8220;hash&#8221; da senha antes de enviá-lo.<br />
Um seed é incluído na página onde o usuário está sendo solicitado para sua senha. Uma cópia seed é armazenada no objeto de sessão no lado do servidor. Quando o usuário envia a página, um javascript calcula o hash MD5 da seed e a senha:<br />
hash = MD5 (senha de sementes)<br />
O endereço de e-mail e o hash são enviados para o servidor. Quando o servidor recebe esses dados, ele lê a senha para o e-mail digitado no banco de dados, e calcula o hash utilizando a seed que é armazenado no objeto Session.Ambos os hashes são comparados, e se eles são iguais, o usuário está sendo concedido o acesso ao site.<br />
login.asp<br />
&lt;%<br />
If Session(&#8220;autent&#8221;) = &#8220;true&#8221; ThenResponse.Redirect &#8220;seguro.asp&#8221;Response.EndEnd If<br />
Randomize Timer<br />
Dim sLeft : Dim sRightsLeft = CStr(Int(Rnd * 99999)) : If Len(sLeft) &lt; 5 Then sLeft = String(5 &#8211; Len(sLeft), &#8220;0&#8243;) &amp; sLeftsRight = CStr(Int(Rnd * 99999)) : If Len(sRight)c<br />
&lt;FORM METHOD=&#8221;POST&#8221; ACTION=&#8221;validar.asp&#8221; Id=&#8221;formLogin&#8221; onSubmit=&#8221;md5auth(&#8221;);&#8221;&gt;<br />
Email:	 senha:	  logoff.asp<br />
Log out<br />
Você está logado agora.Cliquehere para fazer login.<br />
md5.asp<br />
&lt;%<br />
Private Const BITS_TO_A_BYTE = 8Private Const BYTES_TO_A_WORD = 4Private Const BITS_TO_A_WORD = 32<br />
Private m_lOnBits(30)Private m_l2Power(30)<br />
m_lOnBits(0) = CLng(1)m_lOnBits(1) = CLng(3)m_lOnBits(2) = CLng(7)m_lOnBits(3) = CLng(15)m_lOnBits(4) = CLng(31)m_lOnBits(5) = CLng(63)m_lOnBits(6) = CLng(127)m_lOnBits(7) = CLng(255)m_lOnBits(8) = CLng(511)m_lOnBits(9) = CLng(1023)m_lOnBits(10) = CLng(2047)m_lOnBits(11) = CLng(4095)m_lOnBits(12) = CLng(8191)m_lOnBits(13) = CLng(16383)m_lOnBits(14) = CLng(32767)m_lOnBits(15) = CLng(65535)m_lOnBits(16) = CLng(131071)m_lOnBits(17) = CLng(262143)m_lOnBits(18) = CLng(524287)m_lOnBits(19) = CLng(1048575)m_lOnBits(20) = CLng(2097151)m_lOnBits(21) = CLng(4194303)m_lOnBits(22) = CLng(8388607)m_lOnBits(23) = CLng(16777215)m_lOnBits(24) = CLng(33554431)m_lOnBits(25) = CLng(67108863)m_lOnBits(26) = CLng(134217727)m_lOnBits(27) = CLng(268435455)m_lOnBits(28) = CLng(536870911)m_lOnBits(29) = CLng(1073741823)m_lOnBits(30) = CLng(2147483647)<br />
m_l2Power(0) = CLng(1)m_l2Power(1) = CLng(2)m_l2Power(2) = CLng(4)m_l2Power(3) = CLng(8)m_l2Power(4) = CLng(16)m_l2Power(5) = CLng(32)m_l2Power(6) = CLng(64)m_l2Power(7) = CLng(128)m_l2Power(8) = CLng(256)m_l2Power(9) = CLng(512)m_l2Power(10) = CLng(1024)m_l2Power(11) = CLng(2048)m_l2Power(12) = CLng(4096)m_l2Power(13) = CLng(8192)m_l2Power(14) = CLng(16384)m_l2Power(15) = CLng(32768)m_l2Power(16) = CLng(65536)m_l2Power(17) = CLng(131072)m_l2Power(18) = CLng(262144)m_l2Power(19) = CLng(524288)m_l2Power(20) = CLng(1048576)m_l2Power(21) = CLng(2097152)m_l2Power(22) = CLng(4194304)m_l2Power(23) = CLng(8388608)m_l2Power(24) = CLng(16777216)m_l2Power(25) = CLng(33554432)m_l2Power(26) = CLng(67108864)m_l2Power(27) = CLng(134217728)m_l2Power(28) = CLng(268435456)m_l2Power(29) = CLng(536870912)m_l2Power(30) = CLng(1073741824)<br />
Private Function LShift(lValue, iShiftBits)If iShiftBits = 0 ThenLShift = lValueExit FunctionElseIf iShiftBits = 31 ThenIf lValue And 1 ThenLShift = &amp;H80000000ElseLShift = 0End IfExit FunctionElseIf iShiftBits 31 ThenErr.Raise 6End If<br />
If (lValue And m_l2Power(31 &#8211; iShiftBits)) ThenLShift = ((lValue And m_lOnBits(31 &#8211; (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &amp;H80000000ElseLShift = ((lValue And m_lOnBits(31 &#8211; iShiftBits)) * m_l2Power(iShiftBits))End IfEnd Function<br />
Private Function RShift(lValue, iShiftBits)If iShiftBits = 0 ThenRShift = lValueExit FunctionElseIf iShiftBits = 31 ThenIf lValue And &amp;H80000000 ThenRShift = 1ElseRShift = 0End IfExit FunctionElseIf iShiftBits 31 ThenErr.Raise 6End If<br />
RShift = (lValue And &amp;H7FFFFFFE) \ m_l2Power(iShiftBits)<br />
If (lValue And &amp;H80000000) ThenRShift = (RShift Or (&amp;H40000000 \ m_l2Power(iShiftBits &#8211; 1)))End IfEnd Function<br />
Private Function RotateLeft(lValue, iShiftBits)RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 &#8211; iShiftBits))End Function<br />
Private Function AddUnsigned(lX, lY)Dim lX4Dim lY4Dim lX8Dim lY8Dim lResult<br />
lX8 = lX And &amp;H80000000lY8 = lY And &amp;H80000000lX4 = lX And &amp;H40000000lY4 = lY And &amp;H40000000<br />
lResult = (lX And &amp;H3FFFFFFF) + (lY And &amp;H3FFFFFFF)<br />
If lX4 And lY4 ThenlResult = lResult Xor &amp;H80000000 Xor lX8 Xor lY8ElseIf lX4 Or lY4 ThenIf lResult And &amp;H40000000 ThenlResult = lResult Xor &amp;HC0000000 Xor lX8 Xor lY8ElselResult = lResult Xor &amp;H40000000 Xor lX8 Xor lY8End IfElselResult = lResult Xor lX8 Xor lY8End If<br />
AddUnsigned = lResultEnd Function<br />
Private Function F(x, y, z)F = (x And y) Or ((Not x) And z)End Function<br />
Private Function G(x, y, z)G = (x And z) Or (y And (Not z))End Function<br />
Private Function H(x, y, z)H = (x Xor y Xor z)End Function<br />
Private Function I(x, y, z)I = (y Xor (x Or (Not z)))End Function<br />
Private Sub FF(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End Sub<br />
Private Sub GG(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End Sub<br />
Private Sub HH(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End Sub<br />
Private Sub II(a, b, c, d, x, s, ac)a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac))a = RotateLeft(a, s)a = AddUnsigned(a, b)End Sub<br />
Private Function ConvertToWordArray(sMessage)Dim lMessageLengthDim lNumberOfWordsDim lWordArray()Dim lBytePositionDim lByteCountDim lWordCount<br />
Const MODULUS_BITS = 512Const CONGRUENT_BITS = 448<br />
lMessageLength = Len(sMessage)<br />
lNumberOfWords = (((lMessageLength + ((MODULUS_BITS &#8211; CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)ReDim lWordArray(lNumberOfWords &#8211; 1)<br />
lBytePosition = 0lByteCount = 0Do Until lByteCount &gt;= lMessageLengthlWordCount = lByteCount \ BYTES_TO_A_WORDlBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTElWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)lByteCount = lByteCount + 1Loop<br />
lWordCount = lByteCount \ BYTES_TO_A_WORDlBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE<br />
lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&amp;H80, lBytePosition)<br />
lWordArray(lNumberOfWords &#8211; 2) = LShift(lMessageLength, 3)lWordArray(lNumberOfWords &#8211; 1) = RShift(lMessageLength, 29)<br />
ConvertToWordArray = lWordArrayEnd Function<br />
Private Function WordToHex(lValue)Dim lByteDim lCount<br />
For lCount = 0 To 3lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE &#8211; 1)WordToHex = WordToHex &amp; Right(&#8220;0&#8243; &amp; Hex(lByte), 2)NextEnd Function<br />
Public Function MD5(sMessage)Dim xDim kDim AADim BBDim CCDim DDDim aDim bDim cDim d<br />
Const S11 = 7Const S12 = 12Const S13 = 17Const S14 = 22Const S21 = 5Const S22 = 9Const S23 = 14Const S24 = 20Const S31 = 4Const S32 = 11Const S33 = 16Const S34 = 23Const S41 = 6Const S42 = 10Const S43 = 15Const S44 = 21<br />
x = ConvertToWordArray(sMessage)<br />
a = &amp;H67452301b = &amp;HEFCDAB89c = &amp;H98BADCFEd = &amp;H10325476<br />
For k = 0 To UBound(x) Step 16AA = aBB = bCC = cDD = d<br />
FF a, b, c, d, x(k + 0), S11, &amp;HD76AA478FF d, a, b, c, x(k + 1), S12, &amp;HE8C7B756FF c, d, a, b, x(k + 2), S13, &amp;H242070DBFF b, c, d, a, x(k + 3), S14, &amp;HC1BDCEEEFF a, b, c, d, x(k + 4), S11, &amp;HF57C0FAFFF d, a, b, c, x(k + 5), S12, &amp;H4787C62AFF c, d, a, b, x(k + 6), S13, &amp;HA8304613FF b, c, d, a, x(k + 7), S14, &amp;HFD469501FF a, b, c, d, x(k + 8), S11, &amp;H698098D8FF d, a, b, c, x(k + 9), S12, &amp;H8B44F7AFFF c, d, a, b, x(k + 10), S13, &amp;HFFFF5BB1FF b, c, d, a, x(k + 11), S14, &amp;H895CD7BEFF a, b, c, d, x(k + 12), S11, &amp;H6B901122FF d, a, b, c, x(k + 13), S12, &amp;HFD987193FF c, d, a, b, x(k + 14), S13, &amp;HA679438EFF b, c, d, a, x(k + 15), S14, &amp;H49B40821<br />
GG a, b, c, d, x(k + 1), S21, &amp;HF61E2562GG d, a, b, c, x(k + 6), S22, &amp;HC040B340GG c, d, a, b, x(k + 11), S23, &amp;H265E5A51GG b, c, d, a, x(k + 0), S24, &amp;HE9B6C7AAGG a, b, c, d, x(k + 5), S21, &amp;HD62F105DGG d, a, b, c, x(k + 10), S22, &amp;H2441453GG c, d, a, b, x(k + 15), S23, &amp;HD8A1E681GG b, c, d, a, x(k + 4), S24, &amp;HE7D3FBC8GG a, b, c, d, x(k + 9), S21, &amp;H21E1CDE6GG d, a, b, c, x(k + 14), S22, &amp;HC33707D6GG c, d, a, b, x(k + 3), S23, &amp;HF4D50D87GG b, c, d, a, x(k + 8), S24, &amp;H455A14EDGG a, b, c, d, x(k + 13), S21, &amp;HA9E3E905GG d, a, b, c, x(k + 2), S22, &amp;HFCEFA3F8GG c, d, a, b, x(k + 7), S23, &amp;H676F02D9GG b, c, d, a, x(k + 12), S24, &amp;H8D2A4C8A<br />
HH a, b, c, d, x(k + 5), S31, &amp;HFFFA3942HH d, a, b, c, x(k + 8), S32, &amp;H8771F681HH c, d, a, b, x(k + 11), S33, &amp;H6D9D6122HH b, c, d, a, x(k + 14), S34, &amp;HFDE5380CHH a, b, c, d, x(k + 1), S31, &amp;HA4BEEA44HH d, a, b, c, x(k + 4), S32, &amp;H4BDECFA9HH c, d, a, b, x(k + 7), S33, &amp;HF6BB4B60HH b, c, d, a, x(k + 10), S34, &amp;HBEBFBC70HH a, b, c, d, x(k + 13), S31, &amp;H289B7EC6HH d, a, b, c, x(k + 0), S32, &amp;HEAA127FAHH c, d, a, b, x(k + 3), S33, &amp;HD4EF3085HH b, c, d, a, x(k + 6), S34, &amp;H4881D05HH a, b, c, d, x(k + 9), S31, &amp;HD9D4D039HH d, a, b, c, x(k + 12), S32, &amp;HE6DB99E5HH c, d, a, b, x(k + 15), S33, &amp;H1FA27CF8HH b, c, d, a, x(k + 2), S34, &amp;HC4AC5665<br />
II a, b, c, d, x(k + 0), S41, &amp;HF4292244II d, a, b, c, x(k + 7), S42, &amp;H432AFF97II c, d, a, b, x(k + 14), S43, &amp;HAB9423A7II b, c, d, a, x(k + 5), S44, &amp;HFC93A039II a, b, c, d, x(k + 12), S41, &amp;H655B59C3II d, a, b, c, x(k + 3), S42, &amp;H8F0CCC92II c, d, a, b, x(k + 10), S43, &amp;HFFEFF47DII b, c, d, a, x(k + 1), S44, &amp;H85845DD1II a, b, c, d, x(k + 8), S41, &amp;H6FA87E4FII d, a, b, c, x(k + 15), S42, &amp;HFE2CE6E0II c, d, a, b, x(k + 6), S43, &amp;HA3014314II b, c, d, a, x(k + 13), S44, &amp;H4E0811A1II a, b, c, d, x(k + 4), S41, &amp;HF7537E82II d, a, b, c, x(k + 11), S42, &amp;HBD3AF235II c, d, a, b, x(k + 2), S43, &amp;H2AD7D2BBII b, c, d, a, x(k + 9), S44, &amp;HEB86D391<br />
a = AddUnsigned(a, AA)b = AddUnsigned(b, BB)c = AddUnsigned(c, CC)d = AddUnsigned(d, DD)Next<br />
MD5 = LCase(WordToHex(a) &amp; WordToHex(b) &amp; WordToHex(c) &amp; WordToHex(d))End Function%&gt;<br />
seguro.asp<br />
Você está autenticado com o endereço de e-mail:Click aqui para logout.<br />
validar.asp<br />
Secure Login<br />
&lt;%If sSeed = &#8220;&#8221; ThenResponse.Write &#8220;Sua sessão expirou. Você tem esperado por muito tempo, ou seu navegador não suporta cookies.&#8221;ElseIf sEmailAddress = &#8220;&#8221; ThenResponse.Write &#8220;Você não introduzir um endereço de e-mail.&#8221;ElseIf LCase(sEmailAddress) LCase(sValidEmailAddress) ThenResponse.Write &#8220;Você digitou um endereço de e-mail não registrado.&#8221;ElseIf sHash = &#8220;&#8221; And sPassword &#8220;&#8221; Then<br />
If sPassword sValidPassword ThenResponse.Write &#8220;A senha digitada no incorreta. (Inseguro)&#8221;ElseResponse.Write &#8220;Login feito com sucesso!Click aqui para continuar.Click aqui para logout.&#8221;&#8216; Store credentials in the Session objectSession(&#8220;autent&#8221;) = &#8220;true&#8221;Session(&#8220;auth_emailaddress&#8221;) = sEmailAddressEnd IfElseIf sHash &#8220;&#8221; ThenIf sHash sValidHash ThenResponse.Write &#8220;A senha digitada esta incorreta.&#8221;ElseResponse.Write &#8220;Login feito com sucesso!Click aqui para continuar.Click aqui para logout.&#8221;<br />
Session(&#8220;autent&#8221;) = &#8220;true&#8221;Session(&#8220;auth_emailaddress&#8221;) = sEmailAddressEnd IfElseResponse.Write &#8220;Ocorreu um erro.&#8221;End If<br />
%&gt;<br />
Voltar<br />
md5.js<br />
function array(n) {for(i=0;i=0) {a=a%0&#215;80000000;a&gt;&gt;=b;a+=0&#215;40000000&gt;&gt;(b-1);} elsea&gt;&gt;=b;return a;}<br />
function shl1(a) {a=a%0&#215;80000000;if (a&amp;0&#215;40000000==0&#215;40000000){a-=0&#215;40000000;a*=2;a+=0&#215;80000000;} elsea*=2;return a;}<br />
function shl(a,b) {a=integer(a);b=integer(b);for (var i=0;i=0)if (t2&gt;=0)return ((t1&amp;t2)+0&#215;80000000);elsereturn (t1&amp;b);elseif (t2&gt;=0)return (a&amp;t2);elsereturn (a&amp;b);}<br />
function or(a,b) {a=integer(a);b=integer(b);var t1=(a-0&#215;80000000);var t2=(b-0&#215;80000000);if (t1&gt;=0)if (t2&gt;=0)return ((t1|t2)+0&#215;80000000);elsereturn ((t1|b)+0&#215;80000000);elseif (t2&gt;=0)return ((a|t2)+0&#215;80000000);elsereturn (a|b);}<br />
function xor(a,b) {a=integer(a);b=integer(b);var t1=(a-0&#215;80000000);var t2=(b-0&#215;80000000);if (t1&gt;=0)if (t2&gt;=0)return (t1^t2);elsereturn ((t1^b)+0&#215;80000000);elseif (t2&gt;=0)return ((a^t2)+0&#215;80000000);elsereturn (a^b);}<br />
function not(a) {a=integer(a);return (0xffffffff-a);}<br />
/* Here begin the real algorithm */<br />
var state = new array(4);var count = new array(2);count[0] = 0;count[1] = 0;var buffer = new array(64);var transformBuffer = new array(16);var digestBits = new array(16);<br />
var S11 = 7;var S12 = 12;var S13 = 17;var S14 = 22;var S21 = 5;var S22 = 9;var S23 = 14;var S24 = 20;var S31 = 4;var S32 = 11;var S33 = 16;var S34 = 23;var S41 = 6;var S42 = 10;var S43 = 15;var S44 = 21;<br />
function F(x,y,z) {return or(and(x,y),and(not(x),z));}<br />
function G(x,y,z) {return or(and(x,z),and(y,not(z)));}<br />
function H(x,y,z) {return xor(xor(x,y),z);}<br />
function I(x,y,z) {return xor(y ,or(x , not(z)));}<br />
function rotateLeft(a,n) {return or(shl(a, n),(shr(a,(32 &#8211; n))));}<br />
function FF(a,b,c,d,x,s,ac) {a = a+F(b, c, d) + x + ac;a = rotateLeft(a, s);a = a+b;return a;}<br />
function GG(a,b,c,d,x,s,ac) {a = a+G(b, c, d) +x + ac;a = rotateLeft(a, s);a = a+b;return a;}<br />
function HH(a,b,c,d,x,s,ac) {a = a+H(b, c, d) + x + ac;a = rotateLeft(a, s);a = a+b;return a;}<br />
function II(a,b,c,d,x,s,ac) {a = a+I(b, c, d) + x + ac;a = rotateLeft(a, s);a = a+b;return a;}<br />
function transform(buf,offset) {var a=0, b=0, c=0, d=0;var x = transformBuffer;<br />
a = state[0];b = state[1];c = state[2];d = state[3];<br />
for (i = 0; i &lt; 16; i++) {x[i] = and(buf[i*4+offset],0xff);for (j = 1; j &lt; 4; j++) {x[i]+=shl(and(buf[i*4+j+offset] ,0xff), j * 8);}}<br />
/* Round 1 */a = FF ( a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */d = FF ( d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */c = FF ( c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */b = FF ( b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */a = FF ( a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */d = FF ( d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */c = FF ( c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */b = FF ( b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */a = FF ( a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */d = FF ( d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */c = FF ( c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */b = FF ( b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */a = FF ( a, b, c, d, x[12], S11, 0x6b901122); /* 13 */d = FF ( d, a, b, c, x[13], S12, 0xfd987193); /* 14 */c = FF ( c, d, a, b, x[14], S13, 0xa679438e); /* 15 */b = FF ( b, c, d, a, x[15], S14, 0x49b40821); /* 16 */<br />
/* Round 2 */a = GG ( a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */d = GG ( d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */c = GG ( c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */b = GG ( b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */a = GG ( a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */d = GG ( d, a, b, c, x[10], S22, 0&#215;2441453); /* 22 */c = GG ( c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */b = GG ( b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */a = GG ( a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */d = GG ( d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */c = GG ( c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */b = GG ( b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */a = GG ( a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */d = GG ( d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */c = GG ( c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */b = GG ( b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */<br />
/* Round 3 */a = HH ( a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */d = HH ( d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */c = HH ( c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */b = HH ( b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */a = HH ( a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */d = HH ( d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */c = HH ( c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */b = HH ( b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */a = HH ( a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */d = HH ( d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */c = HH ( c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */b = HH ( b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */a = HH ( a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */d = HH ( d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */c = HH ( c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */b = HH ( b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */<br />
/* Round 4 */a = II ( a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */d = II ( d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */c = II ( c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */b = II ( b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */a = II ( a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */d = II ( d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */c = II ( c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */b = II ( b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */a = II ( a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */d = II ( d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */c = II ( c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */b = II ( b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */a = II ( a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */d = II ( d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */c = II ( c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */b = II ( b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */<br />
state[0] +=a;state[1] +=b;state[2] +=c;state[3] +=d;<br />
}<br />
function init() {count[0]=count[1] = 0;state[0] = 0&#215;67452301;state[1] = 0xefcdab89;state[2] = 0x98badcfe;state[3] = 0&#215;10325476;for (i = 0; i &lt; digestBits.length; i++)digestBits[i] = 0;}<br />
function update(b) {var index,i;<br />
index = and(shr(count[0],3) , 0x3f);if (count[0]= 63) {transform(buffer, 0);}}<br />
function finish() {var bits = new array(8);var	padding;var	i=0, index=0, padLen=0;<br />
for (i = 0; i &lt; 4; i++) {bits[i] = and(shr(count[0],(i * 8)), 0xff);}for (i = 0; i &lt; 4; i++) {bits[i+4]=and(shr(count[1],(i * 8)), 0xff);}index = and(shr(count[0], 3) ,0x3f);padLen = (index &lt; 56) ? (56 &#8211; index) : (120 &#8211; index);padding = new array(64);padding[0] = 0&#215;80;for (i=0;i&lt;padLen;i++)update(padding[i]);for (i=0;i&lt;8;i++)update(bits[i]);<br />
for (i = 0; i &lt; 4; i++) {for (j = 0; j &lt; 4; j++) {digestBits[i*4+j] = and(shr(state[i], (j * 8)) , 0xff);}}}<br />
/* End of the MD5 algorithm */<br />
function hexa(n) {var hexa_h = &#8220;0123456789abcdef&#8221;;var hexa_c=&#8221;";var hexa_m=n;for (hexa_i=0;hexa_i&lt;8;hexa_i++) {hexa_c=hexa_h.charAt(Math.abs(hexa_m)%16)+hexa_c;hexa_m=Math.floor(hexa_m/16);}return hexa_c;}<br />
var ascii=&#8221;01234567890123456789012345678901&#8243; +&#8221; !\&#8221;#$%&amp;&#8217;()*+,-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ&#8221;+&#8221;[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~&#8221;;<br />
function MD5(entree){var l,s,k,ka,kb,kc,kd;<br />
init();for (k=0;k&lt;entree.length;k++) {l=entree.charAt(k);update(ascii.lastIndexOf(l));}finish();ka=kb=kc=kd=0;for (i=0;i&lt;4;i++) ka+=shl(digestBits[15-i], (i*8));for (i=4;i&lt;8;i++) kb+=shl(digestBits[15-i], ((i-4)*8));for (i=8;i&lt;12;i++) kc+=shl(digestBits[15-i], ((i-8)*8));for (i=12;i&lt;16;i++) kd+=shl(digestBits[15-i], ((i-12)*8));s=hexa(kd)+hexa(kc)+hexa(kb)+hexa(ka);return s;}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/aspnet/asp-login-com-md5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recuperar propriedades da imagem</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/recuperar-propriedades-da-imagem/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/recuperar-propriedades-da-imagem/#comments</comments>
		<pubDate>Sun, 19 Sep 2010 13:41:50 +0000</pubDate>
		<dc:creator>X@nBuRzUm</dc:creator>
				<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[Dreamweaver]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Usabilidade]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=5204</guid>
		<description><![CDATA[Recuperar propriedades da imagem de um arquivo não-local ,obter todos os dados da imagem, arquivo com base na definição de algoritmos em tamanho IMGSZ que também pega a imagem de um site remoto usando XML, suporta arquivos GIF e JPG. A sintaxe a utilizar getSize é a seguinte: someBoolean = pegatamanho(URL, width, height, depth, flType) [...]]]></description>
			<content:encoded><![CDATA[<p>Recuperar propriedades da imagem de um arquivo não-local ,obter todos os dados da imagem, arquivo com base na definição de algoritmos em tamanho IMGSZ que também pega a imagem de um site remoto usando XML, suporta arquivos GIF e JPG.</p>
<p>A sintaxe a utilizar getSize é a seguinte:</p>
<p><em>someBoolean = pegatamanho(URL, width, height, depth, flType)<br />
‘URL, largura, altura, profundidade, flType</em></p>
<p>• someBoolean será definido com base verdadeiro ou falso se o script foi capaz de determinar os atributos de imagens<br />
• URL é uma entrada informando a  URL da imagem, tais como http://www.sintchospir.com/images/sua_imagem.jpg<br />
• largura será definida para a largura da imagem, ou -1 para script failed<br />
• A altura será definido para a altura da imagem, ou -1 para script failed<br />
•Profundidade  será definido como a profundidade da imagem, ou -1 para script failed<br />
• FlType será definido o tipo de arquivo de imagem foi, GIF ou JPG</p>
<p>Utilizando as funções de string binária como midb e lenb. Uma vez que todas as imagens são arquivos binários, essas funções são necessárias.</p>
<p><code> 0 then 'começar em bytes não no início<br />
     strbuff = midb(objHTTP.responseBody, offset, bytes)<br />
     end if<br />
     if bytes = -1 then        ' Get All!<br />
        GetBytes = objHTTP.responseBody  'ReadAll<br />
     else<br />
        GetBytes = midb(objHTTP.responseBody, 1, bytes)<br />
     end if<br />
  end function</p>
<p>  function lngConvert(strTemp)<br />
     lngConvert = clng(ascb(leftb(strTemp, 1)) + ((ascb(rightb(strTemp, 1)) * 256)))<br />
  end function</p>
<p>  function lngConvert2(strTemp)<br />
     lngConvert2 = clng(ascb(rightb(strTemp, 1)) + ((ascb(leftb(strTemp, 1)) * 256)))<br />
  end function</p>
<p>    function pegatamanho(URL, width, height, depth, flType)</p>
<p>     dim PNGflType<br />
     dim GIFflType<br />
     dim BMPflType<br />
     dim flTypeOf<br />
     dim obj<br />
     flTypeOf = ""<br />
     flType = "(unknown)"<br />
     Set obj = Server.CreateObject ("Microsoft.XMLHTTP")<br />
     obj.open "GET", URL, False<br />
     obj.send<br />
     '"Aqui nós temos os dados para o arquivo de imagem<br />
     pegatamanho = False<br />
     PNGflType = chr(137) &amp; chr(80) &amp; chr(78)<br />
     GIFflType = chrb(71) &amp; chrb(73) &amp; chrb(70)<br />
     BMPflType = chr(66) &amp; chr(77)<br />
     'Aqui estão as definições para o flTypes imagem, suportam GIF e JPG, mas você pode adicionar outros:)<br />
     flTypeOf = GetBytes(obj, 0, 3)<br />
     'Saiba quaul o flType da imagem<br />
     if flTypeOf = GIFflType then    'É um GIF!!!<br />
     flType = "GIF"<br />
     strbuffer = getbytes(obj, 0, -1) 'obter todos os dados da imagem<br />
     width= lngconvert(midb(strbuffer, 7, 2))<br />
     Height = lngconvert(midb(strbuffer, 9, 2))<br />
     Depth = 2 ^ ((ascb(GetBytes(obj, 11, 1)) and 7) + 1)<br />
     'É muito importante observar o ascB e midB, as imagens são arquivos binários<br />
     pegatamanho = True<br />
     else<br />
     strBuff = GetBytes(obj, 0, -1)        'obter o arquivo inteiro<br />
     SizeofFile = lenb(strBuff)<br />
     flgFound = 0<br />
     strTarget = chrb(255) &amp; chrb(216) &amp; chrb(255)<br />
     flgFound = instrb(strBuff, strTarget)<br />
     char = (midb(strbuff, 1, 3)) 'confira os primeiros caracteres<br />
     if flgFound = 0 then 'diferente de jpg ou GIF<br />
       exit function<br />
     end if<br />
     flType = "JPG"<br />
     lngPos = flgFound + 2<br />
     ExitLoop = false<br />
     do while ExitLoop = False and lngPos &lt; SizeofFile<br />
           do while ascb(midb(strBuff, lngPos, 1)) = 255 and lngPos &lt; SizeofFile<br />
              lngPos = lngPos + 1<br />
           loop<br />
           &#039;pesquisa até encontrar os dados<br />
           if ascb(midb(strBuff, lngPos, 1))  195 then<br />
              lngMarkerSize = lngConvert2(midb(strBuff, lngPos + 1, 2))<br />
              lngPos = lngPos + lngMarkerSize  + 1<br />
           else<br />
              ExitLoop = True 'temos tudo que precisamos<br />
           end if</p>
<p>     loop</p>
<p>           if ExitLoop = False then </p>
<p>              Width = -1<br />
              Height = -1<br />
              Depth = -1</p>
<p>           else</p>
<p>              Height = lngConvert2(midb(strBuff, lngPos + 4, 2))<br />
              Width = lngConvert2(midb(strBuff, lngPos + 6, 2))<br />
              Depth = 2 ^ (ascb(midb(strBuff, lngPos + 8, 1)) * <img src='http://www.mxstudio.com.br/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /><br />
              pegatamanho = True</p>
<p>           end if</p>
<p>     end if</p>
<p>  set obj = Nothing<br />
  end function<br />
%&gt;</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/dreamweaver/recuperar-propriedades-da-imagem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP &#8211; Arrays Dinâmicos</title>
		<link>http://www.mxstudio.com.br/marketingdigital/usabilidade/asp-arrays-dinamicos/</link>
		<comments>http://www.mxstudio.com.br/marketingdigital/usabilidade/asp-arrays-dinamicos/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 17:34:42 +0000</pubDate>
		<dc:creator>X@nBuRzUm</dc:creator>
				<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Usabilidade]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=4611</guid>
		<description><![CDATA[Os Arrays ou matrizes são umas estruturas de dados muito utilizadas em Qualquer linguagem. Trata-se de variáveis, porém que estão preparadas para Salvar uma quantidade maior de elementos. É como uma variável que tem vários compartimentos para salvar a informação e a cada um desses compartimentos há que acessar como um índice. Antes de utilizar [...]]]></description>
			<content:encoded><![CDATA[<p>Os Arrays ou matrizes são umas estruturas de dados muito utilizadas em Qualquer linguagem. Trata-se de variáveis, porém que estão preparadas para Salvar uma quantidade maior de elementos. É como uma variável que tem vários compartimentos para salvar a informação e a cada um desses compartimentos há que acessar como um índice. </p>
<p>Antes de utilizar um array devemos declara-lo de maneira obrigatória, para isso utilizamos a palavra chave DIM, deste modo. </p>
<p>dim Array(50) </p>
<p>Despois da palavra DIM devemos indicar o nome do array e a seguir, entre parênteses, coloca-se o número de posição máxima do array, neste caso 50. </p>
<p>Os arrays começam desde a posição 0, ou seja, o primeiro elemento de um array está na posição 0. Portanto, se o array foi definido com 50 campos, como no exemplo, terá 51 elementos, primeira posição será a 0 e a última posição seria a 50.</p>
<p>Para atribuir um valor a um array se realiza igual que uma variável, porém acessando com o índice da posição que queremos escrever. </p>
<p>Array(0) = 128 </p>
<p>Para utilizar o conteúdo de um array devemos faze-lo indicando o índice ao que se deseja acessar. Por exemplo, se quiséssemos imprimir na página a primeira posição de nosso Array o faríamos desta maneira. </p>
<p>document.write(Array(0)) </p>
<p>Agora vamos ver um exemplo sobre como utilizar os arrays, onde vamos realizar dois percorridos, um para escrever nele e o outro para ler a informação e escreve-la na página.<br />
dim matriz (10)<br />
for i=0 to 10<br />
   matriz(i)=100 * i<br />
next<br />
for i=0 to 10<br />
   document.writeln(&#8220;Posicao &#8221; &amp; i &amp; &#8220;: &#8221; &amp; matriz(i) &amp; &#8220;<br />&#8220;)<br />
next</p>
<p>Este exemplo escreveria na página as posições do array, que contém variáveis numéricas que correspondem de multiplicar seu índice por 100.<br />
Bom agora, que vimos como funciona os arrays iremos partir para Arrays dinâmicos.</p>
<p><strong>Aplicação de Objetos  com Arrays Dinâmicos</strong></p>
<p>Dentro de qualquer aplicação que eventualmente é necessário o uso de matrizes de dados. Nós precisamos encontrar os dados para o objetos, a fim de simplificar a lógica que vai ser de execução, bem como para tornar o código mais flexível e escalável. Usando uma classe que engloba uma série de objetos, que se mantém e matriz de objetos, descobrimos que a classe superior nos permite adquirir uma forma simplificada de classificar, filtrar e controlar os itens de dados, bem como os valores desses itens de dados.</p>
<p>Essas classes simplificada permitirá que alcance rapidamente e aprender a usar um array dinâmico que mantém uma matriz dinâmica de objetos (ambas as matrizes dinâmicas objetos que estão sendo eles mesmos). </p>
<p>A camada mais profunda da nossa estrutura é uma classe simples de todos os atributos que você pode precisar de realizar.</p>
<p>&#8216;*********** class ***************<br />
‘Classe valor do item<br />
Class item_value_class<br />
	Private c_item_value<br />
	&#8216; handle value  (let/get)<br />
	public property let value(byval data)<br />
		c_item_value = data<br />
	end property<br />
	public property get value()<br />
		value = c_item_value<br />
	end property<br />
end class<br />
&#8216;******************************************</p>
<p>Observe que esta classe tem um atributo com duas propriedades para permitir a escrita e leitura para o atributo. Isto é normal e não é nada especial. Passamos agora para a próxima camada, onde encontramos a nossa primeira matriz dinâmica.</p>
<p>&#8216;********* classe média ***********************<br />
Class item_class<br />
	Private c_item<br />
	Private c_values()  &#8216; Matriz de todos os valores para o item<br />
	Private c_size  &#8216; max determina os valores possíveis para o item</p>
<p>	&#8216; handle item  (let/get)<br />
	public property let item(byval data)<br />
		c_item = data<br />
	end property<br />
	public property get item()<br />
		item = c_item<br />
	end property</p>
<p>	&#8216;*************************************************<br />
	&#8216;************* metodos ***************************<br />
	&#8216;*************************************************</p>
<p>	 &#8216;*********** Event Handlers *************<br />
	Private Sub Class_Initialize()<br />
		Redim c_values(0)<br />
		Set c_values(0) = New item_value_class<br />
		c_size=0<br />
	End Sub<br />
	&#8216; matar todos os objetos em Adata e livrar memória<br />
	Private Sub Class_Terminate()<br />
	  Dim x<br />
			for x=0 to ubound(c_values)<br />
				Set c_values(0) = nothing<br />
			next<br />
	  c_size=0<br />
	  erase c_values<br />
	End Sub<br />
  &#8216;****************************************<br />
	Public Function getValue(iPos)<br />
		getValue = c_values(iPos).value<br />
	End Function</p>
<p>	Public Function putValue(iPos,data)<br />
		if iPos&gt;c_size then<br />
			Redim preserve c_values(iPos)<br />
			for x = c_size+1 to ubound(c_values)<br />
				set c_values(x)= New item_value_class<br />
			next<br />
			c_size=iPos<br />
		end if<br />
		c_values(iPos).value=cstr(data)</p>
<p>	End Function</p>
<p>	Public Property get numbervalues()<br />
		numbervalues=c_size<br />
	end property</p>
<p>	Public property get allvalues()<br />
		allvalues=c_values<br />
	end property</p>
<p>	Public property let allvalues(ByRef temp)<br />
		Dim x<br />
		Dim sizetochange<br />
		sizetochange=ubound(temp)<br />
			 if sizetochange &lt; c_size then<br />
				for x=sizetochange+1 to ubound(c_values)<br />
					set c_values(x)=nothing<br />
				next<br />
				Redim preserve c_values(sizetochange)<br />
			else<br />
				Redim preserve c_values(sizetochange)<br />
				for x = c_size+1 to ubound(c_values)<br />
					set c_values(x)= New item_value_class<br />
				next<br />
			end if<br />
			c_size=sizetochange<br />
			for x=0 to sizetochange<br />
				c_values(x).value = temp(x).value<br />
			next<br />
	end property<br />
end class<br />
&#39;******************************************</p>
<p>Vemos a instanciação de uma matriz de objetos de valor a nossa classe. Observe sempre que adicionar um valor com o método putValue nossa matriz é automaticamente aumentado e instanciado. Há uma propriedade especial chamada de &quot;allvalues&quot; que cria um ponto de referência para a matriz que esta classe possui. Para todos os valores do GET propriedade retorna a referência para a matriz,  enquanto o imóvel locado nos permite definir um outro array de objetos da nossa classe de valor igual a outro. As propriedades allvalues tornam-se importantes em nossa camada superior chamada de Dynamic_Object_Array_Class &quot;.</p>
<p>&#39;******** classe superior *********************<br />
Class Dynamic_Object_Array_Class<br />
  &#39;************** Properties **************<br />
  Private aData()<br />
  Private c_size<br />
  &#39;****************************************</p>
<p>  &#39;*********** Event Handlers *************<br />
  Private Sub Class_Initialize()<br />
    Redim aData(0)<br />
    Set aData(0) = New item_class<br />
    c_size=0<br />
    c_numberlinks=1<br />
  End Sub<br />
 &#39; matar todos os objetos em Adata e livrar memória<br />
  Private Sub Class_Terminate()<br />
    Dim x<br />
		for x=0 to ubound(aData)<br />
			Set aData(0) = nothing<br />
		next<br />
    c_size=0<br />
    erase aData<br />
  End Sub<br />
  &#39;****************************************<br />
 	Public Property Get allitems()<br />
		allitems = aData<br />
	end property</p>
<p>	Public Property Get getsize()<br />
		getsize = c_size<br />
	end property</p>
<p>  Public Function push()<br />
		c_size = c_size+1<br />
		Redim preserve aData(c_size)<br />
		set aData(c_size)= New item_class<br />
		push=c_size<br />
  End Function</p>
<p>  Public Function pop(ipos)<br />
    Dim tempcount<br />
		pop=aData(ipos).item<br />
		if ipos &lt; c_size then<br />
		  for tempcount=ipos to (c_size &#8211; 1)<br />
			aData(tempcount).item = aData(tempcount+1).item<br />
			aData(tempcount).allvalues = aData(tempcount+1).allvalues<br />
		  next<br />
		end if<br />
		set aData(c_size)= nothing<br />
		c_size = c_size-1<br />
		Redim preserve aData(c_size)<br />
  End Function’<br />
End Class<br />
&#39;********** classe superior final ***************</p>
<p>A classe superior implementa um push-pop e um método para aumentar automaticamente ou diminuir o array de objetos da nossa classe de item que a classe superior detém. Observe que o método de classe anteriores allvalues é implementada no método pop na nossa class = mais alto. Agora que temos a nossa matriz dinâmica, devemos colocá-lo para uso. A maneira mais fácil de ver como ele funciona é a de armazenar alguns dados na matriz e em seguida, exibi-la novamente.</p>
<p>&#39;******** <strong>Exemplo de código usando Array Dinâmico</strong> *****</p>
<table>
<p> &lt;%<br />
	for y=0 to my_array.getsize<br />
		Response.Write &quot;<br />
<tr>
<td width='100'>Item: </td>
<td width='10'>&#8221; &amp; _<br />
					&#8220;</td>
<td width='200'>&#8221; &amp; _<br />
					my_array.allitems()(y).item &amp;  _<br />
 		&#8220;</td>
<td width='200'></td>
</tr>
<p> &#8221;<br />
		for x=0 to my_array.allitems()(y).numbervalues<br />
		   if my_array.allitems()(y).getValue(x)&#8221;" then<br />
			Response.Write &#8220;<br />
<tr>
<td width='100'></td>
<td width='10'>&#8221; &amp; _<br />
				&#8220;</td>
<td width='200'>Value:</td>
<td width='200'>&#8221; &amp; _<br />
				my_array.allitems()(y).getValue(x) &amp; &#8220;</td>
</tr>
<p>&#8221;<br />
		   end if<br />
	  	next<br />
	next<br />
 %&gt;<br />
 </table>
<p>&#8216;********************************************</p>
<p>Depois de executar o nosso código de exemplo, devemos ver o seguinte em nosso navegador da Web:</p>
<p>&#8216;******* Exemplo de Output *********************</p>
<p>Item:   Olá<br />
Item:   TRUE FALSE<br />
  Value: yes<br />
  Value: no<br />
Item:   Seu Nome<br />
Item:   Outro Item<br />
Item:   Lugar em Concurso<br />
  Value: Terceiro<br />
  Value: segundo<br />
  Value: Primeiro<br />
Item:   Escolha o Hotel<br />
  Value: Nacional Inn<br />
  Value: Ibis</p>
<p>&#8216;********* end example output ****************</p>
<p><strong>Resumo</strong></p>
<p>Arrays dinâmicos de objetos que contêm matrizes dinâmicas dos objetos nos permitem criar a estrutura que precisamos de uma forma simplificada e reutilizáveis. Nossas matrizes também serão auxiliadas na classificação, filtragem e manipulação de dados. Apesar de eu não ter incluído o código de exemplo para a classificação e filtragem, uma vez que você entender como funcionam as classes, gerando a classificação e os métodos de filtragem é bastante fácil.<br />
Podemos ainda, Redimensionar arrays<br />
Este tipo de arrays redimensionais se chama array dinâmico. Para criar este tipo de arrays podemos utilizar a sentença dim (como criávamos os anteriores) ou a sentença redim, com a particularidade que não lhe colocamos nenhum valor entre parênteses onde antes indicávamos o número de campos do array. </p>
<p>dim meu_array()<br />
redim meu_outro_array() </p>
<p>Quando usamos arrays dinâmicos podemos utilizar a sentença redim para indicar o número de dimensões e a quantidade de campos de cada dimensão. </p>
<p>Com esta sentença estamos indicando que meu_array deve ter o tamanho 10. Campos desde 0 até a 10.</p>
<p>redim meu_array(10) </p>
<p>Se indicamos a chave &#8220;preserve&#8221; estamos garantindo que o conteúdo dos campos que havia previamente no array se mantém. </p>
<p>redim preserve meu_array(20) </p>
<p>Por último, se em qualquer momento reduzimos o número de campos perderemos o que possa ter sido salvo nos campos que se eliminaram. </p>
<p>No seguinte exemplo criamos um array dinâmico e o redimensionamos inicialmente a tamanho 3. Preenchemos e mostramos seus distintos valores. Posteriormente o redimensionamos outra vez para que chegue até a posição 7, salvando os valores antigos. Para acabar preenchendo os campos que criamos novos e mostramos todos os valores do array. </p>
<p>dim frutas()<br />
redim frutas(3) </p>
<p>frutas(0) = &#8220;Pêra&#8221;<br />
frutas(1) = &#8220;Uva&#8221;<br />
frutas(2) = &#8220;Maçã&#8221;<br />
frutas(3) = &#8220;Melão&#8221; </p>
<p>for each fruta in frutas<br />
    document.write fruta &amp; &#8220;<br />&#8221;<br />
next </p>
<p>redim preserve frutas(7) </p>
<p>frutas(4) = &#8220;Melancia&#8221;<br />
frutas(5) = &#8220;Laranja&#8221;<br />
frutas(6) = &#8220;Banana&#8221;<br />
frutas(7) = &#8220;Tangerina&#8221; </p>
<p>for each fruta in frutas<br />
    document.write fruta &amp; &#8220;<br />&#8221;<br />
next </p>
<p><strong>Para saber o número de campos de um array </strong></p>
<p>Um dos dados típicos que necessitamos extrair de um array é seu número de posições, útil, por exemplo, para fazer um percorrido a um array, desde a primeira até o último campo. Para isso, utilizamos a função uBound() de VBScript. A função UBound permite descobrir o que o membro da matriz superior é definida. Isto torna mais fácil o loop para percorrer um array do início ao fim.</p>
<p>Digamos que você usa a função split para analisar uma string em um array. Então você:<br />
Dim ListaArray</p>
<p>SentStr = &#8221; Oitenta e sete anos atrás nossos pais trouxeram &#8221;<br />
ListaArray = split(SentStr, &#8221; &#8220;)</p>
<p>Agora você tem uma matriz listarray que pretende percorrer, mas você não sabe até onde ir. Como saber quando você tiver chegado ao final do array ?</p>
<p>A resposta é a função UBound. ubound dá-lhe o membro superior matriz de uma matriz. Neste caso, a matriz tem 10 palavras na mesma. O arrays começam sempre a numeração em zero, significa que essa matriz pontos de 0 a 9 são tomadas. Se você fizer<br />
ubound(ListArray)</p>
<p>O resultado é 9.</p>
<p>Você pode então fazer um loop através dos membros, que operam em cada um .</p>
<p>for loopctr = 0 to ubound(ListaArray)<br />
response.write ListaArray(loopctr)<br />
next</p>
<p><strong>Outro Exemplo: </strong></p>
<p>dim paises (4)<br />
response.write ubound (paises)<br />
Escreveria na página o número do campo mais alto do array paises, neste caso 4.<br />
Ademais, se por acaso algum dia necessitamos, também temos a nossa disposição a função lBound(), que devolve o número da posição com índice menor do array.<br />
response.write lbound (paises) </p>
<p>A última linha sobre nosso array de paises definido anteriormente escreveria um 0 na página web, visto que o array começa na posição zero. </p>
<p><strong>Arrays multidimensionais</strong></p>
<p>Podem-se construir matrizes multidimensionais, ou seja, que nos permitam criar matrizes de várias coordenadas. Para trabalhar com eles utiliza-se uma vírgula que separa os dois índices. Por exemplo, podemos definir uma matriz de 10&#215;10 desta maneira.</p>
<p>dim Array2Dimensoes (9,9)</p>
<p>Como o array é de 10 campos, utilizamos um 9 e suas posições serão as 10 que vão desde o 0 ao 9. Para escrever e ler do Array podemos utilizar a vírgula de maneira similar a como se declara. Por exemplo, para colocar dados na posição 0,4 faríamos o seguinte:</p>
<p>Array2Dimensoes (0,4) = &#8220;texto posicao 0,4&#8243; </p>
<p>Abaixo, temo um exemplo de como armazenar o conteúdo do vetor em uma session, muito usada pelo pessoal de e-commerce para carrinhos de compras.</p>
<p>&lt;%<br />
&quot;A função abaixo é generica e pode ser utilizada como um arquivo include<br />
Function VetorMonta(Acao,Valor)<br />
&quot;Usamos o case para manipular a ação da função<br />
Select Case Trim(Acao)<br />
&quot;Inclui nova posicao ao vetor<br />
Case &quot;Incluir&quot;<br />
&quot;Guarda na variavel Vetor o conteudo da Session<br />
Vetor = Session(&quot;GuardaVetor&quot;)<br />
&quot;Verifica se a Variavel Vetor é um Array, caso nao for entao definimos ela um Array<br />
If Not IsArray(Vetor) Then Vetor = Array() End if<br />
&quot;Verifica se o Valor que esta sendo inserido já esta no Vetor se estiver entao nao inseri para nao haver duplicidades do vetor<br />
If InStr(Join(Vetor), Valor) = 0 Then<br />
&quot;Este comando ira preservar o vetor e adciona + 1 valor<br />
ReDim preserve Vetor(UBound(Vetor)+1)<br />
&quot;Este é o valor que estamos adicionando no vetor<br />
Vetor(Ubound(Vetor )) = Valor<br />
&quot;Coloca o conteudo da variavel vetor dentro da Session<br />
Session(&quot;GuardaVetor&quot;) = Vetor<br />
End if<br />
&quot;Apaga uma determinada posicao do vetor<br />
Case &quot;Excluir&quot;<br />
&quot;Inicia a varivel vetor como vazia<br />
Vetor = Array()<br />
&quot;Criamos uma nova variavel Auxiliar e guardamos o valor da Session<br />
AuxVetor = Session(&quot;GuardaVetor&quot;)<br />
&quot;Definine a Session como um Array vazio<br />
Session(&quot;GuardaVetor&quot;) = Array()<br />
&quot;Faz um laço em todas as posições do vetor<br />
For i = 0 To Ubound(AuxVetor)<br />
&quot;Verifica se o valor passado para excluir do vetor é diferente do valor que esta dentro da variavel Auxiliar<br />
If AuxVetor(i)  (Valor) Then<br />
&#8220;Este comando ira preservar o vetor e adciona + 1 valor<br />
ReDim preserve Vetor (UBound(Vetor)+1)<br />
&#8220;Este é o valor que estamos adicionando no vetor<br />
Vetor (Ubound(Vetor)) = AuxVetor(i)<br />
&#8220;Coloca o conteudo da variavel vetor dentro da Session<br />
Session(&#8220;GuardaVetor&#8221;) = Vetor<br />
End If<br />
Next<br />
&#8220;Fim do Case<br />
End Select<br />
End Function<br />
Function Incluir_Vetor<br />
&#8220;Executa a função que ira criar uma posição do vetor, basta passar a acao e o valor<br />
Call VetorMonta(&#8220;Incluir&#8221;,Replace(Request(&#8220;Valor_Vetor&#8221;),&#8221;"&#8221;,&#8221;"))<br />
End Function<br />
Function Excluir_Vetor(Valor_Vetor)<br />
&#8220;Executa a função que ira deletar uma posição do vetor, basra passar a acao e o valor<br />
Call VetorMonta(&#8220;Excluir&#8221;,Valor_Vetor)<br />
End Function<br />
Function VisualizaValoresVetor<br />
&#8220;Veriofica se a Session é um array, caso nao for então atribuimos a Session como um Array<br />
IF Not IsArray(session(&#8220;GuardaVetor&#8221;)) Then session(&#8220;GuardaVetor&#8221;) = Array() End if<br />
&#8220;Faremos um laço entre todos os vetores criados<br />
For x = 0 To ubound(session(&#8220;GuardaVetor&#8221;)) &#8220;ira fazer um laço mostrando todos os vetores criados<br />
&#8220;Mostra os valores armazenados na Session e adiciona um link para apagar a posição do vetor caso queira<br />
Response.Write session(&#8220;GuardaVetor&#8221;)(x) &amp; &#8220;<a>(Apagar)</a>&#8221; &amp; &#8220;<br />&#8221;<br />
Next<br />
&#8220;Verifica se a Session tem alguma posição, se tiver mostra a opção de apagar todos os vetores<br />
If ubound(session(&#8220;GuardaVetor&#8221;)) &gt;= 0 Then<br />
Response.Write &#8220;<br />&#8221; &amp;&#8221;<a href="vetor.asp?action=LimpaVetor">Apagar Tudo</a>&#8221; &amp; &#8220;<br />&#8221; &#8220;Imprime o Vetor na tela<br />
End if<br />
End Function<br />
Function LimpaVetor<br />
&#8220;Limpa todas as posiçoes do vetor, apagando a Session<br />
session(&#8220;GuardaVetor&#8221;) = Empty<br />
End Function<br />
&#8220;USAMOS CASES PARA MANUPULARAS CHAMADAS DAS FUNÇÕES<br />
useraction=request(&#8220;action&#8221;)<br />
select case useraction<br />
Case &#8220;Incluir_Vetor&#8221;<br />
&#8220;Chama a function que ira incluir um valor para o vetor<br />
Call Incluir_Vetor<br />
Case &#8220;Excluir_Vetor&#8221;<br />
&#8220;Chama a function que ira excluir um valor para o vetor<br />
Call Excluir_Vetor(Request(&#8220;Valor_Vetor&#8221;))<br />
Case &#8220;LimpaVetor&#8221;<br />
&#8220;Chama a function que apagar todas as posições do vetor<br />
Call LimpaVetor<br />
End Select<br />
%&gt;</p>
<table width="100%">
<form name="form" method="post" action="?action=Incluir_Vetor">
<tr>
<td>
</td>
</tr>
</form>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/marketingdigital/usabilidade/asp-arrays-dinamicos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP &#8211; Editor FCKeditor</title>
		<link>http://www.mxstudio.com.br/tecnologia/geral/asp-editor-fckeditor/</link>
		<comments>http://www.mxstudio.com.br/tecnologia/geral/asp-editor-fckeditor/#comments</comments>
		<pubDate>Sun, 23 May 2010 21:31:50 +0000</pubDate>
		<dc:creator>X@nBuRzUm</dc:creator>
				<category><![CDATA[ASP.net]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Usabilidade]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=3903</guid>
		<description><![CDATA[O FCKEditor é o editor bem popular devido ao seu uso nativo em vários SGC's como o Drupal, o PHP-Nuke, Joomla! e mais diversos outros aplicativos que o integram em sua estrutura.]]></description>
			<content:encoded><![CDATA[<p>O FCKEditor é um editor WYSIWYG online gratuíto e open-source, multiproposital, feito em JavaScript que cria páginas visualmente, gerando um código de saída HTML estilizado.<br />
O FCKEditor é o editor bem popular devido ao seu uso nativo em vários SGC&#8217;s como o Drupal, o PHP-Nuke, Joomla! e mais diversos outros aplicativos que o integram em sua estrutura.<br />
Seu uso é extremamente fácil e ele está disponivel para praticamente todas as linguagens web disponíveis. Você pode baixar o FCKeditor, através do link http://ckeditor.com/download. Caso queira ver como funciona o editor, clique aqui e veja o demo. Descompacte em uma pasta especifica, por exemplo &#8220;fckeditor&#8221;, assim seus arquivos irão ficar melhor organizados. Será criada um diretório com o nome de /fckeditor/, todo este artigo só funcionará se os arquivos estiverem dentro de um diretório com este nome, pois se você preferir utilizar um diretório com outro nome, terá que mudar o nome no código também. A primeira coisa a fazer é deletar o diretório com o nome samples. (/fckeditor/samples/), dentro deste diretório estão alguns exemplos de como utilizar o editor, mas estes exemplos podem ser utilizados por usuários não autorizados para invadir o seu sistema.</p>
<p>Ainda dentro do diretório /fckeditor/, apague todos os arquivos de outra linguagem de programação, (PHP, CFM, LASSO, PL, PY) mantenha apenas os XML, HTML , JS e ASP.</p>
<p>Os arquivos principais que utilizaremos serão fckconfig.js e fckeditor.asp.<br />
fckconfig.js</p>
<p>FCKConfig.ToolbarSets["Default"] = [<br />
['Source','DocProps','-','Save','NewPage','Preview','-','Templates'],<br />
['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],<br />
['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],<br />
['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],<br />
&#8216;/&#8217;,<br />
['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],<br />
['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote','CreateDiv'],<br />
['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],<br />
['Link','Unlink','Anchor'],<br />
['Image','Flash','Table','Rule','Smiley','SpecialChar','PageBreak'],<br />
&#8216;/&#8217;,<br />
['Style','FontFormat','FontName','FontSize'],<br />
['TextColor','BGColor'],<br />
['FitWindow','ShowBlocks','-','About']          // No comma for the last row.<br />
] ;</p>
<p>FCKConfig.ToolbarSets["Basic"] = [<br />
['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About']<br />
] ;</p>
<p>ckeditor.asp</p>
<p>Definimos o trecho abaixo de código com estes novos dados. Aqui é definido o diretório base, tamanho da área do editor e também o tipo de barra formada, podendo variar entre Default ou Basic mostrado anteriormente no arquivo fckconfig.js.</p>
<p>Private Sub Class_Initialize()<br />
sBasePath         = &#8220;/fckeditor/&#8221;<br />
sWidth            = &#8220;100%&#8221; &#8216;Aqui é a largura, aconselho a manter 1005<br />
sHeight           = &#8220;400&#8243;  &#8216;Aqui é altura<br />
sToolbarSet             = &#8220;Default&#8221;<br />
sValue</p>
<p>Na segunda alteração do arquivo fckeditor.asp iremos mudar para o caminho fckeditor/editor/<br />
Public Function CreateHtml( instanceName )<br />
dim html</p>
<p>If IsCompatible() Then</p>
<p>Dim sFile, sLink<br />
If Request.QueryString( &#8220;fcksource&#8221; ) = &#8220;true&#8221; Then<br />
sFile = &#8220;fckeditor.original.html&#8221;<br />
Else<br />
sFile = &#8220;fckeditor.html&#8221;<br />
End If</p>
<p>sLink = sBasePath &amp; &#8220;fckeditor/editor/&#8221; &amp; sFile &amp; &#8220;?InstanceName=&#8221; + instanceName</p>
<p>If (sToolbarSet &amp; &#8220;&#8221;)  &#8220;&#8221; Then<br />
sLink = sLink + &#8220;&amp;Toolbar=&#8221; &amp; sToolbarSet<br />
End If</p>
<p>Iremos agora fazer a chamada deste arquivo fckeditor.asp em uma página asp com formulário simples.</p>
<p><!-- #include file="fckeditor/fckeditor.asp" --></p>
<form action="recebe.asp" method="post"> Título:</p>
<p>Notícia:</p>
</form>
<p>Na página onde você quer que apareça o editor, exatamente no local, coloque o seguinte código, iremos utilizar um include chamando o arquivo fckeditor.asp. Esta página também precisa estar dentro do diretório /fckeditor/</p>
<p><!-- #INCLUDE file="fckeditor.asp" --></p>
<p>Os caracteres especiais, palavras acentuadas e outros use a metatag:</p>
<p>A  acentuação, pode ser resolvida, apenas mudando no inicio das páginas de alteração e inserção de dados no banco de dados, faça as seguintes mudanças:</p>
<p>altera para:</p>
<p>Recuperando os dados dentro do editor. iremos utilizar um include chamando o arquivo fckeditor.asp.</p>
<p><!-- #INCLUDE file="fckeditor.asp" --></p>
<p>Vamos mudar o FCK Editor 2.6.4 , que vem habilitado para PHP por padrão, para nossa linguagem ASP, entre no arquivo fckconfig.js, dentro do diretório /fckeditor/ e altere as linhas:<br />
var _FileBrowserLanguage        = &#8216;asp&#8217;;        // asp | aspx | cfm | lasso | perl | php | py<br />
var _QuickUploadLanguage        = &#8216;asp&#8217;;        // asp | aspx | cfm | lasso | perl | php | py</p>
<p>Você pode mudar o visual (skin) do editor, iremos usar a do office 2003, para isso iremos alterar no arquivo fckconfig.js, dentro do diretório /fckeditor/ a seguinte linha:<br />
FCKConfig.SkinPath = FCKConfig.BasePath + &#8216;skins/office2003/&#8217;;</p>
<p>você indica o caminho da skin que você quer que apareça, é só copiar e subistituir, é só escolher um dos tres:</p>
<p>FCKConfig.SkinPath = FCKConfig.BasePath + &#8216;skins/default/&#8217; ;<br />
FCKConfig.SkinPath = FCKConfig.BasePath + &#8216;skins/office2003/&#8217; ;<br />
FCKConfig.SkinPath = FCKConfig.BasePath + &#8216;skins/silver/&#8217; ;</p>
<p>você pode baixar mais skins acessando aqui: http://www.midiaville.com.br/docs/arquivos/skins/index.php<br />
Você também pode mudar o visual do meu editor, alterando os ícones da barra. Apenas no arquivo fckconfig.js, onde citamos acima. Mudando o parâmetro ToolbarSets</p>
<p>Para fazer upload de fotos, banner flash, arquivos para links e etc.</p>
<p>Navegue até o diretório: /fckeditor/editor/ filemanager/ connectors/<br />
Apague tudo que tiver lá dentro, deixe só o diretório /asp/ dentro dele, edite o arquivo config.asp</p>
<p>Na linha</p>
<p>ConfigIsEnabled = False &#8216;mude de False para true, isso habilita o upload<br />
ConfigUserFilesPath = &#8220;/userfiles/&#8221;</p>
<p>Coloque no lugar de userfiles o nome do seu diretório onde será feito o upload a barra no inicio quer dizer que este diretório está na raiz do site. Caso o diretório que você listou aqui não exista o fckeditor vai cria-lo.<br />
Algumas soluções para alguns erros apresentados pelo Editor.<br />
Dentro do diretório FCKeditor/_samples/asp/ existem vários exemplos, iremos utilizar o sample04.asp.</p>
<p>Deste arquivo copie:</p>
<p><!-- #INCLUDE file="fckeditor.asp" --></p>
<p>e cole no início de sua página de inserção e alteração de dados, no local onde está seu textarea, cole a outra parte do código</p>
<p>&lt;%<br />
Dim sBasePath<br />
sBasePath = Request.ServerVariables(&#8220;PATH_INFO&#8221;)<br />
sBasePath = Left( sBasePath, InStrRev( sBasePath, &#8220;/_samples&#8221; ) )<br />
Dim oFCKeditor<br />
Set oFCKeditor = New FCKeditor<br />
oFCKeditor.BasePath = sBasePath<br />
If Request.QueryString(&#8220;Skin&#8221;)  &#8220;&#8221; Then<br />
oFCKeditor.Config(&#8220;SkinPath&#8221;) = sBasePath + &#8220;editor/skins/&#8221; &amp; Server.HTMLEncode( Request.QueryString(&#8220;Skin&#8221;) ) + &#8220;/&#8221;<br />
End If<br />
oFCKeditor.Value = &#8221; &#8221;<br />
oFCKeditor.Create &#8220;FCKeditor1&#8243;<br />
%&gt;</p>
<p>Note-se que apaguei todos os comentários.<br />
Atenção! &#8211; A página de inserção e alteração de dados deve estar na pasta raiz do FCKeditor, no meu caso eu uso o diretório config.</p>
<p>Localizar os arquivos no servidor</p>
<p>Agora é a vez de localizarmos os arquivos no servidor, para não dar erros, localize:<br />
FCKeditor/editor/filemanager/browser/default/connectors/asp/config.asp<br />
Faça as mudanças, altere o trecho abaixo:</p>
<p>Dim ConfigIsEnabled<br />
ConfigIsEnabled = true &#8216;aqui estará false, muda para true</p>
<p>Para:</p>
<p>Dim ConfigUserFilesPath<br />
ConfigUserFilesPath = &#8220;/fotos/&#8221; &#8216;aqui coloca em qual diretório ele deve buscar os arquivos</p>
<p>Fazer o upload dos arquivos</p>
<p>Para  fazer o upload dos arquivos, evite os erros, ache o arquivo:</p>
<p>FCKeditor/editor/filemanager/upload/asp/config.asp</p>
<p>Faça as seguintes mudanças:</p>
<p>Dim ConfigIsEnabled<br />
ConfigIsEnabled = true] &#8216;aqui estava false, você muda para true</p>
<p>Nesse trecho:</p>
<p>Dim ConfigUserFilesPath<br />
ConfigUserFilesPath = &#8220;/fotos/&#8221; &#8216;aqui você mostra o diretório onde serão upados os arquivos</p>
<p>Estamos usando o diretório fotos, verifique sempre se o diretório que você está setando em seus arquivos config. está criado, preferencialmente que seja um diretório no diretório raiz do site.   Não esqueça das permissões de escrita no diretório indicado.</p>
<p>Sempre que for mudar o diretório, use a / no final, exemplo /fotos/, /banco/, não esqueça a barra no final pois ela será necessária na função de FSO do FCKeditor para ciriar subdiretórios,como é o caso de imagens, flash e outros,  pois para cada extensão de arquivo, o fckeditor usa um subdiretório.</p>
<p>O parent path  conhecido como &#8220;..&#8221;, não está disponível, isso se deve por resolução da Microsoft que o desabilitou por padrão na versão 6 do IIS. Então não use ../../../fotos/<br />
O Server.MapPath sempre aponta para a raiz de seu site, ou seja, se estiver na pasta &#8220;/includes/libs/&#8221; e quiser apontar para o arquivo &#8220;/db/meu.mdb&#8221;,  use Server.MapPath (&#8220;/db/meu.mdb&#8221;);<br />
Alterando a Largura e Altura do Textarea</p>
<p>Agora vamos para o arquivo FCKeditor/ FCKeditor.asp</p>
<p>Encontre o trecho:</p>
<p>Private Sub Class_Initialize()<br />
sBasePath = &#8220;/config/&#8221;<br />
sWidth = &#8220;465&#8243;<br />
sHeight = &#8220;450&#8243;<br />
sToolbarSet = &#8220;Default&#8221;<br />
sValue = &#8220;&#8221;</p>
<p>Nas linhas</p>
<p>sWidth = &#8220;465&#8243;<br />
sHeight = &#8220;450&#8243;</p>
<p>Vvocê pode mudar para a largura ou altura que quiser,  se for em pixels, não é necessário usar o px, use apenas os números.</p>
<p>Diretório base</p>
<p>Na linha do arquivo /FCKeditor.asp:<br />
sBasePath = &#8220;/config/&#8221;<br />
Altere para config, o seu pode estar como /FCKeditor/, aqui é necessário você mudar para o nome do diretório onde estão os arquivos, para não acontecer  os erros de xlm que geralmente acontecem.<br />
Alterar os dados do bd com o FCKeditor<br />
Para alterar os dados do banco de dados com o FCKeditor , você pode recuperar os dados do campo dentro do textarea, proceda da seguinte forma:</p>
<p>Na página altere os dados:</p>
<p>Para:</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/tecnologia/geral/asp-editor-fckeditor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

