quarta-feira, 12 de junho de 2002

0

Formata e valida CPF na hora que a pessoa esta escrevendo.

Essa função que estou mandando serve para validar e formatar CPF na hora que a pessoa esta escrevendo.


// DICIONARIO DE FUNCOES
// formato: 999.999.999-99

////////////////////////////////////////////////////////////////////////////////////
function FormataCpf(campo,tammax,teclapres) {
 var tecla = teclapres.keyCode;
  
 vr = event.srcElement.value;
 vr = vr.replace( "/", "" );
 vr = vr.replace( "/", "" );
 vr = vr.replace( ",", "" );
 vr = vr.replace( ".", "" );
 vr = vr.replace( ".", "" );
 vr = vr.replace( ".", "" );
 vr = vr.replace( ".", "" );
 vr = vr.replace( "-", "" );
 vr = vr.replace( "-", "" );
 vr = vr.replace( "-", "" );
 vr = vr.replace( "-", "" );
 vr = vr.replace( "-", "" );
 tam = vr.length;


 if (tam < tammax && tecla != 8){ tam = vr.length + 1 ; }


 if (tecla == 8 ){ tam = tam - 1 ; }
  
 if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ){
  if ( tam <= 2 ){
    event.srcElement.value = vr ; }
   if ( (tam > 2) && (tam <= 5) ){
    event.srcElement.value = vr.substr( 0, tam - 2 ) + '-' + vr.substr( tam - 2, tam ) ; }
   if ( (tam >= 6) && (tam <= 8) ){
    event.srcElement.value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + '-' + vr.substr( tam - 2, tam ) ; }
   if ( (tam >= 9) && (tam <= 11) ){
    event.srcElement.value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + '-' + vr.substr( tam - 2, tam ) ; }
   if ( (tam >= 12) && (tam <= 14) ){
    event.srcElement.value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + '-' + vr.substr( tam - 2, tam ) ; }
   if ( (tam >= 15) && (tam <= 17) ){
    event.srcElement.value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + '-' + vr.substr( tam - 2, tam ) ;}
 }  
}
//////////////////////////////////////////////////////////////////////////////////////////////////


forma de usar:
<input name="cpCNPJ" size="15" maxlength="80" onKeyPress="FormataCpf('cpCPFinformante',11,event)">



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...

1

Tirando os acentos das palavras

Essa função deve ser usada quando você precisa tirar toda a acentuação das palavras na hora de fazer uma busca


'#Função que tira todos os acentos das palavras
function TiraAcento(StrAcento)
 for i = 1 to len(StrAcento) 
  Letra = mid(StrAcento, i, 1)
  Select Case Letra
   Case "á","Á","à","À","ã","Ã","â","Â","â","ä","Ä"
   Letra = "A"
   Case "é","É","ê","Ê","Ë","ë","È","è"
   Letra = "E"
   Case "í","Í","ï","Ï","Ì","ì"
   Letra = "I"
   Case "ó","Ó","ô","Ô","õ","Õ","ö","Ö","ò","Ò"
   Letra = "O"
   Case "ú","Ú","Ù","ù","ú","û","ü","Ü","Û"
   Letra = "U"
   Case "ç","Ç"
   Letra = "C"
   Case "ñ"
   Letra = "N"
  End Select
  texto = texto & Letra
 next
 TiraAcento = texto
end function


Forma de usar:
TiraAcento ("[ÁÀáàÂâãÃÄeéèÈÈëíÌïÌíÓÒóòöÖõÕôÔúùÚÚÙÛûüÜ]")



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...

segunda-feira, 10 de junho de 2002

0

Caracteres especiais em XML + ASP

Grandes amigos, quem nunca teve um problema com XML e não sabia o que podia ser, pois bem, o XML tem alguns caracteres que são proprietários como &, ", ', <, > e vírgula.


Sendo assim, fiz essa função que deve ser usada na hora em que se esta escrevendo o XML, pois ela troca automaticamente os caracteres especiais por seus equivalente evitando erros no código.


function trocaEspecial(strCampo)
 strCampo = replace(strCampo,Chr(38),"&amp;")
 strCampo = replace(strCampo,Chr(39),"&apos;")
 strCampo = replace(strCampo,Chr(62),"&gt;")
 strCampo = replace(strCampo,Chr(60),"&lt;")
 strCampo = replace(strCampo,chr(34),"&quot;")
 trocaEspecial = strCampo
end function



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

Debugando seu ASP + XML

Quando você esta trabalhando com ASP e XML temos uns problemas no XML que sempre pensamos que é o ASP, mas nem sempre ele é o culpado, o XML pode ter problemas tb.


Ao final do codigo coloque a chamada desta sub.

- Outra grande diga é sempre abrir seu código XML do IE, porque ele sempre verifica se o arquivo tem estrutura de XML válido.


Sub Debugar
 Response.write("<font face=""tahoma"" size=""1"">")
 Response.write("Error:<br>")
 Response.write("---------------------------------"&"<br>")
 Response.Write "Código: "& Objxml.Parseerror.Errorcode &"<Br>"
 Response.Write "Razão: "& Objxml.Parseerror.Reason &"<Br>"
 Response.Write "Arquivo: "& Objxml.Parseerror.Filepos &"<Br>"
 Response.Write "Linha: "& Objxml.Parseerror.Line &"<Br>"
 Response.Write "Url: "& Objxml.Parseerror.Url &"<Br>"
 Response.Write "Columa: "& Objxml.Parseerror.Linepos &"<Br>"
 Response.write("---------------------------------"&"<br>")
 Response.write("</font>")
End Sub



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...

quinta-feira, 30 de maio de 2002

0

Inclusão de Dados com Access (VB)

<%@ Page Language="VB" clienttarget=uplevel %>
<%@ Import Namespace="System.Data.OLEDB" %>
<%@ Import Namespace="System.Data" %>


<script language="VB" runat="server">
Dim cnString as string ="PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & Server.mappath("clientes.mdb") & ";"
Dim myCn as OleDBConnection = New OleDBConnection(cnString)


Sub Enviar_Click(Sender As Object, E As EventArgs)
 dim sqlText as string
 dim myCmd as OleDBCommand


 sqlText = "INSERT INTO usuarios (nome, email) VALUES ('"
 sqlText = sqlText & Request("nome") & "','" & Request("email") & "')"


 myCn.Open()
 myCmd = New OleDBCommand(sqlText,myCn)
 MyCmd.ExecuteNonQuery()


  With Label1
                .Text = "Usuário Cadastrado com Sucesso !!!"
                .ForeColor = System.Drawing.Color.DarkBlue
                .Font.Bold = True
                .Font.Name = "Verdana"
  End With


 Mycn.Close()
 MyCn = Nothing
end Sub


</script>


 


<body>


<ASP:DataGrid id="MyDataGrid" runat="server"
Width="700"
CellPadding=3
CellSpacing="0"
Font-Name="Tahoma"
MaintainState="false"
style="BORDER:1px solid #336699"
/>



<p>&nbsp;</p>
<form runat="server">
<asp:TABLE font-name="TAHOMA" style="BORDER:1px solid #336699" runat="server">
<asp:TableRow >
<asp:TableCell ColumnSpan="2" Text="<b>Inserir um novo usuario</b>" />
</asp:TableRow>


<asp:TableRow>
<asp:TableCell Text="Digite seu nome" />
<asp:TableCell>
<asp:TextBox id="nome" runat="server"/>
</asp:TableCell>
</asp:TableRow>


<asp:TableRow>
<asp:TableCell Text="Digite seu email" />
<asp:TableCell>
<asp:TextBox id=email runat="server" />
</asp:TableCell>
</asp:TableRow>


<asp:TableRow>
<asp:TableCell Text="&nbsp;" />
<asp:TableCell>
<asp:Button
Text="Enviar"
onclick="Enviar_Click"
Font-Name="Tahoma"
runat="server"
/>


</asp:TableCell>


</asp:TableRow>
</asp:Table>
</form>


<asp:Label id="Label1" runat="server"/>


</body>
</html>



Esta matéria foi postada originalmente no ASP4Developers por Marcio Lima (Guardião) (site), que na época era "Programador ASP e VBA, apaixonado por Design, futurismo e ficção.
". Hoje, vai saber...

quinta-feira, 23 de maio de 2002

0

Filtrar uma região

A algum tempo atrás bati de frente com o probema de remover uma área específica de uma string ( eu estava trabalhando com e-mail, eprecisava remover as tags de header ).
Bom, tá ae a solução do problema ...


s1 = caractere inicial da busca
s2 = caractere final da busca
var = variavel a ser pesquisada
target = substituir tudo q esta entre s1 e s2 ( inclusive ) por isto.


 


<%
function clear(s1,s2,var,target)
 PosI = 0
 PosF = 0


 PosI = instr(1,var,s1)


 PosF = instr(1,var,s2)
 if PosF > 0 then
  PosF  = PosF + (len(s2)-1)
  trash =  mid(var,PosI,PosF)
  clear = replace(var,trash,target)
 else
  clear = var
 end if
end function
%>



Esta matéria foi postada originalmente no ASP4Developers por Ismael Nobre (site), que na época era "Analista.
Quer me contratar ?
Cel. 96420687". Hoje, vai saber...

quarta-feira, 22 de maio de 2002

3

Personalizar botão PROCURAR no input type="file"

Muitas vezes gostaríamos de personalizar o botão de procurar ou browser (dependendo da língua do browser) que aparece quando usamos o input type=file. O código abaixo apresenta uma solução de contorno para esta personalização.


<HTML>
<HEAD>
<TITLE>Personalizando INPUT TYPE=FILE </TITLE>
</HEAD>
<BODY>
<INPUT TYPE="file" ID="filUpload" TYLE="display:none" onChange="txtFilename.value = this.value;">
<INPUT TYPE="text" ID="txtFilename" STYLE="FONT-FAMILY:Tahoma;FONT-SIZE:9pt" SIZE="25" DISABLED>
<INPUT TYPE="button" ID="btnBrowse" STYLE="FONT-FAMILY:Tahoma;FONT-SIZE:9pt;
BACKGROUND-COLOR:peachpuff" onClick="filUpload.click()"
 VALUE="Escolha o arquivo">
</BODY>
</HTML>



Esta matéria foi postada originalmente no ASP4Developers por Ben Hur Oliveira, que na época era "Analista de sistemas". Hoje, vai saber...

terça-feira, 21 de maio de 2002

0

Mais uma validação de email?

Antes de ser criticado, por no meu primeiro post colocar mais uma validação de email, só pra explicar... essa tem alvo certo.. se vc é daqueles que nao usa aspas , acha que cada byte vale uma grana em infra estrutura...

é pra vc.

Ralar em portal da nisso.. cada kb é sagrado, por isso

validação de email com ridiculas 4 linhas


<html>
 <head>  
  <script language="javascript">       
    function validarEmail(obj) {     
     if (obj.search(/^([\d\w])+@([\d\w])+(\.[\d\w])+/)==-1)return false;
     else return true;           
    }  
  </script>
 </head>
 <body marginwidth="0" marginheight="0" topmargin="0" leftmargin="0">
  <form>
    <input type="text" name="frEmail">
    <input type="button" name="btnVerifica" value="validar" onclick="validarEmail(this.form.frEmail.value)">
  </form>
 </body>
</html>


 


Obs:o obj passado como paramentro deve ser :

document.nomedoForm.nomedocampo.value

como todo objeto do form tem a propriedade .form
que cada o nome do form , usei
this ( referencia ao objeto , no caso o botao )
this.form me retornou o obj form
this.form.nomedocampo.value é o meu parametro final.

[]s

the handful of nothing
code is art


 



Esta matéria foi postada originalmente no ASP4Developers por the handful of nothing (site), que na época era "Senior Client-side Dev

". Hoje, vai saber...

sexta-feira, 17 de maio de 2002

0

Criando banco de dados Access

É isso ai pessoal, tá aqui o código que permite a criação de um Banco de Dados MDB completo ou quase completo através do ADOX.
Para definir os tipos dos campos utilizei as constates que tem no arquivo adovbs.inc na parte de DataTypeEnum Values. Nem todos que testei funcionaram, e também não tive muito tempo para testes mais complexos (infelizmente :(). Sugestões e críticas é só enviar um e-mail. Até mais e boa diversão!!!


'## ATENÇÃO : Não esqueça de incluir o arquivo 'adovbs.inc'   ##

Dim objADOXDatabase
Set objADOXDatabase = Server.CreateObject("ADOX.Catalog")


   '## Cria o banco de dados ##
   objADOXDatabase.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                          "Data Source=BANCO_DE_DADOS.MDB;" & _
                          "Jet OLEDB:Engine Type=4;" '## Access 97   ##
                          '"Jet OLEDB:Engine Type=5;" '## Access 2000 ##


'## Cria a variável de tabela ##
Dim objADOXTabela1
'## Indica(seta) o Objeto objADOXTabela1 como uma tabela ##
Set objADOXTabela1 = Server.CreateObject("ADOX.Table")


   '## Especifica o nome da tabela ##
   objADOXTabela1.Name = "Tabela1"


   '## Adiciona o 'CAMPO1' como inteiro ##
   objADOXTabela1.Columns.Append "CAMPO1", adInteger
 
   '## Adiciona o 'CAMPO2' como TEXTO(VarChar), limitando-o a 8 caracteres ##
   objADOXTabela1.Columns.Append "CAMPO2", adVarWChar,8


   '## Adiciona o 'CAMPO3' como TEXTO(Char), limitando-o a 2 caracteres ##
   objADOXTabela1.Columns.Append "CAMPO3", adWChar, 2


   '## Adiciona o 'CAMPO4' como "Booleano" ##
   objADOXTabela1.Columns.Append "CAMPO4", adBoolean


   '## Adiciona o 'CAMPO5' como Data ##
   objADOXTabela1.Columns.Append "CAMPO5", adDate, 1
  
   '## Indica o 'CAMPO1' como chave primária ##
   objADOXTabela1.Keys.Append "PK_CAMPO1", 1, "CAMPO1"


   '## Adiciona a tabela ao Banco de Dados ##
   objADOXDatabase.Tables.Append (objADOXTabela1)



'## Destroi os Objetos ##
Set objADOXTabela1 = Nothing
Set objADOXDatabase = Nothing



Esta matéria foi postada originalmente no ASP4Developers por Rafael "M4yers" Rossi (site), que na época era "...". Hoje, vai saber...

terça-feira, 14 de maio de 2002

1

Tabela ASCII Interativa

<% Option Explicit %>
<%
Dim iCols, iRows, iChar, sChar


Function StrZero(ifpVal,ifpTam)
Dim sfStr, ifI
   for ifI = 1 to ifpTam
      sfStr = sfStr & "0"
   next
   sfStr = sfStr & CStr(ifpVal)
   StrZero = Mid(sfStr,(Len(sfStr)-ifpTam)+1, ifpTam)
End Function


%>
<html>
<head>
<title>Tabela ASCII por Myers</title>
<script language="javascript">
d = document;
function CharOver(linha, coluna){
   //loop para mudar a cor da coluna
   for (iCols = 0; iCols < coluna; iCols++)
      d.all["r"+linha+"c"+iCols].className = "clOver";


   //loop para mudar a cor da linha
   for (iRows = 0; iRows < linha/10; iRows++)
      d.all["r"+iRows*10+"c"+coluna].className = "clOver";


   d.all["r"+linha].className  = "clOver"; //muda a cor do titulo da linha;
   d.all["c"+coluna].className = "clOver"; //muda a cor do titulo da coluna;
   d.all["r"+linha+"c"+coluna].className = "clSel";//muda a cor da celula do caraceter selecionado
   d.all.charnumber.innerHTML = parseFloat(linha)+parseFloat(coluna);//muda o numero do caractere selecionado e exibe na célula superior direita
   }


function CharOut(linha, coluna){


   for (iCols = 0; iCols < coluna; iCols++)
      d.all["r"+linha+"c"+iCols].className = "clNormal";


   for (iRows = 0; iRows < linha/10; iRows++)
      d.all["r"+iRows*10+"c"+coluna].className = "clNormal";


   d.all["r"+linha].className  = "Row"; //muda a cor do titulo da linha;
   d.all["c"+coluna].className = "Col"; //muda a cor do titulo da coluna;
   d.all["r"+linha+"c"+coluna].className = "clNormal";//muda a cor da celula do caraceter selecionado
   d.all.charnumber.innerHTML = "000";//muda o numero do caractere selecionado e exibe na célula superior direita
   }


</script>
<style type="text/css">
<!--
/* Célula Normal */
.clNormal {  text-align: center; text-decoration: none; background-color: #FFFFFF;
             font-family: Verdana, Arial, Helvetica, sans-serif; color: #000000;
             font-size: 12px;
             border-bottom: 1px solid #E7E7E7; border-right: 1px solid #E7E7E7; }
/* Célula no evento de onMouseOver */
.clOver   {  text-align: center; text-decoration: none; background-color: #93BEE2;
             font-family: Verdana, Arial, Helvetica, sans-serif; color: #000000;
             font-size: 12px;
             border-bottom: 1px solid #E7E7E7; border-right: 1px solid #E7E7E7; }
/* Célula do caractere selecionado */
.clSel    {  text-align: center; text-decoration: none; background-color: #FF0000;
             font-family: Verdana, Arial, Helvetica, sans-serif; color: #000000 ;
             font-size: 12px;
             border-bottom: 1px solid #000000; border-right: 1px solid #000000;
             border-top: 1px solid #000000; border-left: 1px solid #000000; }
/* Célula de título das colunas */
.Col      {  text-align: center; text-decoration: none; background-color: #EFF7FF;
             font-family: Verdana, Arial, Helvetica, sans-serif; color: #000000 ;
             font-size: 12px;
             border-bottom: 1px solid #CEE7FF; border-right: 1px solid #CEE7FF;
             border-top: 1px solid #CEE7FF; /*border-left: 1px solid #E7E7E7; */}
/* Célula de título das linhas */
.Row      {  text-align: center; text-decoration: none; background-color: #EFF7FF;
             font-family: Verdana, Arial, Helvetica, sans-serif; color: #000000 ;
             font-size: 12px;
             border-bottom: 1px solid #CEE7FF; border-right: 1px solid #CEE7FF;
             /*border-top: 1px solid #E7E7E7; */border-left: 1px solid #CEE7FF; }
/* Célula de exibição do numero do caractere selecionado */
.CharSel  {  text-align: center; text-decoration: none; background-color: #EFF7FF;
             font-family: Verdana, Arial, Helvetica, sans-serif; color: #000000 ;
             font-size: 12px; font-weight: bold;
             border-bottom: 1px solid #CEE7FF; border-right: 1px solid #CEE7FF;
             border-top: 1px solid #CEE7FF; border-left: 1px solid #CEE7FF; }
/* Links */
a {font-family: Verdana; color: #990000; font-size: 10px; text-decoration: none;}
a:hover {font-family: Verdana; color: #FF0000; font-size: 10px; text-decoration: none;
         background: #000000; }
-->
</style>
</head>
<body bgcolor="#FFFFFF">
   <div align="center"><b>
    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Tabela ASCII</font></b>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
   <tr>
<%
   iCols = 0
   iRows = 0


   '## for...next -> 0 a quantidade de caracteres (255)
   for iChar = 0 to 255
      if iCols = 0 and iRows = 0 then
         '## Cria célula para exibição do número do caractere ##
         response.write "<td class=""CharSel"" id=""charnumber"">000</td>"&vbCrlf


         '## Cria as colunas com seus respecivos números ##
         for iCols = 0 to 9
            response.write "<td class=""Col"" id=""c"&iCols&""">"&iCols&"</td>"&vbCrlf
         next
         iCols = 10 '## Iguala esta variável a 10 para quebrar a linha mais abaixo ##
      end if


      if iCols = 10 then
         '## Zera iCols e cria uma nova linha na tabela ##
         iCols = 0
         response.write "</tr><tr>"&vbCrlf
         response.write "<td width=""5%"" id=""r"&iRows&""" class=""Row"">"&_
                        StrZero(iRows,3)&"</td>"&vbCrlf
         '## São somados 10 a esta variável pq numera as linha de 10 em 10 ##
         iRows = iRows + 10
      end if


      '## Caracteres Nulos são convertidos para [espaço] ##
      if iChar = 0 or iChar = 9 or iChar = 10 or iChar = 11 or iChar = 12 or iChar = 13 or _
         iChar = 32 or iChar = 256 or iChar = 257 or iChar = 259 then
         sChar = "&nbsp;"
      else
         sChar = Chr(iChar)
      end if


      '## Constrói a linha com sua classe CSS, seu numero de linha e coluna
      '(id = rxcx -> 'r' = representa a lina e 'c' = representa a coluna)
      'e seus eventos de onMouseOver e onMouseOut ##
      response.write "<td class=""clNormal"" id=""r"&iRows-10&"c"&iCols&""" "&_
                     "onMouseOver=""CharOver("&iRows-10&","&iCols&")"" "&_
                     "onMouseOut =""CharOut("&iRows-10&","&iCols&")"">"&_
                     sChar&"</td>"&vbCrlf


      iCols = iCols + 1
   next


%>
</table>
<br>
</div>
<p><font face="Verdana, Arial, Helvetica, sans-serif" size="1" color="#000000">Para ver
  o c&oacute;digo correspondente ao caractere segue-se a coluna mais o linha.<br>
  Ex. @ = coluna 4, linha 60 - corresponde ao c&oacute;digo 64.<br>
  <a href="mailto:malkeivin@yahoo.com">Myers Malkeivin - malkeivin@yahoo.com</a>
  </font>
  </p>


</body>
</html>



Esta matéria foi postada originalmente no ASP4Developers por Rafael "M4yers" Rossi (site), que na época era "...". Hoje, vai saber...

0

Pequena Solução Útil para inclusão e alteraçao de formulários muuito extensos

Bem galera... eu uso um jeito que eu gostaria de compartilhar com vcs, para facilitar a vida na hora de ter que obter os dados de um formulario extenso.


Lembrem se que existe o FOR EACH que é muito util para coleções e o request.form é uma delas.
para facilitar ainda mais, deixe o nome dos campos do formulario com os mesmos nomes dos campos do banco de dados onde você quer cadastrar as informações ou altera-las.

Sendo que a variavel String_Bd seria a sua suposta string de conexao....

para o cadastro no banco de dados ficaria assim:
<%
FOR EACH count in request.form
if request.form.key(count)<>"Submit" then
campos=request.form.key(count)&campos
valores="'"&request.form.item(count)&"',"&valores
end if
NEXT
valores=right(valores,len(valores)-1)
string_bd="insert into minhatabela ("&campos&") values ("&valores&")"
%>

Para Alteração seria assim:
<%
FOR EACH count in request.form
if request.form.key(count)<>"Submit" then
atualizar=request.form.key(count)&"="&request.form.item(count)&","&atualizar
end if
NEXT
atualizar=right(valores,len(atualizar)-1)
string_bd="update minhatabela set "&atualizar" where id="&var_id
%>

Se alguem souber de melhoras para esse script, vamos colaborar!!!



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...

quinta-feira, 9 de maio de 2002

0

Pare de concatenar strings SQL!

Pare de concatenar strings SQL! Crie um arquivo, chamado preparaSQL.js, com o seguinte texto:

function prepareSQL(txt){
 var resp,vartxt,rgxp
 while(true){
  vartxt=txt.replace(/[^@]*@([\d\w]*).*/,"$1")
  if(vartxt==txt){
   return vartxt
  }else{
   if(eval("typeof("+vartxt+")")=="undefined"){
    resp="NULL"
   }else if(eval("typeof("+vartxt+")")=="number"){
    resp=eval(vartxt)
   }else{
    resp=(eval(vartxt)+"").replace(/'/g,"''")
    if(resp!="NULL")resp="'"+resp+"'"
   }
   rgxp=eval("/@"+vartxt+"/gi")
   txt=txt.replace(rgxp,resp)
  }
 }
}

Daí, em seus arquivos ASP, basta colocar, por exemplo, o seguinte:

<script src="preparaSQL.js" runat=server>
</script>
<%
nome=request.QueryString("nome")
codigo=request.QueryString("codigo")
preco=request.QueryString("preco")
sql=prepareSQL("update produto set nome=@nome, preco=@preco where codigo=@codigo")
conn.Execute(sql)
%>


Esta matéria foi postada originalmente no ASP4Developers por Elcio Luiz Ferreira (site), que na época era " analista-programador apaixonado por javascript, ex-professor, músico amador, ciclista amador, teólogo amador, filósofo amador, escritor amador e comediante amador.". Hoje, vai saber...

quinta-feira, 2 de maio de 2002

0

Validação de E-mail (v2)

<html>
<head>
<title>[Validação de E-mail] :: Myers</title>
<script language="JavaScript">
function ValidaEmail(mail){
   var ret = "E-mail Inválido!";
   if (typeof(mail) != "undefined"){
      mail = mail.match(/(\w+)@(.+)\.(\w+)$/);
      if (mail != null){
         if ((mail[3].length==2) || (mail[3].length==3))
            ret = "E-mail Válido!";
         }
      }
   return ret;
   }
</script>
</head>


<body bgcolor="#FFFFFF">
<form method="post" action="">
  <input type="text" name="eEmail">
  <input type="button" name="btVerifica" value="Verificar" onClick="alert(ValidaEmail(eEmail.value));">
</form>
</body>
</html>



Esta matéria foi postada originalmente no ASP4Developers por Rafael "M4yers" Rossi (site), que na época era "...". Hoje, vai saber...

quarta-feira, 24 de abril de 2002

0

Parâmetros opcionais em javascript

Você sabia que pode, em javascript, criar funções com parãmetros opcionais? Há um operador no javascript que nos ajuda bastante, o typeof. Veja como criar uma função com parãmetros opcionais:


function sorteia(maximo,minimo){
 if(typeof(minimo)!="number")minimo=0
 return Math.floor(Math.random()*(maximo-minimo))+minimo
}


A função retorna um número aleatório entre mínimo e máximo. O valor de mínimo é opcional. Se você passar um valor que não seja numérico ou não passar valor nenhum, a primeira linha da função vai setar mínimo como 0.


Digamos que você queira preencher um valor default apenas se o usuário não passar valor (se ele passar valor que não seja numérico), basta trocar na primeira linha, typeof(minimo)!="number" por typeof(minimo)=="undefined"


 



Esta matéria foi postada originalmente no ASP4Developers por Elcio Luiz Ferreira (site), que na época era " analista-programador apaixonado por javascript, ex-professor, músico amador, ciclista amador, teólogo amador, filósofo amador, escritor amador e comediante amador.". Hoje, vai saber...

0

Validação de Hora

Como validar um campo de formulário ou outro valor qualquer fornecido pelo usuário para que seja uma hora válida?

Eu costumo fazer assim, ponho no começo do documento:

 
<script>
String.prototype.validaHora=function(doze){return !((this.search(/^\d?\d(:\d\d){2}$/)==-1)||(parseInt(this.replace(/:.*/g,""))>(doze?12:24))||(parseInt(this.replace(/.*:(.*):.*/g,"$1"))>59)||(parseInt(this.replace(/.*:/g,""))>59))}
</script>

 

E depois, quando quero testar um valor qualquer, se estiver numa variável x, por exemplo:

 


x.validaHora(true) //Pra validar até 12 horas
x.validaHora(false) //Pra validar até 24 horas

 

Se for um campo de formulário:

 

document.form1.hora.value.validaHora(true)


Esta matéria foi postada originalmente no ASP4Developers por Elcio Luiz Ferreira (site), que na época era " analista-programador apaixonado por javascript, ex-professor, músico amador, ciclista amador, teólogo amador, filósofo amador, escritor amador e comediante amador.". Hoje, vai saber...

segunda-feira, 22 de abril de 2002

0

Veja largura a altura, tamanho em Bytes e as cores de uma imagem


'###############################################
' Este é o teste... coloque qualquer GIF nesta pasta
' E você verá o milagre acontecendo!
' Pode tambem ser com qualquer extensão lembrando
' Somente de mudar no IF ou então adapta-lo para ler
' Qualquer tipo de Arquivo, você pode usar um case!
' se for o caso !!! hehehh

'###############################################
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objF = objFSO.GetFolder("c:\inetpub\wwwroot\minhaimagens")
  Set objFC = objF.Files


  response.write "<table border=""0"" cellpadding=""5"">"


  For Each f1 in objFC
    if instr(ucase(f1.Name), ".JPG") then
       response.write "<tr><td>" & f1.name & "</td><td>" & f1.DateCreated & "</td><td>" & f1.Size & "</td><td>"


       if gfxSpex(f1.Path, w, h, c, strType) = true then
          response.write w & " x " & h & " " & c & " colors"
       else
          response.write "&nbsp;"
       end if


       response.write "</td></tr>"


    end if


  Next


  response.write "</table>"


  set objFC = nothing
  set objF = nothing
  set objFSO = nothing

'##############################################


  function GetBytes(flnm, offset, bytes)


     Dim objFSO
     Dim objFTemp
     Dim objTextStream
     Dim lngSize


     on error resume next


     Set objFSO = CreateObject("Scripting.FileSystemObject")
    
     ' First, we get the filesize
     Set objFTemp = objFSO.GetFile(flnm)
     lngSize = objFTemp.Size
     set objFTemp = nothing


     fsoForReading = 1
     Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)


     if offset > 0 then
        strBuff = objTextStream.Read(offset - 1)
     end if


     if bytes = -1 then  ' Get All!


        GetBytes = objTextStream.Read(lngSize)  'ReadAll


     else


        GetBytes = objTextStream.Read(bytes)


     end if


     objTextStream.Close
     set objTextStream = nothing
     set objFSO = nothing


  end function



  function lngConvert(strTemp)
     lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(strTemp, 1)) * 256)))
  end function


  function lngConvert2(strTemp)
     lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256)))
  end function



  function gfxSpex(flnm, width, height, depth, strImageType)


     dim strPNG
     dim strGIF
     dim strBMP
     dim strType
     strType = ""
     strImageType = "(unknown)"


     gfxSpex = False


     strPNG = chr(137) & chr(80) & chr(78)
     strGIF = "GIF"
     strBMP = chr(66) & chr(77)


     strType = GetBytes(flnm, 0, 3)


     if strType = strGIF then    ' is GIF


        strImageType = "GIF"
        Width = lngConvert(GetBytes(flnm, 7, 2))
        Height = lngConvert(GetBytes(flnm, 9, 2))
        Depth = 2 ^ ((asc(GetBytes(flnm, 11, 1)) and 7) + 1)
        gfxSpex = True


     elseif left(strType, 2) = strBMP then  ' is BMP


        strImageType = "BMP"
        Width = lngConvert(GetBytes(flnm, 19, 2))
        Height = lngConvert(GetBytes(flnm, 23, 2))
        Depth = 2 ^ (asc(GetBytes(flnm, 29, 1)))
        gfxSpex = True


     elseif strType = strPNG then   ' Is PNG


        strImageType = "PNG"
        Width = lngConvert2(GetBytes(flnm, 19, 2))
        Height = lngConvert2(GetBytes(flnm, 23, 2))
        Depth = getBytes(flnm, 25, 2)


        select case asc(right(Depth,1))
           case 0
              Depth = 2 ^ (asc(left(Depth, 1)))
              gfxSpex = True
           case 2
              Depth = 2 ^ (asc(left(Depth, 1)) * 3)
              gfxSpex = True
           case 3
              Depth = 2 ^ (asc(left(Depth, 1)))  '8
              gfxSpex = True
           case 4
              Depth = 2 ^ (asc(left(Depth, 1)) * 2)
              gfxSpex = True
           case 6
              Depth = 2 ^ (asc(left(Depth, 1)) * 4)
              gfxSpex = True
           case else
              Depth = -1
        end select



     else


        strBuff = GetBytes(flnm, 0, -1)  ' Get all bytes from file
        lngSize = len(strBuff)
        flgFound = 0


        strTarget = chr(255) & chr(216) & chr(255)
        flgFound = instr(strBuff, strTarget)


        if flgFound = 0 then
           exit function
        end if


        strImageType = "JPG"
        lngPos = flgFound + 2
        ExitLoop = false


        do while ExitLoop = False and lngPos < lngSize


           do while asc(mid(strBuff, lngPos, 1)) = 255 and lngPos < lngSize
              lngPos = lngPos + 1
           loop


           if asc(mid(strBuff, lngPos, 1)) < 192 or asc(mid(strBuff, lngPos, 1)) > 195 then
              lngMarkerSize = lngConvert2(mid(strBuff, lngPos + 1, 2))
              lngPos = lngPos + lngMarkerSize  + 1
           else
              ExitLoop = True
 &njsp;         end if


       loop
       '
       if ExitLoop = False then


          Width = -1
          Height = -1
          Depth = -1


       else


          Height = lngConvert2(mid(strBuff, lngPos + 4, 2))
          Width = lngConvert2(mid(strBuff, lngPos + 6, 2))
          Depth = 2 ^ (asc(mid(strBuff, lngPos + 8, 1)) * 8)
          gfxSpex = True


       end if
                  
     end if


  end function
%>



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...

sexta-feira, 19 de abril de 2002

0

Status do icq no ASP

Com essa dica você pode saber o status do icq de alguém (provavelmente você vai usar pra verificar seu próprio status) através do ASP. É preciso que você tenha ASPHTTP e que a visualização do seu status pela web esteja habilitada no icq.


<%
MeuUIN="41910114"
Set HTTPObj = Server.CreateObject("AspHTTP.Conn")
HTTPObj.Url = "http://web.icq.com/wwp/1,,,00.html?Uin=" & MeuUIN
HTTPObj.FollowRedirects = true
strurl=HTTPObj.GetURL
online = (inStr(lcase(strurl), "the user is currently offline")=0)
%>


Pronto, a variável online contém True se vc estiver online e False se não estiver.


Dá pra fazer a mesma coisa baixando aquelas imagenzinhas que o icq disponibiliza, mas o código é mais complicado e eu não vejo nenhum benefício.


Esta dica foi criada pelo meu irmão, Peka (peka_asp@yahoo.com.br)



Esta matéria foi postada originalmente no ASP4Developers por Elcio Luiz Ferreira (site), que na época era " analista-programador apaixonado por javascript, ex-professor, músico amador, ciclista amador, teólogo amador, filósofo amador, escritor amador e comediante amador.". Hoje, vai saber...

0

SQL Básico e Avançado

Muito fácil de aprender ou se quiser torna-lo como uma referencia prática é muito bom, comandos que pode ser usado para a maioria dos banco de dados.


para usuarios Básico e Intermediário


Listar, excluir, alterar, mesclar dados de uma tabela
Criar, excluir, modificar campos de uma tabela
Criar, excluir, modificar tabelas
Criar e Excluir Banco de Dados


Muito bom...


http://www.w3schools.com/sql/default.asp



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...

quinta-feira, 18 de abril de 2002

0

Visualização da estrutura das tabelas do BD

<% Option Explicit %>
<!--#include file="adovbs.inc"-->
<%
Dim oConexao, oTabela, oADOXDB, i
Dim oConn, oTableRs, oColumnRs
Dim sTabela, spConexao


'## Função que retorna o tipo da informção que compõe o campo ##
Function FieldType(sfpType,sfpLength,sfpPrecision)
Dim sfRetorno


   Select Case sfpType
       Case "2"
          sfRetorno = "smallint"
       Case "3"
          sfRetorno = "int"
       Case "4"
          sfRetorno = "real"
       Case "11"
          sfRetorno = "bit"
       Case "17"
          sfRetorno = "tinyint"
       Case "128"
          sfRetorno = "image"
       Case "129","130"
          if sfpLength = "2147483647" then
             sfRetorno = "text"
          else
             sfRetorno = "char/varchar"
          end if
       Case "5","131"
          if sfpPrecision > 0 then
            sfRetorno = "decimal"
          else
            sfRetorno = "numeric"
          end if
       Case "7","135"
          sfRetorno = "datetime"
       Case Else
          sfRetorno = "(indefinido)"
   End Select
   FieldType = sfRetorno


End Function


   '## Pega a tabela selecionada na URL ##
   sTabela = request.querystring("tabela")


   '## String de Conexao ##
   'spConexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=PATH+BANCO_DADOS.MDB"
   'spConexao = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&server.mappath("BANCO_DADOS.MDB")


   '## Conexao com o BD ##
   Set oADOXDB = Server.CreateObject("ADOX.Catalog")
   oADOXDB.ActiveConnection = spConexao
%>
<html>
<head>
<title>:::: Estrutura da(s) Tabela(s) ::::  por Myers</title>
<style type="text/css">
<!--
.tblTituloX {  border-top: double 1px #000000; border-left: double 1px #000000; border-right: double 1px #000000; font-family: verdana; font-weight: bold; font-size: 11px}
.tblTitulo0 {  border-top: solid 1px #000000; border-bottom: solid 1px #000000; border-left: solid 1px #000000; border-right: solid 1px #000000; font-family: verdana; font-weight: bold; font-size: 11px}
.tblTitulo1 {  border-top: solid 1px #000000; border-bottom: solid 1px #000000; border-right: solid 1px #000000; font-family: verdana; font-weight: bold; font-size: 11px}
.tblCelula0 {  border-bottom: solid 1px #E7E7E7; border-left: solid 1px #E7E7E7; border-right: solid 1px #E7E7E7; font-family: verdana; font-size: 11px}
.tblCelula1 {  border-bottom: solid 1px #E7E7E7; border-right: solid 1px #E7E7E7; font-family: verdana; font-size: 11px}
.lsvTblNor{color: #000000; background-color: #E7E7E7; font :  Verdana, Geneva, Arial, Helvetica, sans-serif; font-weight : bold; font-size: 8px}
.lsvTblSel{color: #000000; background-color: #CCCCCC; font :  Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 8px}
.lsvTblOut{ border : 1px solid; border-color: #000000;   font-size: 11px;}
-->
</style>
</head>


<body bgcolor="#FFFFFF">
<form method="post" action="<%= request.ServerVariables("SCRIPT_NAME") %>" name="frmListaTabelas">
  <blockquote>
  <select name="cmbTabelas" onChange="window.location='<%= request.ServerVariables("SCRIPT_NAME") %>?tabela='+this.value" class="lsvTblOut">
    <option value="0" class="lsvTblNor">:::: Selecione a tabela :::: </option>
    <% if sTabela = "showalltables" then %>
    <option value="showalltables" class="lsvTblSel" selected>- Todas -</option>
    <% else %>
    <option value="showalltables" class="lsvTblNor">- Todas -</option>
    <% end if %>
    <%
    '## Preenche o select com as tabelas do Banco de Dados ##
    for each oTabela in oADOXDB.Tables
       if oTabela.Type = "TABLE" then
          if LCase(oTabela.Name) = LCase(sTabela) then
             response.write "    <option value="""&oTabela.Name&""" class=""lsvTblSel"" selected>"&_
                            oTabela.Name&"</option>"&vbCRLF
          else
             response.write "    <option value="""&oTabela.Name&""" class=""lsvTblNor"">"&_
                            oTabela.Name&"</option>"&vbCRLF
          end if
       end if
    next
    %>
  </select>
  </blockquote>
  <br>
  <%
   if sTabela <> "" or not IsNull(sTabela) then
      if Lcase(sTabela) = Lcase("showalltables") then


     '## Exibicao TODAS as Tabelas ##
      Set oConn = Server.CreateObject("ADODB.Connection")
      oConn.ConnectionString = spConexao
      oConn.Open


      '## Retorna as tabelas do BD ##
      Set oTableRS = oConn.OpenSchema(adSchemaTables, _
                     Array(Empty, Empty, Empty, "TABLE"))


      do while not oTableRS.EOF
  %>
  <table border="0" cellspacing="0" cellpadding="2" width="90%" align="center">
    <tr bgcolor="#CCCCCC">
      <td colspan="7" align="center" class="tblTituloX"><%=oTableRS("Table_Name").Value%></td>
    </tr>
    <tr bgcolor="#E7E7E7">
      <td class="tblTitulo0" nowrap>CAMPO</td>
      <td class="tblTitulo1" nowrap>TIPO</td>
      <td class="tblTitulo1" nowrap>TAMANHO</td>
      <td class="tblTitulo1" nowrap>PRECIS&Atilde;O</td>
      <td class="tblTitulo1" nowrap>ESCALA</td>
      <td class="tblTitulo1" nowrap>PERMITIR NULO</td>
      <td class="tblTitulo1" nowrap>VALOR PADR&Atilde;O</td>
    </tr>
    <%
         '## Retorna as colunas de cada tabela (oTableRS("Table_Name").Value) ##
         Set oColumnRs = oConn.OpenSchema(adSchemaColumns, _
            Array(Empty, Empty, oTableRS("Table_Name").Value))
         do while not oColumnRs.EOF
    %>
    <tr>
      <td class="tblCelula0" nowrap><%=oColumnRs("Column_Name")%>&nbsp;</td>
      <td class="tblCelula1" nowrap><%response.write FieldType(oColumnRs("Data_Type"),_
           oColumnRs("Character_Maximum_Length"),oColumnRs("Numeric_Precision"))&_
           "("&oColumnRs("Data_Type")&")"%>
&nbsp;</td>
      <td class="tblCelula1" nowrap><%=oColumnRs("Character_Maximum_Length")%>&nbsp;</td>
      <td class="tblCelula1" nowrap><%=oColumnRs("Numeric_Precision")%>&nbsp;</td>
      <td class="tblCelula1" nowrap><%=oColumnRs("Numeric_Scale")%>&nbsp;</td>
      <td class="tblCelula1" align="center" nowrap>
      <% if oColumnRs("Is_Nullable") then %>
        <input type="checkbox" name="ckbNulo" checked>
      <% else %>
        <input type="checkbox" name="ckbNulo">
      <% end if %>
      </td>
      <td class="tblCelula1" nowrap><%=oColumnRs("Column_Default")%>&nbsp;</td>
       </tr>
     <%
         oColumnRs.MoveNext
         loop


     %>
      </table><p>
     <%
      Set oColumnRs = Nothing
      oTableRS.MoveNext
      loop



      oTableRS.Close
      Set oTableRS = nothing


      oConn.Close
      Set oConn = Nothing


  else
      '## Exibe tabelas separadas ##


      '## Abre a conexao
      Set oConn = Server.CreateObject("ADODB.Connection")
      oConn.ConnectionString = spConexao
      oConn.Open


      '## Retorna as Colunas da tabela selecionada (sTabela) ##
      Set oColumnRs = oConn.OpenSchema(adSchemaColumns, Array(Empty, Empty, sTabela))
      if not oColumnRs.EOF then
    %>
  <table border="0" cellspacing="0" cellpadding="2" width="90%" align="center">
    <tr bgcolor="#CCCCCC">
      <td colspan="7" align="center" class="tblTituloX"><%=sTabela%></td>
    </tr>
    <tr bgcolor="#E7E7E7">
      <td class="tblTitulo0" nowrap>CAMPO</td>
      <td class="tblTitulo1" nowrap>TIPO</td>
      <td class="tblTitulo1" nowrap>TAMANHO</td>
      <td class="tblTitulo1" nowrap>PRECIS&Atilde;O</td>
      <td class="tblTitulo1" nowrap>ESCALA</td>
      <td class="tblTitulo1" nowrap>PERMITIR NULO</td>
      <td class="tblTitulo1" nowrap>VALOR PADR&Atilde;O</td>
    </tr>
    <%
       do while not oColumnRs.EOF
    %>
    <tr>
      <td class="tblCelula0" nowrap><%=oColumnRs("Column_Name")%>&nbsp;</td>
      <td class="tblCelula1" nowrap><%response.write FieldType(oColumnRs("Data_Type"),_
           oColumnRs("Character_Maximum_Length"),oColumnRs("Numeric_Precision"))&_
           "("&oColumnRs("Data_Type")&")"%>
&nbsp;</td>
      <td class="tblCelula1" nowrap><%=oColumnRs("Character_Maximum_Length")%>&nbsp;</td>
      <td class="tblCelula1" nowrap><%=oColumnRs("Numeric_Precision")%>&nbsp;</td>
      <td class="tblCelula1" nowrap><%=oColumnRs("Numeric_Scale")%>&nbsp;</td>
      <td class="tblCelula1" align="center" nowrap>
      <% if oColumnRs("Is_Nullable") then %>
        <input type="checkbox" name="ckbNulo" checked>
      <% else %>
        <input type="checkbox" name="ckbNulo">
      <% end if %>
      </td>
      <td class="tblCelula1" nowrap><%=oColumnRs("Column_Default")%>&nbsp;</td>
    </tr>
  <%


       oColumnRs.MoveNext
       Loop


       oColumnRs.Close
       Set oColumnRs = Nothing


       oConn.Close
       Set oConn = Nothing
  %>
  </table>
  <%


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



Esta matéria foi postada originalmente no ASP4Developers por Rafael "M4yers" Rossi (site), que na época era "...". Hoje, vai saber...

quarta-feira, 17 de abril de 2002

2

Removendo espaços iniciais, finais e duplicados em uma string

Uma das coisas que um programador VB sente falta quando vai trabalhar com Javascript é da função trim(), que remove os espaços iniciais e finais de uma string. O código abaixo implementa o método superTrim no objeto String do Javascript, que, além dos brancos iniciais e finais, remove tbém os espaços em branco duplicados dentro de uma string, mediante o uso de expressões regulares.


<script type="text/javascript">


String.prototype.superTrim = superTrim; //Implementa o método superTrim() no objeto String.
function superTrim(){ return( this.replace( /^\s+|\s+$/gi, "" ).replace( /\s{2,}/gi, " " ) ) }


//String com espaços a serem removidos
var strEspacos = " 123   456  78   9  "


document.write( "<xmp>" )
document.write( "[" + strEspacos + "] " + strEspacos.length + " espaços\n" ) // String original


strEspacos = strEspacos.superTrim();
document.write( "[" + strEspacos + "] " + strEspacos.length + " espaços\n" ) // String compactada
document.write( "</xmp>" )


</script>



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...

terça-feira, 16 de abril de 2002

0

Lendo QueryString no client

Esses dias um colega numa lista de discussão me perguntou se tem como ler em uma página os valores submetidos por um formulário em outra sem usar ASP, PHP ou qualquer outra linguagem de servidor. Eu pensei em uma porção de sugestões, com cookies por exemplo. Ele perguntou então se era possível ler Query Strings (aquele texto no endereço da página depois do ?). Então lá vai:


Pra começar, é importante saber que a Query String é gerada pelo browser quando o formulário é submetido com método GET. Você também pode digitar uma Query String diretamente na barra de endereços ou requisitá-la através de um link (isso não vai funcionar se o arquivo estiver em sua máquina, apenas se estiver num servidor web. Portanto, para testar na sua máquina, você vai ter que criar um formulário).


A Query String vem depois do endereço da página, no seguinte formato:



?primeiravariavel=dados&segundavariavel=dados&terceiravariavel=dados


Sendo que os dados estão codificados (se você usa ASP, pode codificar os dados com Server.URLEncode)


Vamos ao script, você coloca isso no começo das páginas:

<script>
qs=new Array()
variaveis=location.search.replace(/\x3F/,"").replace(/\x2B/g," ").split("&")
if(variaveis!=""){
for(i=
0;i<variaveis.length;i++){nvar=variaveis[i].split("=")
qs[nvar[0]]=unescape(nvar[1])
}
}
function QueryString(variavel){
return qs[variavel]
}
</script>

E, em qualquer lugar do documento, você pode ler um valor da Query String com:


 

nome=QueryString("nome")

E é só isso.




Quer dar uma olhadinha passo-a-passo? Olha aí:

<script>
/*
Cria um novo Array vazio:
*/
qs=new Array()

/*
A propriedade search do objeto location é o que vem depois do
"?" no endereço da página (incluindo o "?").
Esse primeiro replace(/\x3F/,"") elimina esse "?" inicial.
Um espaço em Query String é substituído por um sinal de mais (+).
Curiosamente, a função unescape não reverte o sinal em espaço.
Por isso esse segundo replace(/\x2B/g," "), que substitui os
sinais de mais por espaços.
E o último split separa cada variável da Query String num Array.
*/
variaveis=location.search.replace(/\x3F/,"").replace(/\x2B/g," ").split("&")

/*
Esse bloco varre o Array, separando (split("=")) o nome da
variável do valor. A função unescape descodifica o valor (pra
codificar use escape). Os valores vão pro Array qs.
*/
if(variaveis!=""){
for(i=0;i<variaveis.length;i++){
nvar=variaveis[i].split("=")
qs[nvar[0]]=unescape(nvar[1])
}
}

/*
Essa função é só umaponte pro Array qs.
Preferi deixar os resultados acessíveis por uma função por dois
motivos:
1. Os valores ficam acessíveis também por VBScript
2. É mais bonito de escrever
*/




function QueryString(variavel){
return qs[variavel]
}
</script>
Boa sorte!


Esta matéria foi postada originalmente no ASP4Developers por Elcio Luiz Ferreira (site), que na época era " analista-programador apaixonado por javascript, ex-professor, músico amador, ciclista amador, teólogo amador, filósofo amador, escritor amador e comediante amador.". Hoje, vai saber...

sexta-feira, 12 de abril de 2002

0

Extraindo endereços de e-mail do código HTML

Essa dica é inspirada na dica sobre tags HTML do Adriano Dias, onde postei um comentário.


Suponha que você tem um código HTML qualquer, ou outro bloco de texto, e quer listar todos os endereços de e-mail do texto, sem duplicação. Você pode fazer isso com essa função javascript:

function tiramail(texto){
resposta=""
texts=new Array()

//Tira quebras de linha e as {}
texto=texto.replace(/[\n\r\{}]/g,"")

//Cerca e-mails por {}
texto=texto.replace(/([\w\.-]*)@([\w\.-]*)/gi,"{{{$1@$2}}}")

//Tira os e-mails que começa ou terminam com @ ou não possuem ponto depois do @
texto=texto.replace(/\{\{\{@[^}]*}}}/g,"").replace(/\{\{\{[^}]*@[^}\.]*}}}/g,"")

//Limpa o começo e o final do texto
texto=texto.replace(/^[^\{]*/,"").replace(/[^}]*$/,"")

//Limpa os {{{}}}
texto=texto.replace(/^[^\{]*\{\{\{/,"").replace(/}}}[^}]*$/,"").replace(/}}}[^{]*\{\{\{/g,",")

//usa os endereços como índice de array para remover os duplicados
texto=texto.split(",")
for(i=0;i<texto.length;i++)
eval("texts[\""+texto[i].replace(/[@\.]/g,"")+"\"]=texto[i]")
for(i in texts)resposta+=texts[i]+","
return resposta.replace(/,$/,"")
}


Esta matéria foi postada originalmente no ASP4Developers por Elcio Luiz Ferreira (site), que na época era " analista-programador apaixonado por javascript, ex-professor, músico amador, ciclista amador, teólogo amador, filósofo amador, escritor amador e comediante amador.". Hoje, vai saber...

domingo, 31 de março de 2002

0

Verificação de E-mail simples

Este exemplo é uma verificação simples (e lógica) de e-mail. Parto
do princípio que o e-mail sempre tem que ter o símbolo arroba (@) e
o símbolo ponto (.) depois da arroba. Segue os exemplos:


1) jose@email.com - VÁLIDO
2) jose.silva@email.com - VÁLIDO
3) josesilva@email.com - VÁLIDO
4) josesilva@email.com.br - VÁLIDO
5) jose@email - INVÁLIDO, falta o .etc (.com , .com.br , .net , .org , .gov, ...)
6) jose.silva@email - INVÁLIDO, falta o ponto alguma coisa, note que há um ponto antes da arroba
7) joseemail.com - INVÁLIDO, falta a arroba
etc.


O e-mail tem que ter, pelo menos, uma arroba e um ponto depois da arroba. Para isso, fiz esse
verificador de e-mail bastante simples que escrevo abaixo.



<%


' Declaração das variáveis


Dim  v_email
 arroba
 ponto
 check_email



' Atribúi a uma variável (v_email) o valor oriundo do formulário


v_email = request.form("email")



' Conta a posição do símbolo arroba (@) na variável v_email
' por exemplo, se o valor da variável v_email for "
jose@email.com"
' a variável arromba será igual a 4. Se a variável email for
' "joseemail.com.br" o valor da variável arroba será igual a 0.


 arroba = inStr(1,v_email,"@")


' Conta a posição do símbolo ponto (.) na variável v_email. Mesma
' situaçao da linha anterior


If arroba <> 0 Then
   ponto = inStr(arroba,v_email,".")
End If



' A variável check_email recebe o valor da soma das variáveis arroba
' e ponto (óbvio).


 check_email = arroba+ponto


 


if check_email<(arroba+2) then


 Response.write("O e-mail digitado é INVÁLIDO")


else


 Response.write("O e-mail digitado é VÁLIDO")


end if


%>



Esta matéria foi postada originalmente no ASP4Developers por Carlos Campello (site), que na época era "Estudante de informática e, atualmente trabalhando na confecção de sites.". Hoje, vai saber...

terça-feira, 26 de março de 2002

0

Dando um passeio no ASP.NET

Matéria


O principal objetivo da arquitetura .NET é permitir ao usuário o fácil acesso a seus aplicativos e dados em qualquer lugar, a qualquer hora e usando qualquer dispositivo. Para concretizar esta visão existem vários componentes, de servidores a ferramentas de desenvolvimento.


Uma importante capacidade desta arquitetura é a de interagir com navegadores HTML comuns, até mesmo produzidos por outras empresas que não a Microsoft. É aqui que o ASP.NET entra em cena. O ASP.NET é uma ferramenta "RAD" para o desenvolvimento de aplicativos baseados em páginas HTML. Dentre suas várias vantagens, é um grande salto em produtividade quando comparado a qualquer outra ferramenta do mercado. Ele torna o desenvolvimento de aplicativos baseados em Web tão simples como o desenvolvimento de aplicativos em Visual Basic. O programador não tem sequer que conhecer HTML ou "scripts de cliente" (usualmente JScritp) para criar aplicativos sofisticados.


A chave para este recurso é um ambiente de desenvolvimento que usa componentes para processar eventos do navegador e gerar HTML. Além dos componentes que já vem com o VS.NET, certamente aparecerão diversos componentes de terceiros.


Mesmo que você não decida abraçar toda a arquitetura .NET (WinForms, por exemplo), os ganhos de produtividade do ASP.NET são razão bastante para usa-lo.


Criando um projeto



Abra o VS.NET e selecione "New | Project | Visual C# Projects | WebApplication". Dê nome "Calculator" e aperte "Ok":
 
Você agora tem uma "solução" (um conjunto de projetos relacionados) com um único projeto dentro. O projeto contém um único "WebForm" chamado "WebForm1.aspx", uma página HTML especial que tem um fonte em linguagem de alto nível associado - C# no caso. Não se preocupe com os demais arquivos:
 
Abra agora o "Toolbox" (Ctrl-Alt-X), vá até a página "WebForm1.aspx" e arraste dois componentes "TextBox", quatro "Button" e um "ListBox". Use a tecla "Enter" para separar os componentes em diferentes linhas. Selecione a página "Properties" (F4) e mude a propriedade "Text" dos botões para as quatro operações ("+", "-", "*" e "/"), como mostrado a seguir:
 
Note que você pode escolher entre dois modos de "Page Layout": "linear" e "grid". O modo "GridLayout" permite o posicionamento dos componentes em coordenadas absolutas "X e Y", mas não é compatível com todos os navegadores. Deixaremos esta propriedade com o valor padrão, "LinearLayout".
Os componentes que colocamos no formulário se parecem muito com "tags" HTML, mas isto não é verdade. Por exemplo, o componente "TextBox" pode gerar as tags "INPUT", "INPUT PASSWORD" ou "TEXTAREA", dependendo do valor da propriedade "TextMode". Eles podem até mesmo não gerar nenhuma saída visível no navegador caso a propriedade "Visible" seja "false". Os componentes são abstrações de alto nível de elementos usados nos aplicativos. Os próprios componentes geram a saída em HTML conforme necessário e de forma compatível com o navegador (HTML 4.0, HTML 3.2, WAAP, JScript etc). O seu aplicativo não precisa saber nada a respeito de HTML; os componentes interagem com o navegador específico que o usuário estiver rodando.
Selecione agora o botão "+" e clique no "raio" na página "Properties". Note que cada componente tem vários eventos. Esta é uma maneira de trabalho muito parecida com a do Visual Basic, mas é um grande contraste em relação a outras ferramentas HTML, onde todo o formulário gera um único evento e você deve escrever código para descobrir que componente fez o que.
Escreva "DoOperation" na caixa de texto ao lado do "Click":
 
Quando você pressionar "Enter", será exibido o editor de código. Como desejamos que todos os botões apontem para o mesmo evento, vá até o WebForm (clique na aba "WebForm1.aspx" na parte superior) e  selecione todos os botões pressionando a tecla "Shift". Vá até a página de eventos, clique no "combobox" ao lado de "Click" e selecione "DoOperation". Novamente o editor de código será aberto, conforme mostrado a seguir:
 
Existe um detalhe interessante a respeito do gerenciamento de eventos: o nome do método associado ao evento é completamente arbitrário; ele não é baseado em nenhuma "regra de nomes". Dentre as várias vantagens, isto permite que mapeemos vários eventos ao mesmo método, como acabamos de fazer.
Digite agora o seguinte código:


protected void DoOperation (object sender, System.EventArgs e) {
  // Verifica se a validação foi correta
  if (!this.IsValid)
    return;
  // Pega o texto do botão
  string Oper = ((Button)sender).Text;
  // Variável para o resultado. O tipo decimal é menos propenso a erros de arredondamento
  decimal Result = 0;
  string Msg = "";
  // Este é um bloco de tratamento de erro
  try {
  // Pega o conteúdo dos campos de texto e converte para decimal
    decimal N1 = TextBox1.Text.ToDecimal();
    decimal N2 = TextBox2.Text.ToDecimal();
    // Você pode usar string em um a switch.As opções são mutuamente exclusivas
    switch (Oper) {
      case "+": Result = N1 + N2; break;
      case "-": Result = N1 - N2; break;
      case "*": Result = N1 * N2; break;
      case "/": Result = N1 / N2; break;
    }
    Msg = TextBox1.Text + Oper + TextBox2.Text + "=" + Result.ToString();
  }
  // Trata divisão poe zero
  catch(System.DivideByZeroException) {
    Msg = "Você não pode dividir por zero ";
  }
  // Trata erros de conversão
  catch(System.FormatException) {
    Msg = "Você deve fornecer dois números";
  }
  // Adiciona ao list box. Isto é MUITO mais simples que o ASP tradicional
  ListBox1.Items.Add(Msg);
}
Agora selecione "Debug | Start Without Debugging". O VS.NET irá compilar o seu código, atualizar os arquivos no servidor Web e abrir um navegador para chamar a sua página. Você pode ter alguns erros de compilação; corrija-os até conseguir a página de teste:
 
Existem várias coisas interessantes neste projeto:
· O modelo de desenvolvimento é muito mais parecido com o Visual Basic do que com outras ferramentas HTML.
· Não vimos nenhuma linha de código HTML. Você até pode editar o HTML diretamente (selecione "HTML" na página "WebFrom1.aspx"), mas isto não é necessário.
· O código (arquivo ".cs") é separado da apresentação (arquivo ".aspx"). O "Web designer" pode mudar a aparência da aplicação sem afetar o código.
· O seu programa ter performance de código compilado e seu fonte está seguro; seu provedor só enxerga os fontes do seu código se você quiser.
· Os componentes mantêm automaticamente o estado sem uma única linha de código. Imagine quanto código seria necessário apenas para manter o estado do "ListBox" acima.
· Temos o poder de uma linguagem "de gente grande" como o C# de forma a permitir a escrita de código mais seguro e poderoso. Não existe mais a necessidade de escrever componentes COM apenas para complementar coisas difíceis de fazer em VBScript ou JScript.
· Podemos usar o poder do C# e VS.NET para melhor organizar o código e dividi-lo entre os diversos membros de uma equipe.
Validação no cliente
Vamos avançar um pouco mais no nosso exemplo. Suponha que desejemos validar o conteúdo dos "TextBoxes" no cliente. Algo como se os números entrados são válidos, sem precisar ir e voltar ao servidor. Usando a tecnologia corrente de navegadores, isto só é possível com "scrips de cliente", usualmente escrito em JScript. Scripts de cliente são particularmente difíceis de escrever e depurar, mas o ASP.NET pode gera-los automaticamente para nós!
Da página "Web Forms" no "Toolbox", adicione um "CompareValidator" ao lado de cada "TextBox". Mude as seguintes propriedades em cada um deles:
· ErrorMessage: "Este não é um número válido"
· ControlToValid: TextBox1 ou TextBox2
· Operator: DataTypeCheck
· Type: Double
Rode o programa. Observe que os conteúdos dos TextBox serão validados no cliente, usando um "script" que foi enviado ao navegador. Você pode agora perguntar o que aconteceria caso tivesse sido usado um navegador que não suporte scripts de cliente. A resposta é simples: nenhum script é enviado e a validação será efetuada apenas no servidor. Na verdade, a validação sempre é feita no servidor de forma a evitar "falsificações de página" (spoofing). Esta é a razão para as duas linhas no início do nosso código: temos que impedir o resto de rodar caso a validação no servidor falhe.


Conclusão


O ASP.NET é um ambiente poderoso e produtivo para o desenvolvimento de aplicativos baseados em HTML. Ele torna o desenvolvimento de aplicativos Web tão simples como o desenvolvimento de aplicativos Windows usando uma ferramenta RAD como o Visual Basic.


PS:Artigo retirado do Site http://msdn.microsoft.com



Esta matéria foi postada originalmente no ASP4Developers por Flavio Giovanni (site), que na época era "Programador em ASP, VB 6.0, VB.Net e SQLServer. Analista de Sistemas da Siplan Informática LTDA.
". Hoje, vai saber...

terça-feira, 19 de março de 2002

0

Conversão de base

O amigo Anarfa do news mandou a rotina abaixo que permite fazer conversão de base de decimal para binário, octal, hexadecimal, etc. Na verdade, permite que a base seja um número entre 2 e 35, o que é mais do que suficiente para as aplicações corriqueiras.

Function N2Y(Nv, Bv)
Dim ys, y1, n1, b1, r1
ys = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
y1 = "": n1 = Nv: b1 = Bv
Do While n1 <> 0
  r1 = n1 Mod b1
  n1 = n1 \ b1
  y1 = Mid(ys, r1 + 1, 1) & y1
Loop
if Nv = 0 then
   N2Y = 0
else
   N2Y = y1
end if
End Function



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...

terça-feira, 5 de março de 2002

0

Validação de Data

Essa é uma função para validação de datas em Javascript. Já a utilizo há um bom tempo e nunca tive problemas.


Essa função faz a validação, inclusive, da quantidade de dias no mes de fevereiro em função do ano.


 


function verificaData(Data)
 {
  var dma = -1;
  var data = Array(3);
  var ch = Data.charAt(0); 
  for(i=0; i < Data.length && (( ch >= '0' && ch <= '9' ) || ( ch == '/' && i != 0 ) ); ){
   data[++dma] = '';
   if(ch!='/' && i != 0) return false;
   if(i != 0 ) ch = Data.charAt(++i);
   if(ch=='0') ch = Data.charAt(++i);
   while( ch >= '0' && ch <= '9' ){
    data[dma] += ch;
    ch = Data.charAt(++i);
   } 
  }
  if(ch!='') return false;
  if(data[0] == '' || isNaN(data[0]) || parseInt(data[0]) < 1) return false;
  if(data[1] == '' || isNaN(data[1]) || parseInt(data[1]) < 1 || parseInt(data[1]) > 12) return false;
  if(data[2] == '' || isNaN(data[2]) || ((parseInt(data[2]) < 0 || parseInt(data[2]) > 99 ) && (parseInt(data[2]) < 1900 || parseInt(data[2]) > 9999))) return false;
  if(data[2] < 50) data[2] = parseInt(data[2]) + 2000;
  else if(data[2] < 100) data[2] = parseInt(data[2]) + 1900;
  switch(parseInt(data[1])){
   case 2: { if(((parseInt(data[2])%4!=0 || (parseInt(data[2])%100==0 && parseInt(data[2])%400!=0)) && parseInt(data[0]) > 28) || parseInt(data[0]) > 29 ) return false; break; }
   case 4: case 6: case 9: case 11: { if(parseInt(data[0]) > 30) return false; break;}
   default: { if(parseInt(data[0]) > 31) return false;}
  }
  return true;
 }



Esta matéria foi postada originalmente no ASP4Developers por Wellington Duraes (site), que na época era "Analista de Sistemas, MSCD, Mestrando em Eng. da Computação pelo IPT, formado pela Fatec SP. ". Hoje, vai saber...