quarta-feira, 31 de dezembro de 2003

0

Ano novo, tudo novo!

Olá All,


sim, eu sei que está acontecendo novamente. Estou deixando o site um pouco de lado, demorado para responder os emails e quase não ficando de bobeira online. Esse ano que está acabando foi bastante corrido e, ao que tudo indica, o que vem não será diferente.


Mas isso não significa que continuarei tratando com relativa "indiferença" os e-colegas. Pelo contrário. Espero que nesse novo ano nós possamos estar mais próximos e entrar em contato com mais frequência.


Estou planejando o início efetivo do desenvolvimento do novo site agora em janeiro. Assim, não vou tentar desenvolver a maioria das funcionalidades offline para depois apresentar. Iremos fazer isso juntos, sem pressa, no decorrer do tempo.


Desejo, de todo coração, que o Ano Novo seja repleto de novidades e descobertas a todos os amigos que sempre me lembram de quando estou ficando muito distante.


Abraços!



Esta matéria foi postada originalmente no ASP4Developers por Rubens N. Farias (site), que na época era "pós-graduado em análise de sistemas orientados a objetos, MCP, MCSD, MCAD, MCSD.NET e consultor em TI, além de idealizador do projeto ASP4Developers. Desenvolve sistemas sob medida, focados na satisfação do usuário, com qualidade e custo realista.". Hoje, vai saber...

segunda-feira, 15 de dezembro de 2003

0

Função para ordenar combos em Javascript

Esta simples função usa o algoritmo Bubblesort para ordenar os itens de uma combo sem perder o respectivo value.
<script language="Javascript">
 function OrdenaCombo(combo) {
  var Textos = new Array()
  var Valores = new Array()
  var n = combo.options.length
  for(i=0; i<n; i++) {Textos[i] = combo.options[i].text; Valores[i] = combo.options[i].value; }
  for (i=0; i<n; i++) {
    for (j=0; j<n-i; j++)
      if (Textos[j+1] < Textos[j]) {tmp = Textos[j]; Textos[j] = Textos[j+1]; Textos[j+1] = tmp; tmp = Valores[j]; Valores[j] = Valores[j+1]; Valores[j+1] = tmp; }
  }
  for(i=0; i<n; i++) {combo.options[0] = null; }
  for(i=0; i<n; i++) {combo.options[i] = new Option(Textos[i],Valores[i]); }
 }
</script>


Esta matéria foi postada originalmente no ASP4Developers por Daniel Ribeiro (site), que na época era "Programador ASP desde Março de 1999. Trabalhou em um provedor como desenvolvedor por 1 ano e em uma imobiliária desenvolvendo uma solução completa por mais 1 ano. Atualmente trabalha na DuPont do Brasil desenvolvendo sistemas Client-Server, em sua marioria, mas não se limitando a, usando ASP e SQLServer.". Hoje, vai saber...

terça-feira, 18 de novembro de 2003

0

Valide endereço de e-mail via Regular Expressions


Aqui está o código:


Dim objRegExpr As RegExp
Dim blnEmailOk As Boolean


Set objRegExpr = New RegExp


objRegExpr.Pattern = "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
blnEmailOk = objRegExpr.Test(Text1.Text) 


Alguns simbolos usados na Expressão:


\w localiza somente letras e dígitos
\. localiza o caracter .
* localiza zero ou mais ocorrências do caracter precedente
+ localiza uma ou mais ocorrências do caracter precedente



Esta matéria foi postada originalmente no ASP4Developers por Valmir Cinquini (site), que na época era "Analista/Programador C#, VB.Net, ASP, VB, Javascript e T-SQL

www.cinquini.com.br/vcinquini>". Hoje, vai saber...

0

Textarea nada, o negócio é HTMLAREA

Para aqueles que precisam de um editor On-line, ou seja, todo mundo, este além de ser excelente é FREE !!!


http://www.interactivetools.com/products/htmlarea/

Espero ter ajudado !



Esta matéria foi postada originalmente no ASP4Developers por Jefferson Faria Dias (site), que na época era "desenvolvedor em VB, ASP, XML, Javascript usando SQL Server. Atualmente migrando para o .Net, mais especificamente para o Vb.net ". Hoje, vai saber...

quarta-feira, 5 de novembro de 2003

1

Enviando o Formulário sem o Botão Submit


    Já me perguntaram algumas vezes como enviar um formulário sem utilizar um botão de Submit. As razões são as mais variadas: desde a estética da tela (muitas vezes o botão fica feio mesmo, pricipalmente se o design for arrojado, utilizando imagens e animação em Shockwave Flash) ou mesmo por razões funcionais, como no Internet Explorer, por exemplo, onde o formulário é enviado (sem qualquer pergunta ou confirmação!) quando o usuário tecla ENTER. Como resolver?
    A solução seria fazer o uso de uma função JavaScript, com um link chamando a função:


<script language="JavaScript">
function Enviar(NomeDoForm){

   document.forms[NomeDoForm].submit();
}
</script>


No link, você indica o NomeDoForm, variável que indica o nome do form que você deseja enviar. Desta maneira:


<a href="javascript: Enviar('formAluno')">Enviar</a>


O nome do form pode ser identificado no código HTML do form:


<form name="formAluno" method="post" action="aluno.asp">


Com as facilidades apresentadas pelo JavaScript, poderíamos fazer com que houvesse uma tela de confirmação antes de enviar. Desta maneira, incremetaríamos o código assim:


<script language="JavaScript">
function Enviar(NomeDoForm){

  var conf = false ;
  conf = confirm('Deseja realmente enviar?');
  if (conf){
    document.forms[NomeDoForm].submit();
  }

}
</script>


Note que esse tipo de estratégia que adotamos nos dá a flexibilidade de utilizarmos figuras como botões de Enviar ou até mesmo filmes Shockwave Flash animados que chamam a função JavaScript. Utilizando figuras, teríamos algo como:


<a href="javascript: Enviar('formAluno')"><img src="imagens/enviar.gif"></a>


No Flash, deve ser criado o botão que tenha como Action o seguinte código:


GetUrl("javascript: Enviar('formAluno')");


Obs.: O código utiliza document.forms pois ele é suportado por qualquer Browser, pois a notação NomeDoForm.submit() funciona somente no Internet Explorer. Ainda assim, é vantajoso utilizar document.forms mesmo que no IE, pois podemos contar com a flexibilidade de identificar qual form enviar mais facilmente.

Para saber um pouco mais sobre o envio de formulários via Javascript e suas vantagens leia o artigo Formulário com várias Ações?



Esta matéria foi postada originalmente no ASP4Developers por Adriano Nântua, que na época era "Engenheiro de software e analista de sistemas; Desenvolvedor ASP, Delphi, C/C++ e Java/JSP/Servlets; InterBase fan; Linux fan; Alvirrubro inveterado.". Hoje, vai saber...

2

Inserindo figuras guardadas no banco de dados


O código abaixo demonstra como inserir em um documento HTML
qualquer uma figura guardada em uma base de dados.

<HTML>
<BODY>
Esta página mostra figuras cadastradas em uma base de dados<p>
<img src="figura.asp?cod=736">

<p>
<img src="figura.asp?cod=877">
</BODY>
</HTML>


O parâmetro "cod" é o código da figura na tabela onde está guardada.


Vejamos agora o código de "figura.asp":

<%
Response.Expires = 0

Response.Buffer = true
Response.Clear
Response.ContentType = "image/gif"

'bote aqui sua conexão Conn à base de dados

set qrFigura = Conn.Execute("select campofigura from tabela where cod =" & request.querystring("cod"))

Response.BinaryWrite qrFigura("campofigura")

qrFigura.Close

set qrFigura = nothing

Conn.Close
set Conn = nothing

Response.End
%>

Note que qualquer documento, HTML ou ASP, pode usar este script,
mesmo que esteja em outro servidor, bas
tando para tal indicar o endereço completo do script na Web.



Esta matéria foi postada originalmente no ASP4Developers por Adriano Nântua, que na época era "Engenheiro de software e analista de sistemas; Desenvolvedor ASP, Delphi, C/C++ e Java/JSP/Servlets; InterBase fan; Linux fan; Alvirrubro inveterado.". Hoje, vai saber...

quinta-feira, 30 de outubro de 2003

0

Função de leitura de queries em JSCRIPT para (IB 6 / Firebird)

function lerquery(strSQL){
 var sNome  = Request.ServerVariables("SERVER_NAME");
 var sCaminho = Server.MapPath("<caminho_seu_DB>");


 var sConn = "DRIVER={Easysoft IB6 ODBC};" +
 "SERVER="+ sNome +";"+
 "DATABASE="+ sNome +":"+ sCaminho +";"+
 "UID=SYSDBA;"+
 "PWD=;"+
 "DIALECT=3;"+
 "CHARSET=ISO8859_1;"+
 "ROLE=";


 var cmd = new ActiveXObject("ADODB.Command");
 with (cmd)
 {
  ActiveConnection = sConn;
  CommandText = strSQL;
  CommandType = 1;
  CommandTimeout = 3;
  Prepared = true;
 }
 var lerquery = cmd.Execute();
 return(lerquery);
}



Esta matéria foi postada originalmente no ASP4Developers por César M. Conceição (site), que na época era "Analista / Programador Pleno, mais de 4 anos de experiência no desenvolvimento de sistemas online.(HTML/XHTML/ASP/JAVASCRIPT/DHTML/MS SQL/FIREBIRD/INTERBASE/ACCESS)". Hoje, vai saber...

sexta-feira, 17 de outubro de 2003

0

Salvar um Recordset em um arquivo TXT

O código ASP abaixo salva um recorset INTEIRO em um arquivo de texto, delimitado por ;


set fs = Server.CreateObject("Scripting.FilesystemObject")


set arquivo = fs.CreateTextFile(arquivo.txt)


arquivo.Write (rsgeral.GetString(adClipString, , ";", vbCrLf, ""))


 



Esta matéria foi postada originalmente no ASP4Developers por ROBSON MENDONÇA, que na época era "Desenvolvedor de Tecnologias Microsoft". Hoje, vai saber...

0

Apagar mais de um ítem em um listbox

Se você tem um botão que apaga um ítem em um listbox, sabe do problema que se tem quando tentamos apagar mais de um ítem. Esse código resolve o problema:


function apaga_item()
{
var f = document.frm1.list1.options.length;
var items = '';
for(var i = 0; i < f; i++)
{
if (document.frm1.list1.options[i].selected)
{
 items = items + ';' + i
}
}
items=items + ';';
var t = document.frm1.list1.options.length;
var f = -1;
for(var d = 0; d < t + 1; d++)
{
var s = ';'+d+';';
if(items.search(s)!=-1)
{
if(f==-1)
{
document.frm1.list1.options[d] = null;
f=d;
}
else
{
document.frm1.list1.options[f] = null;
}
}
}
}



Esta matéria foi postada originalmente no ASP4Developers por ROBSON MENDONÇA, que na época era "Desenvolvedor de Tecnologias Microsoft". Hoje, vai saber...

0

Validação de Data

Script para validar uma data enviada por um parâmetro, validando inclusive so o ano é bisexto


{
var a=document.frm1.data01.value
var chk    = 0;
var maxDay = 0;


var dd = a.slice(0,2)
var mm = a.slice(3,5)
var yyyy = a.slice(6,10)


maxDay = max_day(mm, yyyy); 


if((dd <= 0) || (dd > maxDay))
{ chk = 1;}
else if((mm <= 0) || (mm > 12))
{ chk = 1;}
else if((yyyy <= 0))
{ chk = 1;}


if(chk == 1)
{
alert('Data Inválida! Tente novamente');
document.frm1.data01.value='';
document.frm1.data01.focus()
}
else
{
document.frm1.submit();
}
}
function max_day(mn, yr)
{
   var mDay;
if((mn == 4) || (mn == 6) || (mn == 9) || (mn == 11))
{
mDay = 30;
}
else if(mn == 2)
{
mDay = isLeapYear(yr) ? 29 : 28;   
}
else
{
mDay = 31;
}
return mDay;


}


function isLeapYear(yr)
{
if (yr % 2 == 0)
return true;
return false;
}



Esta matéria foi postada originalmente no ASP4Developers por ROBSON MENDONÇA, que na época era "Desenvolvedor de Tecnologias Microsoft". Hoje, vai saber...

terça-feira, 14 de outubro de 2003

0

Combos de Datas

Esse código gera combos de acordo com a data passada por parametro. Caso nehuma data seja informada, o script usa a data atual.


 function GeraComboDia(d)
 dim data, dia, i, msg
  msg = ""
  data = trim(d)


  if data <> "" and isDate(data) then
   dia = day(data)
  else
   dia = day(now)
  end if
  
  for i = 1 to 31
   if i = dia then
    msg = msg & "<option value='" & i & "' selected>" & right("00" & i,2) & "</option>"
   else
    msg = msg & "<option value='" & i & "'>" & right("00" & i,2) & "</option>"
   end if
  next
  
  GeraComboDia = msg
 end function


 function GeraComboMes(d)
 dim data, mes, i, msg
  msg = ""
  data = trim(d)


  if data <> "" and isDate(data) then
   mes = month(data)
  else
   mes = month(now)
  end if
  
  for i = 1 to 12
   if i = mes then
    msg = msg & "<option value='" & i & "' selected>" & Meses(i) & "</option>"
   else
    msg = msg & "<option value='" & i & "'>" & Meses(i) & "</option>"
   end if
  next
  
  GeraComboMes = msg
 end function


 function GeraComboAno(d)
 dim data, ano, i, msg
  msg = ""
  data = trim(d)


  if data <> "" and isDate(data) then
   ano = year(data)
  else
   ano = year(now)
  end if
  
  for i = (year(now) - 5) to (year(now) + 5)
   if i = ano then
    msg = msg & "<option value='" & i & "' selected>" & i & "</option>"
   else
    msg = msg & "<option value='" & i & "'>" & i & "</option>"
   end if
  next
  
  GeraComboAno = msg
 end function


O gera combo de Ano usa apenas 10 anos (os 5 ultimos e os 5 proximos). Esses valores podem ser mudados de acordo com a utilidade.


Para gerar os combos use:


<select name="dia">
<%= GeraComboDia(now()) %>
</select>


<select name="mes">
<%= GeraComboMes(now()) %>
</select>


<select name="dia">
<%= GeraComboAno(now()) %>
</select>



Esta matéria foi postada originalmente no ASP4Developers por Danilo Freitas, que na época era "Programador em VB, VBScript e SQL Server.". Hoje, vai saber...

0

Valida E-mail via ASP

Essa funcao tem como base um email no formato minimo de x@x.x


 function ValidaEmail(text)
  dim x, strArr, strDot, valida
  x = trim(text)
  strArr = instr(x,"@")
  valida = true
  
  if strArr < 2 then
   valida = false
  else
   x = mid(x,strArr + 1,len(x))
   strDot = instr(x,".")


   if instr(x,"@") <> 0 then valida = false
   if strDot < 2 then valida = false
   x = mid(x,strDot + 1,len(x))
   if trim(x) = "" then valida = false
  end if
  
  ValidaEmail = valida
 end function


Para testar eh so usar:
if not ValidaEmail("x@x.x")then
  response.write("email invalido")
  response.end()
end if



Esta matéria foi postada originalmente no ASP4Developers por Danilo Freitas, que na época era "Programador em VB, VBScript e SQL Server.". Hoje, vai saber...

sexta-feira, 3 de outubro de 2003

0

Janelas Popup no Datagrid .net

Em meu Datagrid eu tenho uma coluna HyperLinkColumn.  Sempre que um usuário clicar nela, uma janela pop-up se abrirá com um conteúdo relativo ao link.


Isto parece fácil exceto por um problema: Uma janela extra se abre com o texto: [object]. 


Este é o código que cria a coluna Hyperlink: 


HyperLinkColumn col3 = new HyperLinkColumn();
col3.DataNavigateUrlFormatString = javascript:window.open('detalhe.aspx?id={0}'','','width=640;height=480;
scrollbars=1; resizable=1');"
col3.DataTextField = "Produto";
col3.DataNavigateUrlField = "CodProduto";
grid1.Columns.Add(col3);


O objeto Hyperlink instrui ao browser para avaliar a expressão e trocar a pagina corrente pelo seu resultado, a menos que esse resultado seja void.
O valor retornado por window.open é um objeto, cuja representação string é a palavra [object].


Para se livrar deste efeito colateral, certifique-se que a expressão avaliada resulta em void


Aqui segue o que eu fiz para evitar este problema:


Na página aspx:


<SCRIPT LANGUAGE="JavaScript">
<!--
   void function popUp(URL)
   {
      window.open(URL, 'detalhe', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=700,height=500,left=10,top=10');
   }
// -->
</script>


no code-behind, mudei a linha para:
col3.DataNavigateUrlFormatString = "javascript:popUp('detalhe.aspx?id={0}');";



Esta matéria foi postada originalmente no ASP4Developers por Valmir Cinquini (site), que na época era "Analista/Programador C#, VB.Net, ASP, VB, Javascript e T-SQL

www.cinquini.com.br/vcinquini>". Hoje, vai saber...

quarta-feira, 1 de outubro de 2003

0

Como criar um XML via código ASP

<%
  Dim xmldoc
  Set xmldoc = Server.CreateObject("Microsoft.XMLDOM")


  ' Checa se o documento tem algum conteudo
  If (xmldoc.childNodes.length = 0) Then
    ' Criando o documento XML
    Set root = xmldoc.createNode("element", "Hi-Tech", "")
    xmldoc.appendChild (root)


    Set onode = xmldoc.createNode("element", "Employee", "")
    onode.Text = "Gurpreet Singh"


    xmldoc.documentElement.appendChild (onode)
    Set inode = xmldoc.createNode("element", "Address", "")


    onode.appendChild (inode)


    Set child = xmldoc.createNode("element", "Address1", "")
    child.Text = "Nepean Ont"


    inode.appendChild (child)


    Set child = xmldoc.createNode("element", "Address2", "")
    child.Text = "Canada"
    inode.appendChild (child)
  End If

' salva o arquivo xml
  xmldoc.save (Server.Mappath("savedI2.xml"))
%>



Esta matéria foi postada originalmente no ASP4Developers por Thiago Machado Souza (site), que na época era "Programador Desbravador, buscando quebrar todas as fronteiras além do horizonte da arte de programar !
www.thiagomachado.com.br". Hoje, vai saber...

quarta-feira, 17 de setembro de 2003

1

Tudo sobre txts leitura e criação

Este componente possui uma serie de propriedades e métodos para manipulação de arquivos e diretórios do servidor Web.


Para instanciar tal objeto numa página ASP escrevemos o seguinte código:


 


Dim Objeto


 


Set Objeto = Server.CreateObject("Scripting.FileSystemObject")
 


 


Esse objeto recém instanciado representa o Sistema de Arquivo do servidor Web. Devemos agora criar outro objeto(TextStream), a partir desse, para representar um determinado arquivo. Fazemos isso, utilizando o método OpenTextFile do FileSystemObject:


 


Set Arquivo = Objeto.OpenTextFile(Nome,modo,cria,formato)
 


 


Onde:


Nome
 Nome do arquivo a ser utilizado pelo script
 
Modo
 Modo de Abertura do arquivo. 1 para leitura, 2 para gravação por cima, 3 para gravação adicional.
 
Cria
 Valor Booleano que indica se o arquivo deve ser criado(true) ou não(false) caso não  exista.
 
Formato
 Indica o formato de gravação do arquivo a ser utilizado. -1 Unicode, 0 Ascii
 


 


Para lermos o conteúdo de um ar[quivo, podemos utilizar os seguintes métodos do objeto TextStream:


Read (quantidade)
 Lê um determinado número de caracteres do arquivo
 
ReadLine
 Lê uma linha inteira do arquivo
 
ReadAll
 Lê o arquivo inteiro de uma só vez
 


 


Mas se nos interessar gravar informações no arquivo, os métodos disponíveis são:


Write
 Grava uma string no arquivo
 
WriteLine
 Grava um string no arquivo, incluindo a quebra de linha
 
WriteBlankLines
 Grava um determinado número de linhas em branco num arquivo
 


 


Esse componente ActiveX ainda possui as seguintes propriedades:


 


AtEnOfLine
 Indica o fim de uma determinada linha do arquivo
 
AtEnOfStream
 Indica o Final do Arquivo
 
Column
 Indica em que coluna do arquivo estamos
 
Line
 Indica o número da linha atual do arquivo
 


 


O código a seguir mostra como abrimos um arquivo localizado no servidor WEB e exibimos seu conteúdo:


 


Exemplo 23.1 : Arquivo1.asp 


 


<% @Language=vbScript %>


<HTML><HEAD><TITLE>Curso ASP</TITLE></HEAD>


<BODY><CENTER>


<% dim final


   final = "</CENTER></BODY></HTML>"


   On Error Resume Next


   Set Obj = Server.CreateObject("Scripting.FileSystemObject")


   Set arquivo = Obj.OpenTextFile("D:\pessoas.txt",1)


   if Err then


       Response.write "Ocorreu um erro tentando abrir o arquivo!"


       Response.write final


       Response.End


   end if


   Response.Write "Lista de E-mails<BR>"


   Response.write "<HR>"


   do while arquivo.AtEndOfStream=false


     a = arquivo.Readline 


     response.write a & "<BR>"


     a = arquivo.Readline 


     response.write a & "<HR>"


   loop


   Response.Write "Nova Entrada"


   Response.Write "<FORM ACTION=Arquivo2.asp>"


   Response.Write "NOME : <INPUT TYPE=TEXT NAME=NOME><BR>"


   Response.Write "EMAIL : <INPUT TYPE=TEXT NAME=EMAIL><BR>"


   Response.Write "<INPUT TYPE=SUBMIT VALUE=ENVIAR></FORM>"


   REsponse.Write final


   arquivo.close


%>
 


 


A próxima página ASP mostra como escrever num arquivo localizado no servidor WEB. Lembrando que essa página deve ser acessada por um formulário WEB com um objeto de NAME=Nome e outro NAME=Email:


 


Exemplo 23.2 Arquivo2.asp


<% @Language=vbScript %>


<HTML><HEAD><TITLE>Curso ASP</TITLE></HEAD>


<BODY><CENTER>


<% dim final


   final = "</CENTER></BODY></HTML>"


   On Error Resume Next


   Set Obj = Server.CreateObject("Scripting.FileSystemObject")


   Application.Lock


   Set arquivo = Obj.OpenTextFile("D:\pessoas.txt",8)


   if Err then


       Response.write "Ocorreu um erro tentando abrir arquivo!"


       Response.write final


       Response.End


  end if


   Arquivo.WriteLine(Request("Nome"))


   Arquivo.WriteLine(Request("Email"))


   arquivo.close


   if Err then


       Response.write "Ocorreu um erro tentando gravar no arquivo!"


       Response.write final


       Response.End


   else


      Response.Write "Dados inseridos com sucesso!" & "<BR>"


      Response.Write "Nome:" & Request("Nome") & "<BR>"


      Response.Write "Email :" & Request("Email")


   end if


   Response.Write final


%>
 



Por Nissim Victor - 9167-9495


Web Developer



 


 



Esta matéria foi postada originalmente no ASP4Developers por Ozzy Sys Informatica LTDA, que na época era "Ozzy Sys Informatica LTDA -

Fabrica de software desenvolvido em
ASP , VB e plataforma .net ...
SQL , Oracle

Transformamos todos os seus problemas em soluções ...

( 011 ) 9167-9495". Hoje, vai saber...

terça-feira, 16 de setembro de 2003

3

Coloque notícias dinamicas no seu site

<html>
<head>
<script language='javascript'><!--
var speed=4500
i=0
j=0
m=0
function regenerate(){
window.location.reload()
}
function regenerate2(){
if (document.layers)
setTimeout("window.onresize=regenerate",450)
}


function update(){
if (document.layers){
document.mensagem.document.submensagem.document.write(tnoticias[i])
document.mensagem.document.submensagem.document.close()
}
else
document.all.submensagem.innerHTML=tnoticias[i]


if (i<tnoticias.length-1)
i++
else
i=0
setTimeout("update()",speed)
}


function Inicio() {
   if (document.all||document.layers) {
      regenerate2();
      update();}}
var tnoticias = new Array();
// Aqui você atualiza as notícias do site
// Cuidado com as aspas duplas
tnoticias[0]="<p align='left'><font size='1' face='Verdana,Arial,Helvetica'>05/09/2003 - Com reforma, a carga tributária pode crescer 4,5%</font></p>";
tnoticias[1]="<p align='left'><font size='1' face='Verdana,Arial,Helvetica'>05/09/2003 - Corte de impostos pode entrar na agenda</font></p>";
tnoticias[2]="<p align='left'><font size='1' face='Verdana,Arial,Helvetica'>05/09/2003 - Reforma tributária ajuda a distribuição de renda</font></p>";
tnoticias[3]="<p align='left'><font size='1' face='Verdana,Arial,Helvetica'>03/09/2003 - Receita vai concentrar fiscalização em devedor que ficou fora do Refis</font></p>";
// Você pode retirar ou acrescentar noticias no vetor
--></script>
</head>


<body onload="Inicio()">
<table>
<tr><td width='100%' height='70' valign='top'><div id="mensagem">
<div id="submensagem">Aguarde...</div>
</div></td></tr></table>


<!-- resto da página - -->


</body>
</html>


[]'s



Esta matéria foi postada originalmente no ASP4Developers por Rogério César (Craz¥ Man) (site), que na época era "Analista de Sistemas, programador, web Designer.". Hoje, vai saber...

0

Utilizando Janelas Pop-up's menos chatas

Eu particularmente odeio janelas Pop-Up's, então desenvolvi algo bem simples utilizando cookies para que pessoas como eu, que visitam meu site, não fiquem aborrecidas com as janelas, escolhendo se quer que estas continuem abrindo.


<!--  Index.asp -->


<%function iif(condicao,sim,nao)
   if condicao then
      iif=sim
   else
      iif=nao
   end if
end function
popup=request.cookies("pop")%>


<html>
<head>
<script language='javascript'><!--
function AbreJanela() {
   window.open('propaganda.asp','_blank','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, menubar=no, top=0, left=0, width=310, height=410');}
--></script>
</head>
<body<%=iif(popup="nao",""," onload='AbreJanela()'"%>>


<!-- Resto da página -->


</body>
</html>


 


<!-- propaganda.asp -->


<html>


<body>


<!-- figuras e banners e etc. -->


<%if request.QueryString("mostra")="nao" then
   response.cookies("pop")="nao"
   response.cookies("pop").Expires = #January 01, 2030#
   response.write "<script>window.close();</script>"
end if%>

<a href='javascript:window.close();'>Fechar Janela</a>
<br><br>
<a href='propaganda.asp?mostra=nao'>Não quero mais que esta janela apareça</a>
</body>
</html>


Espero que ajude!


[]'s



Esta matéria foi postada originalmente no ASP4Developers por Rogério César (Craz¥ Man) (site), que na época era "Analista de Sistemas, programador, web Designer.". Hoje, vai saber...

quarta-feira, 10 de setembro de 2003

0

Deixe o ROBO te pegar !!!

Se voce mantém uma versão RSS do seu site e quer que ela seja catalogada pelos webbots e outros coloque o seguinte código nos elementos do cabeçalho:

<link rel="alternate" type="application/rss+xml" title="RSS" href="url para o rss">

Esta matéria foi postada originalmente no ASP4Developers por Thiago Machado Souza (site), que na época era "Programador Desbravador, buscando quebrar todas as fronteiras além do horizonte da arte de programar !
www.thiagomachado.com.br". Hoje, vai saber...

domingo, 7 de setembro de 2003

0

Validador de Numeros

function isNumeric(str) {


 var objRegExp  = /^[0-9]*$/;
 return objRegExp.test(str);


}



Esta matéria foi postada originalmente no ASP4Developers por Daniel Passos (site), que na época era "Consultor de TI com fortes conhecimentos nas linguagens HTML, JavaScript, Perl, ASP e PHP. Conhecimentos básicos de Java (Swing, JSP & Servlets), orientação a objetos e UML, Banco de dados MySQL, SQL Server e Oracle.". Hoje, vai saber...

0

Validador de Valor (Money)

function isMoney(str) {


 var objRegExp  = /^[0-9]*,\d{2}$/;
 return objRegExp.test(str);


}



Esta matéria foi postada originalmente no ASP4Developers por Daniel Passos (site), que na época era "Consultor de TI com fortes conhecimentos nas linguagens HTML, JavaScript, Perl, ASP e PHP. Conhecimentos básicos de Java (Swing, JSP & Servlets), orientação a objetos e UML, Banco de dados MySQL, SQL Server e Oracle.". Hoje, vai saber...

0

Passa pro proximo campo

Passa pro proximo campo, passando o campo atual (pra ele descobrir o proximo)


função util quando um campo chegar a um determinado numero de caracteres ou selecionar um valor (num select). Use sua criatividade :)


function pcmp(campo) {


 var i, g;


 // Varre todo o formulario
 for (i = 0; i < campo.form.elements.length; i++) {


  // Quando achar a posição do campo atual
  if (campo == campo.form.elements[i]) {


   // Testa se ainda existe outro objeto no formulario
   if( i < (campo.form.elements.length - 1)) {
    
    // Varre todo o formulario apartir do proximo campo
    for (i = (i +1); i < campo.form.elements.length; i++) {


     // Caso esse campo não seja um campo oculto
     if( (campo.form.elements[i].type != "hidden") && (campo.form.elements[i].type != "reset") ) {
      campo.form.elements[i].focus();
      break; // Sai da leitura
     }  
    }
    
   }


   break; // Sai da leitura


  }


 }


}



Esta matéria foi postada originalmente no ASP4Developers por Daniel Passos (site), que na época era "Consultor de TI com fortes conhecimentos nas linguagens HTML, JavaScript, Perl, ASP e PHP. Conhecimentos básicos de Java (Swing, JSP & Servlets), orientação a objetos e UML, Banco de dados MySQL, SQL Server e Oracle.". Hoje, vai saber...

0

Compara Strings

function cptx(txt1, txt2)


 if(CSTR(TRIM(UCASE(txt1))) = CSTR(TRIM(UCASE(txt2)))) then
  cptx = true
 Else
  cptx = false
 End If
 
End Function



Esta matéria foi postada originalmente no ASP4Developers por Daniel Passos (site), que na época era "Consultor de TI com fortes conhecimentos nas linguagens HTML, JavaScript, Perl, ASP e PHP. Conhecimentos básicos de Java (Swing, JSP & Servlets), orientação a objetos e UML, Banco de dados MySQL, SQL Server e Oracle.". Hoje, vai saber...

0

Formata Valor (Money)

Formata para que aparecen sempre com dois digitos apos a virgula


function fmoeda(d)
 
 if( (Len(d) <=0) ) then
  fmoeda = "0,00"
 else
  if(instr(d,",")) then
   d = d & 00
   dezena   = Left(d, instr(d,",") - 1)
   centavos = Mid(d, instr(d,","), 3)
   fmoeda = dezena & centavos
  else
   fmoeda = d & ",00"
  End If
 End If


End Function


 



Esta matéria foi postada originalmente no ASP4Developers por Daniel Passos (site), que na época era "Consultor de TI com fortes conhecimentos nas linguagens HTML, JavaScript, Perl, ASP e PHP. Conhecimentos básicos de Java (Swing, JSP & Servlets), orientação a objetos e UML, Banco de dados MySQL, SQL Server e Oracle.". Hoje, vai saber...

0

Sql Seguro

E sempre importante dar uma limpada no que o usuario digita antes de inserrir no banco de dados, o ponta pe inicial e trocar todas as aspas por aspas duplas


Function sqlseguro(strTexto) 
  sqlseguro = Replace(strTexto, Chr(39), Chr(39) & Chr(39))
End Function


 



Esta matéria foi postada originalmente no ASP4Developers por Daniel Passos (site), que na época era "Consultor de TI com fortes conhecimentos nas linguagens HTML, JavaScript, Perl, ASP e PHP. Conhecimentos básicos de Java (Swing, JSP & Servlets), orientação a objetos e UML, Banco de dados MySQL, SQL Server e Oracle.". Hoje, vai saber...

0

Desabilitada Botão Direito do Mouse

var message="";


function clickIE() {
 if (document.all) {
  (message);
  return false;
 }
}


function clickNS(e) {
 if (document.layers||(document.getElementById&&!document.all)) {
  if (e.which==2||e.which==3) {
   (message);
   return false;
  }
 }
}


if (document.layers) {
 document.captureEvents(Event.MOUSEDOWN);
 document.onmousedown=clickNS;
}


else{
 document.onmouseup=clickNS;document.oncontextmenu=clickIE;
}


document.oncontextmenu=new Function("return false")



Esta matéria foi postada originalmente no ASP4Developers por Daniel Passos (site), que na época era "Consultor de TI com fortes conhecimentos nas linguagens HTML, JavaScript, Perl, ASP e PHP. Conhecimentos básicos de Java (Swing, JSP & Servlets), orientação a objetos e UML, Banco de dados MySQL, SQL Server e Oracle.". Hoje, vai saber...

quarta-feira, 27 de agosto de 2003

0

Mostrar apenas uma prévia da Notícia. Semelhante à Agestado

Esta função é apenas para retirar a prévia para por exemplo uma notícia.


PRIVATE CONST TAMANHO = 200


Function Previa(vstrTexto)



Dim strPrevia


if Len(vstrTexto) > TAMANHO Then



strPrevia = Mid(vstrTexto, 1, TAMANHO)


strPrevia = Mid(strPrevia, 1, InStrRev(strPrevia, " ") - 1) & "..."


Else



strPrevia = vstrTexto


End If


Previa = strPrevia


End Function



Esta matéria foi postada originalmente no ASP4Developers por Marcos Felisberto (site), que na época era "Desenvolvedor, com conhecimentos sólidos em ASP, Visual Basic, SQL Server. Iniciante em C# e .Net

MSNmarcos_felis@hotmail.com". Hoje, vai saber...

terça-feira, 26 de agosto de 2003

0

Formatando Hora em tempo real.

<script language="JavaScript">


 


function FormataHora(campo,tammax, teclapres) {


 


numHora = 24;


var tecla = teclapres.keyCode;


vr = document.frm.hora.value;


vr = vr.replace( ":", "" );


 


tam = vr.length ;


 


if (tecla == 8 ) {


 tam = tam - 1 ;


}


 


alert(tam);


if (tam == 2) {


    document.frm.hora.value = vr.substr( 0, 2 ) + ':' +  vr.substr( 2, tam );


}


 


if (vr.substr( 0, 2 ) > 24 ) {


            alert('O limite de horas é 24.');


            document.frm.hora.value = "";


            document.frm.hora.focus();       


}


 


if (vr.substr( 2, 4 ) > 60 ) {


            alert('O limite de minutos é 60.');


            document.frm.hora.value = "";


            document.frm.hora.focus();


}


 


 


}


</script>


 


<body>


<form name="frm">


            <input type="text" name="hora" onKeyUp="FormataHora(this,4,event);" maxlength="5">


            <input type="text" name="aqualque">


</form>



Esta matéria foi postada originalmente no ASP4Developers por Allan Torres (site), que na época era "Analista de sistemas, trabalho com ASP, Oracle, PHP, C, Ferramentas Case e estudo Eng. Elétrica. Sempre as ordens! ]:)". Hoje, vai saber...

0

Evitando que mecanismos de busca cadastrem suas páginas

Mesmo que você não cadastre suas páginas em nenhum site de busca, alguns robôs podem fazer isso automaticamente e incluí-los em seus mecanismos de busca.


Para que, esses "robôs" não incluam seu site, utilizamos o arquivo robots.txt e colocamos ele no diretório raiz do site
http://www.minha-empresa.com.br/robots.txt


Aqui vão alguns exemplos para excluir o site todo ou alguns diretórios


User-agent: *
Disallow: /


usando o exemplo acima, impedimos que todos os robôs ( User-agent: * ) cadastrem o diretório raiz ( Disallow: / ) e todos os seu subdiretórios, ou o site todo.


Agora para impedirmos que os robôs não cadastrem a pasta admin, usamos assim:


User-agent: *
Disallow: /admin/


Para impedir outras pastas, devemos apenas inserir mais linhas Disallow


User-agent: *
Disallow: /admin/
Disallow: /cgi-bin/
Disallow: /images/


Para impedir que, apenas o Google, cadastre o site todo


User-agent: Googlebot
Disallow: /


E por último, para liberar para todos os robôs (sem maldade), deixamos "Disallow" vazio


User-agent: *
Disallow:


Agora se você quiser que apenas algumas páginas não sejam inseridas nos mecanismos de busca, podemos usar meta tags


<META NAME="ROBOTS" CONTENT="NOINDEX">


O problema é que alguns robôs não suportam essa tag.


Depois que você fazer o seu arquivo robots.txt e colocá-lo no diretório raiz de seu site, você pode verificar se ele está funcionando utilizando o site
http://www.searchengineworld.com/cgi-bin/robotcheck.cgi


Nesse site ainda tem alguns outros exemplos de como utilizar o arquivo robots.txt


Espero que seja de grande ajuda


[]'s



Esta matéria foi postada originalmente no ASP4Developers por Rogério César (Craz¥ Man) (site), que na época era "Analista de Sistemas, programador, web Designer.". Hoje, vai saber...

sexta-feira, 22 de agosto de 2003

0

Como desabilitar o botão salvar das imagens - Mais fácil!!!

Utilize os meta tags HTML:



<meta http-equiv="imagetoolbar" content="no">



Esta matéria foi postada originalmente no ASP4Developers por Marcos Felisberto (site), que na época era "Desenvolvedor, com conhecimentos sólidos em ASP, Visual Basic, SQL Server. Iniciante em C# e .Net

MSNmarcos_felis@hotmail.com". Hoje, vai saber...

terça-feira, 19 de agosto de 2003

0

Procurando texto em um select

Estava trabalhando com um banco de dados com muitas empresas e colocava-as em um campo <select>, mas depois para selecioná-las era um trabalhão. Então desenvolvi essa função para facilitar a navegação.


<SCRIPT language='javascript'><!--
function BuscaSelect(campo) {
   var1=campo.value;
   var1=var1.toUpperCase()
   var2=form1.id.length;
   for (i=0;i<var2;i++) {
      aux="form1.id.options["+i+"].text";
      aux2=eval(aux);
      if (aux2.indexOf(var1)==0) {
         form1.id.selectedIndex=i;
         i=var2; } } }
--></SCRIPT>


<!-- Exemplo -->


<form name="form1">
<input type='text' onkeyup="BuscaSelect(this);"><br>
<select class='form' name='id' SIZE='5'>
<option selected value='1'> AÇOUGUE VACA LOUCA
<option value='2'> BAR ANA MARIA
<option value='3'> BAR SAO JORGE
<option value='4'> CASA DE COLCHÕES BEDROCK
<option value='5'> COMERCIAL TRANCOZO
<option value='10'> DELBOUX LINGERIE
<option value='12'> EBOLA PRODUTOS MEDICOS
<option value='15'> FUNERARIA VIAGE FELIZ
<option value='11'> GUIA TURISTICO BAHIA
<option value='52'> HOLTEL NOSSA SENHORA APARECIDA
<option value='6'> INDUSTRIA DE MOVEIS SAO LUCAS
<option value='7'> INDUSTRIA QUIMICA FELIZ
<option value='15'> JAMELI ALVES E CIA LTDA
<option value='53'> KELLY MOTORS
<option value='51'> LAVA RAPIDO DO MIGUEL
<option value='50'> MOTEL GOZO FELIZ
<option value='59'> NATAL LEGAL
<option value='58'> ONG PRODUTOS PARA GARIMPEIROS
<option value='57'> PATO DONALD
<option value='56'> QUEIJO DE FURNAS
<option value='95'> ROBERVAL ESQUADRIAS
<option value='60'> SAPATOS KIKO
<option value='55'> TULIO REBOUÇAS
<option value='85'> UVAS GOIANIA
<option value='66'> VACA LOKA PRODUTOS VETERINARIOS
<option value='77'> XENA PRINCESA DA SELVA
<option value='99'> ZOOLOGICO ARCA DE NOE
</select>


Para testar digite o começo do nome da empresa no campo "text". Caso deseje que o script busque qualquer parte do nome da empresa, basta trocar if (aux2.indexOf(var1)==0) por if (aux2.indexOf(var1)!=-1).


Espero que ajude!



Esta matéria foi postada originalmente no ASP4Developers por Rogério César (Craz¥ Man) (site), que na época era "Analista de Sistemas, programador, web Designer.". Hoje, vai saber...

0

Reconstrução do ASP4Developers

Amigos e visitantes,

gostaria de comunicar-lhes os planos que tenho para o site no futuro próximo, e para pedir-lhe ajuda para conseguir concretizá-los.

Como você já deve saber, há diversas tecnologias emergindo para o desenvolvimento de aplicações para a internet. Estas tecnologias estão mudando nossa forma de desenvolver sistemas, e assim, necessitamos de ferramentas que nos ajudem a explorar o que há de melhor nestas novidades.

    Hoje, o formato e conteúdo do www.asp4developers.com.br está focado no desenvolvimento de aplicações usando o ASP 3.0 e tecnologias relacionadas. Tenho a intenção de ampliar a sua abrangência, tornando-o um centro de referência para o aprendizado de outras tecnologias e assuntos relacionados ao desenvolvimento de sites.

    Para tanto, gostaria de pedir opiniões, sugestões e críticas ao site atual, e outras formas que podemos estar estudando para conseguirmos satisfazer melhor a você e aos demais visitantes. Funcionalidades que estejam faltando, recursos com bugs, nome, design e formato do site estarão sendo cuidadosamente reavaliados. Tenha certeza que mesmo a indicação do menor detalhe que possa ser aperfeiçoado será altamente bem-vinda e benéfica para toda a grande comunidade de desenvolvedores envolvidos.

    Fico no aguardo do seu contato (basta clicar no item "Sugestões" no topo da página). E, desde já, muito obrigado por contribuir para o sucesso do ASP4Developers. Este sucesso também é seu !

Esta matéria foi postada originalmente no ASP4Developers por Rubens N. Farias (site), que na época era "pós-graduado em análise de sistemas orientados a objetos, MCP, MCSD, MCAD, MCSD.NET e consultor em TI, além de idealizador do projeto ASP4Developers. Desenvolve sistemas sob medida, focados na satisfação do usuário, com qualidade e custo realista.". Hoje, vai saber...

segunda-feira, 18 de agosto de 2003

0

Como desabilitar o botão salvar das imagens

Para desabilitar os botões salvar, imprimir, enviar, das imagens no Internet Explorer 6 faça uma chamada da imagem de um map inexistente ou vazio.


<img src="foto.jpg" usemap="#mapvazio"><map name="mapvazio"><area shape="default" nohref></map>



Esta matéria foi postada originalmente no ASP4Developers por Rogério César (Craz¥ Man) (site), que na época era "Analista de Sistemas, programador, web Designer.". Hoje, vai saber...

terça-feira, 12 de agosto de 2003

1

Tratamento de comandos SQL

Sinceramente, eu não gosto muito de utilizar o Objeto ADODB.Command, que faz a mesma coisa, só que de uma melhor maneira.


Mas para aqueles que não são adeptos do objeto command, podem utilizar a função abaixo.


Desenvolvi esta função com o intuito de minimizar o esforço de ficar digitando desta maneira:


sqlCmd = "select * from tb_andre where id= " & request("id") & " and nome like '" & Nome & "'"


Agora fica assim:


sqlCmd = TrataSQL("Select * from tb_andre where id = [request(""id"")] AND nome like '[nome]'")


Ele já vai retornar o comando SQL, pronto para ser executado, ai vai o código:


Public Function TrataSQL(sqlCommand)
sqlCommand = replace(sqlCommand, "[",""" & ")
sqlCommand = replace(sqlCommand,"]"," & """)
sqlCommand = "TrataSQL = """ & sqlCommand & """"
execute( sqlCommand )
End Function



Esta matéria foi postada originalmente no ASP4Developers por André Guergolet (site), que na época era "Desenvolvedor de aplicativos voltados a WEB à 3 anos. Atualmente trabalha com aplicativos de monitoração de redes utilizando .NET e outros recursos.". Hoje, vai saber...

0

Armazenando Connection String de forma segura no Web.Config

Uma dúvida muito comum em empresas, é se existe segurança de guardar a connection String no Web.Config.


Segue alguns links abaixo e mais alguns comentários meus:


Storing Database Connection Strings Securely
http://msdn.microsoft.com/vcsharp/downloads/samples/default.aspx?pull=/library/en-us/dnnetsec/html/secnetch12.asp?frame=true#storingdatabaseconnectionstrings

How To: Store an Encrypted Connection String in the Registry
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/SecNetHT11.asp

de
Building Secure ASP.NET Applications
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/secnetlpMSDN.asp


Caso seja um nível de segurança apenas para o usuário, não vejo problemas em
colocar as informações de conexão no Web.Config.
A não ser que descubram um meio de fazer download do Web.Config via browser,
assim como faziamos antigamente no IIS 4 com o Global.asa do servidor
(
http://www.endereco.com.br/global.asa+.htr).

Esse é um risco que devemos correr, mas se o seu SQL Server não permitir
conexões remotas (de fora do domínio/rede interna), não vejo problemas, pois
a dificuldade para se conectar ao seu SQL Server aumenta bastante já que a
pessoa teria que se autenticar em sua rede para utilizá-lo.

Como tudo é feito internamente dentro do servidor, também não seria possível
a monitoração de pacotes.


Caso o seu problema seja também com a segurança interna da empresa, ou seja,
usuários e/ou alguns desenvolvedores não podem ter acesso a essa senha, a
solução é criar um método que criptografe e descriptografe a senha dentro de
uma classe fechada e desenvolvida pelo responsável.

Outra forma, é utilizar um usuário sem permissões de drop, truncate e delete
no banco de dados.

Também poderíamos criar dois ambientes, desenvolvimento e o ambiente de
produção, onde, no ambiente de produção só alguns usuários teriam acesso de
leitura no diretório onde o Web.Config ficaria, e uma ou algumas pessoas
responsáveis teriam acesso a este diretório.



Esta matéria foi postada originalmente no ASP4Developers por André Guergolet (site), que na época era "Desenvolvedor de aplicativos voltados a WEB à 3 anos. Atualmente trabalha com aplicativos de monitoração de redes utilizando .NET e outros recursos.". Hoje, vai saber...

sábado, 26 de julho de 2003

0

Formata Nome Completo

<%
'---------------------------------
' Função: Formata Nome Completo
' Autor: Régis Soares
' E-mail: regis_soares@hotmail.com
' Data de Criação: 26/07/2003
'---------------------------------
Function FormataNome(Nome)
 aNome = Split(Nome)
 For i = LBound(aNome) To UBound(aNome)
  If Len(aNome(i)) > 0 Then
   nNome = nNome & " " & UCase(Mid(aNome(i),1,1)) & _
    LCase(Mid(aNome(i),2))
  End If
 Next
 FormataNome = Trim(nNome)
End Function
%>
<%= FormataNome("   aCtIvE    sErVeR     pAgEs    ")%>



Esta matéria foi postada originalmente no ASP4Developers por Régis da Silva Soares, que na época era "Programador ASP e PHP". Hoje, vai saber...

sábado, 19 de julho de 2003

1

Remove espaços desnecessários do texto

<%
'---------------------------------------
' Função: Remove Espaços Desnecessários
' Autor: Régis Soares
' E-mail:
regis_soares@hotmail.com
' Data De Criação: 19/07/2003
'---------------------------------------
Function PreparaTexto(texto)
 aTexto = Split(texto, " ")
 For i = LBound(aTexto) To UBound(aTexto)
  If Len(aTexto(i)) > 0 Then nTexto = nTexto & " " & aTexto(i)
 Next
 PreparaTexto = Trim(nTexto)
End Function
%>
<%= PreparaTexto("Active     Server    Pages")%>


Esta matéria foi postada originalmente no ASP4Developers por Régis da Silva Soares, que na época era "Programador ASP e PHP". Hoje, vai saber...

3

Pega extensão do arquivo II

<%
'-----------------------------------------
' Função: Verifica se a extensão é válida
' Autor: Régis Soares
' E-mail:
regis_soares@hotmail.com
' Data De Criação: 19/07/2003
' Para Usar:
' arquivo = Nome do arquivo
' extensoes = Extensões permitidas
'   separadas por vírgula
' Exemplo:
' IsExtension("figura.jpg","jpg,gif,bmp")
'-----------------------------------------
Function IsExtension(arquivo,extensoes)
 aExts = Split(extensoes,",")
 erro = True
 For i = LBound(aExts) To UBound(aExts)
  If Trim(LCase(aExts(i))) = LCase(Mid(arquivo, InStrRev(arquivo,".")+1)) Then
   erro = False
  End If
 Next
 If Not erro Then
  IsExtension = True
 Else
  IsExtension = False
 End If
End Function
%>
<%= IsExtension("figura.jpg","jpg,gif,bmp")%>
<%
'----------------------------------
' Função: Pega Extensão
' Autor: Régis Soares
' E-mail:
regis_soares@hotmail.com
' Data De Criação: 19/07/2003
'----------------------------------
Function GetExtension(arquivo)
 If Len(InStrRev(arquivo, ".")) > 0 Then
  If Len(Mid(arquivo, InStrRev(arquivo, "."))) > 1 Then
   GetExtension = Mid(arquivo, InStrRev(arquivo, "."))
  End If
 End If
End Function
%>
<%= GetExtension("figura.jpg")%>


Esta matéria foi postada originalmente no ASP4Developers por Régis da Silva Soares, que na época era "Programador ASP e PHP". Hoje, vai saber...

0

Função para enviar e-mail

<%
'---------------------------------
' Função: Enviar E-mail (CDONTS)
' Autor: Régis Soares
' E-mail:regis_soares@hotmail.com
'---------------------------------
Function Email(de, para, assunto, mensagem)
 Set mail = Server.CreateObject("CDONTS.NewMail")
 mail.From = de
 mail.To = para
 mail.Subject = assunto
 mail.Body = mensagem
 mail.BodyFormat = 0
 mail.MailFormat = 0
 mail.Send
 Set mail = Nothing
End Function
%>
<%Email "
de@email.com.br", "para@email.com.br", "Assunto", "Mensagem"%>

Esta matéria foi postada originalmente no ASP4Developers por Régis da Silva Soares, que na época era "Programador ASP e PHP". Hoje, vai saber...

1

Idade

<%
'----------------------------------
' Função: Verifica Idade
' Autor: Régis Soares
' E-mail: regis_soares@hotmail.com
' Data De Criação: 19/07/2003
'----------------------------------
Function Idade(Data)
 Session.LCID = 1046
 If IsDate(Data) Then
  Data = FormatDateTime(Data,2)
  aData = Split(Data,"/")
  Data = aData(0)&"/"&aData(1)&"/"&Year(Now)
  Idade = Year(Now) - aData(2)
  If DateDiff("d",Date(),Data) > 0 Then Idade = Idade - 1
 Else
  Idade = "Data Inválida"
 End If
End Function
%>
<%= Idade("27/07/1983")%>



Esta matéria foi postada originalmente no ASP4Developers por Régis da Silva Soares, que na época era "Programador ASP e PHP". Hoje, vai saber...

quinta-feira, 3 de julho de 2003

1

Verificando as Variáveis do servidor

Para verificar todas as variáveis do servidor, incluindo arquivo atual que está rodando, ip de quem está acessando entre outros, rode o seguinte script em seu servidor:


<HTML>
<BODY BGCOLOR="#FFFFFF">
<TABLE BORDER=0 WIDTH=100%>
<TR>
<TD BGCOLOR="#CCCCCC"><B>Nome do Campo</B></TD>
<TD><B>Valor do Campo</B></TD>
</TR>
<%
for each item in request.servervariables
%>
<TR><TD BGCOLOR="#CCCCCC"><%=item%></TD>
<TD><%=request.servervariables(item)%></TD><TR>
<%
next
%>
</TABLE>
</BODY>
</HTML>


Salve este script como um arquivo .asp e execute.



Esta matéria foi postada originalmente no ASP4Developers por Bernardo Heynemann (site), que na época era "Oracle Certified Professional em Oracle 8i, Certificado Oracle 9i New Features, Desenvolvedor VB (6 anos)/ ASP(5 anos) / VBScript(5 anos) / JavaScript(5 anos).". Hoje, vai saber...

quarta-feira, 2 de julho de 2003

0

Desmarcar todas as checks com um clique

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
  var checkflag = "false";
  function check(field) {
   if (checkflag == "false") {
    for (i = 0; i < field.length; i++) {
     field[i].checked = true;}
     checkflag = "true";
    return "Uncheck All";}
   else {
    for (i = 0; i < field.length; i++) {
     field[i].checked = false;}
     checkflag = "false";
    return "Check All";}
  }
  </script>
</HEAD>


<BODY>
<FORM NAME="form1">
<INPUT TYPE="checkbox" name="teste" OnClick="check(document.form1.teste);">
<INPUT TYPE="checkbox" name="teste">
<INPUT TYPE="checkbox" name="teste">
<INPUT TYPE="checkbox" name="teste">
<INPUT TYPE="checkbox" name="teste">
</FORM>
</BODY>
</HTML>



Esta matéria foi postada originalmente no ASP4Developers por Bernardo Heynemann (site), que na época era "Oracle Certified Professional em Oracle 8i, Certificado Oracle 9i New Features, Desenvolvedor VB (6 anos)/ ASP(5 anos) / VBScript(5 anos) / JavaScript(5 anos).". Hoje, vai saber...

segunda-feira, 23 de junho de 2003

0

Exibindo a lista dos usuários logados atualmente

Salve,


neste artigo, iremos descrever o processo de criação de uma listagem dos usuários logados no site, quer sejam anônimos ou autenticados, tal como possuímos aqui no ASP4Developers, na aba "onliners" aí ao lado. Isso é interessante para manter os usuários cientes de que não estão sozinhos, possibilitando uma maior interação entre os mesmos.


Antes de mais nada, precisaremos trabalhar com o Global.asa. Se seu host não suportar seu uso, infelizmente, não há como fazer o que estamos propondo. Chovendo no molhado, o Global.asa deve estar no diretório raiz da pasta virtual, criada no IIS ou PWS. Iniciaremos com o Application_OnStart, onde iremos inicializar a variável que armazenará a lista dos usuários.

Sub Application_OnStart()
 Application("UsuariosLogados") = "<usuarios />"
End Sub

Antes que você pense: "Lá vem o Rubens com aquele papo de XML", já adianto que vai ser com XML mesmo. Não há um motivo específico para isso. Poderíamos armazenar arrays, strings separadas por vírgulas, ou mesmo um objeto Dictionary. Acho XML mais interessante, pois permite que façamos testes com estruturas simples, que podem ser facilmente migradas para outras, mais complexas, além de nos familiarizarmos com aplicações que fazem uso do XML. Como veremos adiante, isso *não* deixa o código mais complicado.


Ok, vamos agora alimentar a variável de aplicação. Toda vez que um usuário acessar a aplicação (leia-se: quando o Session_OnStart for disparado), incluiremos um elemento no documento XML. Ficaria assim:

Sub Session_OnStart
 'Impedir que outros usuários acessem este código simultaneamente
 Application.Lock
 Dim objXMLDoc, objUsuario
 'Instanciar objeto XML. Verifique se o mesmo existe no seu servidor.
 Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")
 'Carga síncrona. Não passe para a próxima instrução sem carregar o xml inteiro.
 objXMLDoc.async = false
 'Carregue a string XML, já tomando cuidado com caracteres acentuados.
 objXMLDoc.loadXML "<?xml version=""1.0"" encoding=""ISO-8859-1""?>" & _
  Application("UsuariosLogados")
 'Criar um novo elemento
 Set objUsuario = objXMLDoc.createElement("usuario")
 'Setar os atributos "id" e "nome"
 objUsuario.setAttribute "id", Session.SessionId
 objUsuario.setAttribute "nome", "Anônimo"
 'Adicionar o novo elemento ao documento já existente
 objXMLDoc.documentElement.appendChild objUsuario
 'Atualizar variável de aplicação
 Application("UsuariosLogados") = objXMLDoc.documentElement.xml
 'Liberar recursos alocados com o objeto
 Set objXMLDoc = Nothing
 'Liberar aos demais usuários (no bom sentido, é claro!)
 Application.Unlock
End Sub

O que é muito importante percebermos no código acima, é que o componente MSXML2.DOMDocument.3.0 precisa estar instalado no servidor. Caso o seu não o possua, o mesmo pode ser obtido gratuitamente no site da Microsoft.


Muito bem! Já possuímos a variável de aplicação com a lista de usuários. Mas, onde/quando removê-lo da lista ? Em outras palavras, não quero que um determinado usuário seja listado para sempre! Como proceder ?


Isso mesmo que você pensou! Vamos usar o evento Session_OnEnd para remover o usuário da lista! Mãos à obra:

Sub Session_OnEnd()
 Application.Lock
 Dim objXMLDoc, objUsuario
 Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")
 objXMLDoc.async = false
 objXMLDoc.loadXML "<?xml version=""1.0"" encoding=""ISO-8859-1""?>" & _
  Application("UsuariosLogados")
 'Pesquisar no documento XML por um usuário com atributo id igual ao informado.
 Set objUsuario = objXMLDoc.selectSingleNode("//usuario[@id = " & Session.SessionId & "]")
 'Se encontrar, removê-lo
 If Not objUsuario Is Nothing Then objUsuario.parentNode.removeChild objUsuario
 Application("UsuariosLogados") = objXMLDoc.documentElement.xml
 Set objXMLDoc = Nothing
 Application.Unlock
End Sub

Parabéns, estamos quase lá! Note que adicionamos um pequeno trecho para verificar existe um usuário com o id informado no documento XML. A priori, sempre deveria existir, mas o seguro morreu de velho.


Maravilha, só precisamos agora atualizar os dados do mesmo, quando ele se logar no seu site. Adapte a mesma conforme sua necessidade.

<%
If Trim(Request.Form("txtUsuario")) <> "" And Trim(Request.Form("txtSenha")) <> "" Then
 'Abrir conexão com o banco de dados.
 'Pesquisar o registro na base de dados. Cuidado com as aspas simples nos campos postados!
 'Se encontrou então
  Application.Lock
  Dim objXMLDoc, objUsuario
  Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")
  objXMLDoc.async = false
  objXMLDoc.loadXML "<?xml version=""1.0"" encoding=""ISO-8859-1""?>" & _
   Application("UsuariosLogados")
  'Pesquisar usuário
  Set objUsuario = objXMLDoc.selectSingleNode("//usuario[@id = " & Session.SessionId & "]")
  If Not objUsuario Is Nothing Then
   'Se encontrá-lo, alterar o nome pelo que
   ' (provavelmente) existe no banco de dados.
   objUsuario.setAttribute "nome", recordset("nome_usuario")
  End If
  Application("UsuariosLogados") = objXMLDoc.documentElement.xml
  Set objXMLDoc = Nothing
  Application.Unlock
 'Senão
  Response.Redirect "erro_login.asp"
 'Fim se
 '... restante da implementação ...'
End If
%>

Desta forma, podemos fazer com que os usuários marcados inicialmente como anônimos possam ser atualizados quando o detentor da sessão autenticar-se na aplicação.


Agora, basta listar os usuários. Acerte o design da forma que melhor lhe convier:

<%
Sub ListarUsuariosSite()
 Dim objXMLDoc, objUsuario, objUsuarios
 Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")
 objXMLDoc.async = false
 objXMLDoc.loadXML "<?xml version=""1.0"" encoding=""ISO-8859-1""?>" & _
  Application("UsuariosLogados")
 'Coleção com todos os usuários na aplicação
 Set objUsuarios = objXMLDoc.selectNodes("//usuario")
 'Para cada usuário, ...
 For Each objUsuario In objUsuarios
  '... mostrar o nome do mesmo ...
  Response.Write "<b>" & objUsuario.getAttribute("nome") & "</b>"
  ' ... e seu respectivo id.
  Response.Write ", id " & objUsuario.getAttribute("id") & "<br>"
 Next
 'Mostrar a quantidade de usuários na aplicação
 Response.Write objUsuarios.length & " usuário(s) navegando no site, neste momento."
 Set objXMLDoc = Nothing
End Sub
%>

Resumindo: neste artigo implementamos uma lista dos usuários atualmente no site, vimos um exemplo de inclusão, alteração e exclusão de elementos e atributos em um documento XML via DOM e ainda, de quebra, ganhamos um contador de usuários online :)


Note que esta implementação é simples e flexível. Você pode colocar um campo com a data e hora de login, implementar uma rotina de comunicação como o "InterCOM" do ASP4Developers, ou mesmo possibilitar que um usuário convide outro para uma sessão de chat. Estamos limitados somente à nossa imaginação.



Espero que este artigo tenha sido útil para você.



Boa sorte e até a próxima.



Esta matéria foi postada originalmente no ASP4Developers por Rubens N. Farias (site), que na época era "pós-graduado em análise de sistemas orientados a objetos, MCP, MCSD, MCAD, MCSD.NET e consultor em TI, além de idealizador do projeto ASP4Developers. Desenvolve sistemas sob medida, focados na satisfação do usuário, com qualidade e custo realista.". Hoje, vai saber...

segunda-feira, 16 de junho de 2003

0

Tutorial: Validação de formato de horas usando expressões regulares

Há pouco tempo, tive um pequeno problema para resolver: verificar se horas digitadas pelos usuários, no formato HH:MM:SS, eram válidas. A princípio, não parece ser uma tarefa complexa, mas, dependendo da abordagem utilizada, podemos ter pouco ou muito trabalho.


Pare um momento e reflita: como fazer tal validação ? Usando JavaScript, poderíamos pensar em usar o método .split() para decompormos os elementos da string digitada e verificar se estas partes compõem um conjunto válido. Talvez o código acabasse, no final, parecido com o código abaixo:

<script>
function isHoraValidaSplit(strHora)
{
 // Concatenamos dois "dois pontos" para o caso da string
 // passada não contê-los, pois esperamos um array com,
 // no mínimo, 3 posições: horas, minutos e segundos.
 var arrElementos  = ( strHora + "::" ).split( ":" );
 var bolHorasOk    = consistirIntervalo( arrElementos[0], 0, 23 );
 var bolMinutosOk  = consistirIntervalo( arrElementos[1], 0, 59 );
 var bolSegundosOk = consistirIntervalo( arrElementos[2], 0, 59 );
 return( bolHorasOk && bolMinutosOk && bolSegundosOk );
 // Quando uma function aparece dentro de outra function,
 // tem sua visibilidade reduzida. Assim, consistirIntervalo()
 // só poderá ser acessada dentro de isHoraValidaSplit().
 function consistirIntervalo( strValor, intMenor, intMaior )
 {
  var bolRetorno = true;
  // Valor informado precisa ser numérico...
  if( isNaN( strValor ) || strValor == "" ){
   bolRetorno = false;
  }
  else
  {
   // ... e estar contido no intervalo
   var intValor = parseInt( strValor, 10 )
   if( intValor < intMenor || intValor > intMaior ){
    bolRetorno = false;
   }
  }
  return( bolRetorno );
 }
}
</script>

Para sabermos se o código acima funciona, utilizamos uma massa de dados de teste. Note que temos inconsistências em diversos pontos da hora, para podermos explorar cada ponto do algoritmo. Temos horas com apenas os minutos inválidos, apenas os segundos válidos, testamos os limites inferior e superior. Uma boa massa de testes pode ajudá-lo a identificar diversos problemas latentes do seu código, antes que o usuário final descubra esses erros para você :)

<script>
// Massa para testes da função isHoraValida()
var strMensagem = "Método Split:\n--------------------\n"
var arrTestes = new Array(
  "12:34:56", "65:43:21", "02:68:03", "21:43:65", "00:00:00", "23:59:59",
  "24:00:00", "teste123", "11:77:88", "55:66:11", "33:00:99", "99:99:99" )
for( var i=0; i < arrTestes.length; i++ ){
 strMensagem +=
  "\"" + arrTestes[i] + "\" = " +
  isHoraValidaSplit(arrTestes[i]) + "\n";
}
alert( strMensagem )
</script>

"Ok, a função funciona. Então, o que há de errado com ela ?"


Na verdade, não há nada de errado. Minha intenção é de apresentar outro forma de fazer a consistência de horas, usando expressões regulares, lembra ? Vamos começar analisado uma hora válida: "19:48:26". Mas o que torna "19:48:26" uma hora válida ?


Comecemos com simplicidades lógicas: uma hora válida possui dois números, um sinal de dois-pontos, mais dois números, outro sinal de dois-pontos e mais dois números. Apesar de um passo óbvio, já começamos a isolar um padrão, que é justamente do que trata as expressões regulares: a pesquisa de padrões em strings.


Podemos, então, começar a reescrever a função de validação, assim:

<script>
function isHoraValidaRegExp(strHora){
 var re = /^\d\d:\d\d:\d\d$/
 return re.test( strHora );
}
</script>

Como o leitor mais atento deve ter percebido, "\d" é a indicação de dígito numérico. A cada dois deles, temos o sinal de dois-pontos. O caracter "^" indica início da string a ser testada e o "$" indica seu término. Isso consiste a "máscara básica" de uma hora válida.


"Perae! Mas este código está chamando de 'válida' horas descaradamente inválidas!"


Calma, jovem Jedi. Acredite na Força.


Precisamos consistir agora o intervalo de horas, minutos e segundos. Como consistir segundos é a mesma coisa que consistir minutos, vamos continuar por aqui.


O que é um "minuto válido" ? São os minutos entre "00" e "59", inclusive. Então precisamos incrementar a expressão regular, pois não são quaisquer dois números válidos, tal como está codificado hoje:

<script>
function isHoraValidaRegExp(strHora){
 var re = /^\d\d:[0-5]\d:[0-5]\d$/
 return re.test( strHora );
}
</script>

É isso mesmo que você está pensando: os colchetes indicam um conjunto de valores possíveis, e o traço indica um ubtervalo, no nosso caso, os números compreendidos entre "0" e "5". O caracter seguinte permanece sendo o "\d", pois unidades de "0" a "9" são permitidas.


"Não olhe agora, mas ainda está consistindo errado!"


Sim, eu sei. Ainda precisamos consistir as horas. E, aproveitando o embalo, o que é uma "hora válida" ? São as horas compreendidas entre "00" e "23", inclusive. Assim, teremos que adaptar a linha de raciocínio que adotamos no passo anterior. Ficaria assim:

<script>
function isHoraValidaRegExp(strHora){
 var re = /^[01]\d:[0-5]\d:[0-5]\d$/
 return re.test( strHora );
}
</script>

Assim resolvemos o problema das horas compreendidas entre "00" e "19". Precisamos tratar a exceção. Como proceder ?


Pensando mais um pouco: as horas precisam estar contidas em "00" e "19" ou entre "20" e "23". Significa que há dois padrões que necessitamos avaliar. Note que eles são mutuamente exclusivos, ou seja, só pode ocorrer um de cada vez. O código ficaria assim:

<script>
function isHoraValidaRegExp(strHora){
 var re = /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/
 return re.test( strHora );
}
</script>

Cuidado! Note bem que alteramos o código que vinha antes do primeiro "dois-pontos". Mantivemos a expressão anterior, que validava horas até as 19 horas, acrescentamos um pipe ("|") que representa o "OU" e acrescentamos a condição que faltava "2, seguido de um número entre 0 e 3". Colocamos tudo isso dentro de uma indicação de padrão não-capturável, representado por "(?:)". Os detalhes desta indicação fico devendo para outro artigo.


Para podermos comparar ambas implementações, preparei um teste de performance, que segue abaixo:

<script>
// Método original
function isHoraValidaSplit(strHora)
{
 // Concatenamos dois "dois pontos" para o caso da string
 // passada não contê-los, pois esperamos um array com,
 // no mínimo, 3 posições: horas, minutos e segundos.
 var arrElementos  = ( strHora + "::" ).split( ":" );
 var bolHorasOk    = consistirIntervalo( arrElementos[0], 0, 23 );
 var bolMinutosOk  = consistirIntervalo( arrElementos[1], 0, 59 );
 var bolSegundosOk = consistirIntervalo( arrElementos[2], 0, 59 );
 return( bolHorasOk && bolMinutosOk && bolSegundosOk );
 // Quando uma function aparece dentro de outra function,
 // tem sua visibilidade reduzida. Assim, consistirIntervalo()
 // só poderá ser acessada dentro de isHoraValidaSplit().
 function consistirIntervalo( strValor, intMenor, intMaior )
 {
  var bolRetorno = true;
  // Valor informado precisa ser numérico...
  if( isNaN( strValor ) || strValor == "" ){
   bolRetorno = false;
  }
  else
  {
   // ... e estar contido no intervalo
   var intValor = parseInt( strValor, 10 )
   if( intValor < intMenor || intValor > intMaior ){
    bolRetorno = false;
   }
  }
  return( bolRetorno );
 }
}
// Método sugerido
function isHoraValidaRegExp(strHora){
 var re = /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/
 return re.test( strHora );
}
function testarSplit(intLoop){
 var arrTestes = new Array(
   "12:34:56", "65:43:21", "02:68:03", "21:43:65", "00:00:00", "23:59:59",
   "24:00:00", "teste123", "11:77:88", "55:66:11", "33:00:99", "99:99:99" )
 for( var n=0; n <= intLoop; n++ )
 {
  var strMensagem = "Método Split:\n--------------------\n"
  for( var i=0; i < arrTestes.length; i++ )
  {
   strMensagem +=
    "\"" + arrTestes[i] + "\" = " +
    isHoraValidaSplit(arrTestes[i]) + "\n";
  }
 }
 return strMensagem
}
function testarRegExp(intLoop){
 // Massa para testes da função isHoraValida()
 var arrTestes = new Array(
   "12:34:56", "65:43:21", "02:68:03", "21:43:65", "00:00:00", "23:59:59",
   "24:00:00", "teste123", "11:77:88", "55:66:11", "33:00:99", "99:99:99" )
 for( var n=0; n <= intLoop; n++ )
 {
  var strMensagem = "Método RegExp:\n--------------------\n"
  for( var i=0; i < arrTestes.length; i++ )
  {
   strMensagem +=
    "\"" + arrTestes[i] + "\" = " +
    isHoraValidaRegExp(arrTestes[i]) + "\n";
  }
 }
 return strMensagem
}
</script>
<script language="VBScript">
 Const intExecucoes = 5 'Tiramos a média de 5 execuções
 Const intLoop = 1000 'Cada execução avalia 12 horas, 1000 vezes.
 intAcumuladoSplit = 0
 strMensagemSplit  = ""
 For i = 1 to intExecucoes
  inicio = Timer
  strMensagemSplit  = testarSplit(intLoop)
  intAcumuladoSplit = intAcumuladoSplit + ( Timer - inicio )
 Next
 intAcumuladoRegExp = 0
 strMensagemRegExp  = ""
 For i = 1 to intExecucoes
  inicio = Timer
  strMensagemRegExp  = testarRegExp(intLoop)
  intAcumuladoRegExp = intAcumuladoRegExp + ( Timer - inicio )
 Next
 ' Computar o tempo médio dispendido na avaliação das 60.000 validações
 intMediaSplit  = intAcumuladoSplit  / intExecucoes
 intMediaRegExp = intAcumuladoRegExp / intExecucoes
 strMensagemSplit  = strMensagemSplit  & vbTab & vbLF & "=" & _
      formatNumber( intMediaSplit, 4 ) & " s"
 strMensagemRegExp = strMensagemRegExp & vbTab & vbLF & "=" & _
      formatNumber( intMediaRegExp,4 ) & " s"
 arrSplit  = split( strMensagemSplit , vbLF )
 arrRegExp = split( strMensagemRegExp, vbLF )
 strMensagem = ""
 For i = 0 To UBound( arrSplit )
  strMensagem = strMensagem & arrSplit(i) & vbTab & "|  " & arrRegExp(i) & vbCRLF
 Next
 MsgBox strMensagem & vbCRLF & vbTab & _
   " Diferença de " & FormatPercent( intMediaSplit / intMediaRegExp, 2 )
</script>

Pronto, pode rodar o teste e surpreenda-se (o teste completo levou quase 4 segundos num P3 650/512M RAM. Você verá que a implementação da validação com expressões regulares possui a mesma eficiência do algoritmo inicial, mas com 90% menos código e cerca de 307,5% mais rápido! Isso mesmo: trezentos e sete e meio por cento, ou um terço do tempo original. Se o salário mínimo aumentasse na mesma proporção, ia ter muita gente feliz, pois o mesmo passaria de R$ 240,00 para R$ 738,00. Um aumento pra lá de bem vindo.


Bom, fica a dica: expressões regulares, que num primeiro instante parecem complexas, podem resolver problemas de identificação de padrão com menos código e mais performance. Mas nunca esqueça de documentar bem suas expressões regulares. A vítima pode ser você.



Até a próxima!



Esta matéria foi postada originalmente no ASP4Developers por Rubens N. Farias (site), que na época era "pós-graduado em análise de sistemas orientados a objetos, MCP, MCSD, MCAD, MCSD.NET e consultor em TI, além de idealizador do projeto ASP4Developers. Desenvolve sistemas sob medida, focados na satisfação do usuário, com qualidade e custo realista.". Hoje, vai saber...