quinta-feira, 31 de maio de 2001

0

Verificar se um campo é numérico

Contribuição feita pelo amigo Scryptor:


<html>
<head>
<script language="JavaScript">
function isNumeric(){


/* Use a funcao "isNaN()" para a verificação
 Ele retorna FALSE, caso a string seja um valor numérico
ou ele retorna TRUE caso a string seja um formato texto */


 String = document.forms.MeuFORM.txtPalavra.value
 if (isNaN(String)){
 alert(isNaN(String));
  alert("O valor apresentado não numérico") }
 else{
 
alert("O valor é numérico")}
}
</script>
</head>
<body bgcolor=white text=black>
<font face=verdana size=1>
Verifica se o tal valor é numérico ou não.
mesma função que "IsNumeric()" do VbScript
<form name=MeuFORM>
 <input type=text size=60 name="txtPalavra" style="font-family: Verdana;font-size=8pt">
 <input type=button value=" Verificar " onclick="isNumeric()" style="Font-family:verdana;font-size=8pt">
</form>


</body>
</html>



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

0

Trim no JS

Contribuição feita pelo amigo Scryptor:


<html>
<script Language=JavaScript>
function TrimJS(){


String = document.forms.oForm.txt1.value
alert(String)
Resultado = String



//Retira os espaços do inicio
//Enquanto o primeiro caracter for igual à "Espaço"
//1 caracter do inicio é removido


var i
i = 0
alert(Resultado)


if (Resultado.charCodeAt(2-1) == '32'){
}


while (Resultado.charCodeAt(0) == '32'){
   Resultado = String.substring(i,String.length);
  i++;}


//Pega a string já formatada e agora retira os espaços do final
//mesmo esquema, enquanto o ultimo caracter for um espaço,
//ele retira 1 caracter do final...


while(Resultado.charCodeAt(Resultado.length-1) == "32"){
   Resultado = Resultado.substring(0,Resultado.length-1);
  }


document.forms.oForm.txt2.value = Resultado
 
String = ""


}
</script>
<body>
<font face=verdana size=1>
Script que possui a mesma função usada no "Trim()" do VbScript<br>
Retira todos os espaços do inicio e fim da string, se existirem.


<form name=oForm>
<font face=verdana size=1>
String :<br>
<input type=Text name="txt1" style="font-family:verdana;font-size:8pt" size=40><br>
Resultado :<br>
<input type=Text name="txt2" style="font-family:verdana;font-size:8pt" size=40><br><br>


<input type="button" value="Retirar espaços do inicio e fim" onclick="TrimJS()" style="font-family:verdana;font-size:8pt">


</form>
</body>
</html>



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

0

Validação de datas

Contribuição feita pelo amigo Scryptor:


<html>
<head>
<title>Untitled</title>
<Script language="JavaScript">


function isDateJS(Data){


if (Data == ""){
 return false }


Data_valida = true
 
if (Data.length > 10){
 Data_valida = false
 }
 
//Se a Data for apenas números retorna inválido
if (!isNaN(Data)){
 Data_valida = false
}


for (i=0;i<=Data.length;i++){
 if (isNaN(Data.charAt(i))){
  Separador = Data.charAt(i) 
  
  //SE O SEPARADOR FOR DIRERENTE DE "/" , RETORNA DATA INVALIDA.
  if (Separador != "/"){
   Data_valida = false;
   
   }
     
  Dia = Data.substring(0,Data.indexOf(Separador)) 
  Mes = Data.substring(eval(Data.indexOf(Separador) + 1),Data.lastIndexOf(Separador)) 
  Ano = Data.substring(eval(Data.lastIndexOf(Separador) + 1),Data.length) 
 } //End if
} // End For



if (isNaN(Dia)){
 Data_valida = false  }
 
if (Dia.length < 1 || Dia.length > 2){ 
 Data_valida = false }
 
if (isNaN(Mes)){
 Data_valida = false }
 
if (Mes.length < 1 || Mes.length > 2 ){ 
 Data_valida = false }
 
if (isNaN(Ano)){
 Data_valida = false }
 
if (Ano.length < 2 || Ano.length > 4){ 
 Data_valida = false } 
 
if (Dia < 1 || Dia > 31 || Mes < 1 || Mes > 12){
 Data_valida = false }

alert(Data_valida)


//By scryptor® 
}// Fim da função


</script>
</head>


<body>
<font face=verdana size=1>
Validação da data.<br>


Mesma função do isDate() do Visual Basic. <br>


<br>
<form name="frmData" onsubmit="isDate(document.forms.frmData.txtData.value)">
<input type=text name="txtData" style="font-family:verdana;font-size:8pt">
<input type="Button" onclick="isDateJS(document.forms.frmData.txtData.value)" value="Validar" style="font-family:verdana;font-size:8pt">
</form>


</body>
</html>



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

0

Data por extenso

Contribuição feita pelo amigo Scryptor:


<html>
<body bgcolor=black text=white>
<font face=verdana size=1><b>
Data por extenso.<br>
Este Script por ser auto-executável ,deve ser colocado no local onde será exibida a data.
<br>
<br>
Resultado :
<br>



<script>


Hoje = new Date()
Data = Hoje.getDate()
Dia = Hoje.getDay()
Mes = Hoje.getMonth()
Ano = Hoje.getYear()
//
if (Data<10) {
 Data  = "0" + Data}
if (Ano < 2000) {
 Ano = "19" + Ano}
//


NomeDia = new Array(7)


NomeDia[0] = "Domingo"
NomeDia[1] = "Segunda-feira"
NomeDia[2] = "Terça-feira"
NomeDia[3] = "Quarta-feira"
NomeDia[4] = "Quinta-feira"
NomeDia[5] = "Sexta-feira"
NomeDia[6] = "Sábado"
//
//
NomeMes = new Array(12)
NomeMes[0] = "Janeiro"
NomeMes[1] = "Fevereiro"
NomeMes[2] = "Março"
NomeMes[3] = "Abril"
NomeMes[4] = "Maio"
NomeMes[5] = "Junho"
NomeMes[6] = "Julho"
NomeMes[7] = "Agosto"
NomeMes[8] = "Setembro"
NomeMes[9] = "Outubro"
NomeMes[10] = "Novembro"
NomeMes[11] = "Dezembro"
//


// function MostrarData() {
document.write ("<font color='orange' face='verdana,tahoma' size=1><b>" + NomeDia[Dia] + ", " + Data + " de " + NomeMes[Mes] + " de " + Ano + "</b></font>")
// }
</script>
</body>
</html>



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

quarta-feira, 30 de maio de 2001

0

Instalando Certificados Digitais - Parte I

Vamos ver os passos para a instalação de certificados digitais , desde sua requisição para uma entidade certificadora , até a instalação no site , fazendo com que esse trabalhe em canal seguro SSL usando o protocolo HTTPS .


Algumas considerações iniciais :

Meu servidor é Windows 2000 , logo IIS5 , em inglês , e é nesse ambiente que vou explicar como eu fiz . No NT o processo é parecido , tem algumas mudanças durante a instalação do certificado .Não vou afirmar por fazer
tempo que não utilizo o PWS , mas acredito que ele não suporta o uso de certificados , e se alguém souber se estou enganado , seria interessante postar aqui como faz .

Vou falar primeiro do processo mais comum , que é solicitar um certificado de uma entidade certificadora , no meu exemplo , a Verisign :

- A primeira coisa a fazer é ir até o meu servidor IIS , e criar o arquivo para a solicitação de um certificado . Nas propriedades do "Default Web Site" , procuro a opção "Directory Security" , item "Secure comunications" .
Se eu não tenho nenhum certificado instalado ainda , a única opção disponível é "Server Certificade..." . Clicando nesse botão vai me aparecer um Wizard ( Obs. Lembre-se que é 2000 . No NT pode ter alguma diferença ,
não lembro agora ) . Leia as boas vindas ( ahaha , ninguém lê mesmo ) e "Next" ;

- Na próxima tela , clique na opção "Create a New Certificate" . Next ;

- Na próxima tela , clique na opção "Prepare the Request now , but send it later" ( Vamos fazer o pedido do certificado agora , mas vamos enviar depois ) ;

- Na próxima tela dê um nome para o pedido do certificado . Esse nome não é muito importante , mas coloque um nome fácil de lembrar depois . Nessa mesma
tela escolha o nível de criptografia do sei canal seguro . 1024 bits é o tipo mais utilizado . Next ;

- Na próxima tela , você deve colocar o nome da sua organização e sua unidade . Esses nomes serão importantes em um passo futuro . No meu exemplo
colocarei Organization : "Lula Company" e Organization Unit : "Lula Company Brazil" ( "Brazil" com "z" ... Que anti-patriótico !!! ) . Nesse último item, poderia ser também o nome de um departamento ( tipo CPD , Contabilidade , Administrativo , etc . Essa informação não é muito importante , mas você precisa lembrar o que você escreveu ) . Next ;

- Essa próxima tela é a mais importante do processo . Aqui você coloca o nome do site que vai utilizar o certificado . Se você mudar o nome do site ( o que é comum durante o desenvolvimento interno ) você vai precisar de um novo certificado . Já vou vender meu peixe e colocoar o nome do site no meu exemplo como www.lula.pro.br . Next ;

- Informações de localidade nessa tela . Coloque o nome do pais , estado e cidade onde você está . Pode ser tudo falso , mas lembre-se do que você escreveu , vai precisar disso depois . Os nomes da cidade e do estado não
podem conter abreviaturas . No meu exmplo , direi que estou no BR ( Brazil ), State "Sao Paulo" , City "Sao Paulo" ( Note que não tem acentos. Foi de propósito , pois se não dá páu. ) . Next ;

- Na próxima tela , o wizard me pergunta onde deve ser gravadas as informações . Ele gravará tudo em um arquivo TXT . Escolha um local e salve. Eu aceitarei a opção default dele , "C:\CERTREQ.TXT" . Next ;

- Na penúltima tela ele me mostra se está tudo ok , com um aconfirmação dos dados . Tudo ok . Next ;

- Leia as considerações finais ( hahah , se ninguém lê o começo vai ler o fim ??? ) e Finish .

Pronto o pedido está criado . Agora vou pedir um certificado na Verisign .
Lá eu sei que existe um certificado de teste , que é o que vou utilizar nesse exemplo .

- Vou solicitar um certificado de teste ( válido por 14 dias ) na Verisign , através do endereço :
www.verisign.com 


O link "Secure your Web Server" , tá bem na cara .

- Nesse primeiro formulário , o único cuidado que costumo ter , é dizer que o certificado é "Research Only" , pois faço testes de 2 em 2 meses quase e
já devo ter pedido um trilhão de certificados !!!  ;

- Leia as considerações de como instalar um certificado Verisign ( não precisa ler , mesmo , mas se quiser é bom ) e clique em "Continue" ;

- Na próxima tela , a Verisign ensina como criar o arquivo de requisição do certificado , como já fizemos em cima . Como já sabemos como faz o pedido( aqui chamado de CSR - Certificate Signing Request ) , clique em "Continue";

- Agora , ele pede que copiemos e colemos o conteúdo do arquivo CSR que a gente criou . Lembra onde está gravado ? (C:\CERTREQ.TXT) Abra ele e copie
seu conteúdo . Deve estar parecido com o meu que está assim :

-----BEGIN NEW CERTIFICATE REQUEST-----
MIICpzCCAlECAQAwgZYxGDAWBgNVBAMTD3d3dy5sdWxhLnByby5icjEcMBoGA1UE
CxMTTHVsYSBDb21wYW55IEJyYXppbDEVMBMGA1UEChMMTHVsYSBDb21wYW55MRsw
GQYDVQQHHhIAUwDjAG8AIABQAGEAdQBsAG8xGzAZBgNVBAgeEgBTAOMAbwAgAFAA
YQB1AGwAbzELMAkGA1UEBhMCQlIwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA1l1u
UsGCVYRy3c0RYQRjZOJAM5aanskn5OGcA6zDyvetJfPgNFE3qIfUQYnn/e8X1rGe
VMvg2FQTvTnSwEq9QwIDAQABoIIBUzAaBgorBgEEAYI3DQIDMQwWCjUuMC4yMTk1
LjIwNQYKKwYBBAGCNwIBDjEnMCUwDgYDVR0PAQH/BAQDAgTwMBMGA1UdJQQMMAoG
CCsGAQUFBwMBMIH9BgorBgEEAYI3DQICMYHuMIHrAgEBHloATQBpAGMAcgBvAHMA
bwBmAHQAIABSAFMAQQAgAFMAQwBoAGEAbgBuAGUAbAAgAEMAcgB5AHAAdABvAGcA
cgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIDgYkAjuYPzZPpbLgCWYnXoNeX
2gS6nuI4osrWHlQQKcS67VJclhELlnT3hBb9Blr7I0BsJ/lguZvZFTZnC1bMeNUL
Rg17bhExTg+nUovzPcJhMvG7G3DR17PrJ7V+egHAsQV4dQC2hOGGhOnv88JhP9Pw
pso3t2tqJROa5ZNRRSJSkw8AAAAAAAAAADANBgkqhkiG9w0BAQUFAANBALs9zqcL
1Vj2A94KmZeRSWMGvnenNvUYoSO3cKjpOf//nVtvpndVG8pvfEQUvwj4xwAAKTRd
mrAsvfDxg6kOc+Q=
-----END NEW CERTIFICATE REQUEST-----

Cole tudo isso no espaço reservado da tela e clique em Continue ;

- A próxima tela Mostra a confirmação dos dados , do mesmo jeito que aconteceu no servidor Web . Nessa mesma tela , tem um formulário para preencher alguns dados . Lembra porque eu disse que era importante lembrar alguns dados do cadastro ( como o País , Estado etc ... ) ? Pois é , os campos que forem iguais aos que você já preencheu , preencha com o mesmo
valor que você colocou na solicitação . Tome cuidado para não preencher a parte do cartão de crédito , pois aí você está comprando o certificado .
Tenha certeza que está selecionada a opção "I'd like a free 14-day Trial Server ID" .
Tudo Pronto ? Accept .

- Nas próximas horas deve chegar um e-mail da Verisign , confirmando sua solicitação com um texto parecido com o que foi gerado no pedido da
certificação . Quando esse e-mail chegar , devemos copiar o conteúdo de um arquivo e coloca-lo em um arquivo .txt .

Na próxima matéria , veremos a resposta da Verisign e a instalação do certificado no site .



Esta matéria foi postada originalmente no ASP4Developers por Luigi Paolo ( Lula ) (site), que na época era "Professor e Analista de Sistemas .". Hoje, vai saber...

0

Instalando Certificados Digitais - Parte II

Ok , no útlimo episódio , vimos como criar o pedido do certificado e como submeter o mesmo a uma entidade certificadora , que no caso foi a Verisign .
Só lembrando dois detalhes importantes :

- Não preenchi nenhuma informação sobre cartão de crédito . Coloquei no site da Verisign que se tratava de "Research Only" . Não tenho essa grana toda ! ;
- Estou fazendo um certificado válido para o Default Web Site da minha máquina , onde o Host Header Name é www.lula.pro.br . Mas o indicado é você criar um site no IIS e criar o certificado para ele . Se vcoê mudar o nome
do site depois ,vai ter que trocar de certificado , pois esse se tornará inválido .

Bem , desde quando mandei a mensagem , até agora , já deve ter chegado para você um e-mail com a resposta da Verisign , dizendo que está tudo bem .
Nesse e-mail você encontrará um pedaço parecido com o arquivo TXT que você criou no IIS para fazer a solicitação . No meu caso :

-----BEGIN CERTIFICATE-----

MIICYzCCAg0CEGa7CB22VirrpfhZjfeixWswDQYJKoZIhvcNAQEEBQAwgakxFjAU
BgNVBAoTDVZlcmlTaWduLCBJbmMxRzBFBgNVBAsTPnd3dy52ZXJpc2lnbi5jb20v
cmVwb3NpdG9yeS9UZXN0Q1BTIEluY29ycC4gQnkgUmVmLiBMaWFiLiBMVEQuMUYw
RAYDVQQLEz1Gb3IgVmVyaVNpZ24gYXV0aG9yaXplZCB0ZXN0aW5nIG9ubHkuIE5v
IGFzc3VyYW5jZXMgKEMpVlMxOTk3MB4XDTAxMDUzMDAwMDAwMFoXDTAxMDYxMzIz
NTk1OVowfDELMAkGA1UEBhMCQlIxEjAQBgNVBAgTCVNhbyBQYXVsbzESMBAGA1UE
BxQJU2FvIFBhdWxvMRUwEwYDVQQKFAxMdWxhIENvbXBhbnkxHDAaBgNVBAsUE0x1
bGEgQ29tcGFueSBCcmF6aWwxEDAOBgNVBAMUB3FzX2NxcGQwgZ8wDQYJKoZIhvcN
AQEBBQADgY0AMIGJAoGBALtew0eLATXo3iNlijHx9bj+gfaHuuk4gLrmlfOSsRJM
6nneZG7jyCAY9QJXk1OVWxb0IkAhx+oy/0JXsu6HX7WFnj3RcrNltiLBFOtBGZH+
eGW4COGZSP8PTvYYTXTarqST75CZOfB1KnMyhzIG/R3oWvtBETg/PFB8T3gKtz4f
AgMBAAEwDQYJKoZIhvcNAQEEBQADQQBJBJSlapfgNLc7vH9+ntdD0vrtukjOnM8A
bNsKyG3gNjNKgR25eDrpuzeAzodhlX94UEyMCs/I4H4sOArkHwQl
-----END CERTIFICATE-----

Copie do Begin ao End Certificate apenas e cole em um arquivo TXT que eu darei o nome de RESPOSTA.TXT no meu exemplo .Como instalar o certificado agora ??? Vamos lá :

- De volta ao IIS , vou até as propriedades do Default Web Site e procuro pelo Directoy Security , botão "Server Certificate" . Aparece nosssa amigo Wizards novamente , leia as instruções e Next ;

- Na próxima tela , aparece opções que não vimos antes : "Process the pending request ... " e "Delete the pending request" . Vamos escolher a primeira opção , pois vamos processar o certificado pendente e não apagá-lo . Next ;

- Coloque o caminho de onde está o seu arquivo RESPOSTA.TXT . Cuidado , pois o default da extensão aqui é .cer , mas gravamos como .txt . Encontrou o
arquivo ? Ótimo , Next ;

- A próxima tela mostra a confirmação de todas as informações que você
preencheu no site . Next ;

- Considerações Finais e Finish ;

- Ao voltar as propriedades do IIS , peça para ver o Certificado , se tudo correu bem , seu certificado vai acusar um erro ( não ria , é sério . Já vou explicar isso ) . Esse erro será explicado mais adiante .

Agora vem a parte de proteger seu site , e dizer que agora ele utilizará o canal seguro SSL .
Volte as propriedades do Default Web Site , Directory Security , item Secure Communications" , botão "Edit ... " . A primeira opção é justamente "Required Secure Channel (SSL)" . Clicando nessa opção , a opção seguinte é habilitada ( Required 128 - bits encryption ) . A primeiro momento eu não setaria essa opção , pois muitos browsers ainda não instalaram o encryption
pack para o IE 5.5 , logo a grande maioria trabalha em um canal de 40 bits .
Se você exigir um nível maior de criptografia , seus usuários vão ter que baixar o encryption pack , que pode ser encontrado na seção de atualizações do IE , na Microsoft .

Logo em seguida você diz se seu site vai exigir certificados pessoais de quem acessar . Você pode ignorar ( o cara não precisa ter um certificado digital ) , aceitar certificados ( aceita qualquer certificados , assinado por você ou não . Isso se você for uma entidade certificadora , que não é o caso desse certificado que estamos usando ) , ou se você exige certificados
assinados por você ( novamente , não é o tipo de certificado que você baixou ) .

Depois tem uma opção um pouco mais "Intranet" de ser , onde você valida usuários pelos certificados associados a sua conta de usuários do Windows .
Não é o caso desse certificado , mas é comum para os certificados gerados pelo Windows 2000 . Isso nós veremos na parte III.

Por fim , a opção de editar a lista de certificados de entidades que você confia . Não se aplica ao caso também .

Pronto . Seu site é um site seguro HTTPS , em canal seguro SSL . Mas um detalhe importante : SE você fizer isso no Defaul Web Site ( Como eu fiz ) ,
TODOS OS SEUS SITES ABAIXO ESTARÃO EM AMBIENTE SEGURO TAMBÉM . E é por isso
que eu recomendei primeiro a criação de seu site antes de gerar o certificado e instalar só para ele .

Agora , lembra que eu comentei que durante a visualização do seu certificado ele acusará um erro ? O Erro diz que o Windows não tem informação suficiente
para verificar o certificado . Isso acontece pois baixamos uma versão TRIAL , e a segurança da Verisign para garantir que será apenas de teste é esse :
para não acusar esse erro , você deve baixar um certificado de teste , que você tem que instalar em todas as máquinas que vão testar o seu site . O que inclue a própria máquina onde você instalou o certificado para o Server .

Onde conseguir esse certificado ? Como eu sei que você fechou seu browser , não leu as considerações finais quando solicitou o certificado para Verisign ( e eu rí desde o começo sobre isso ... ) , vou te dar o link :

http://www.verisign.com/server/trial/faq/index.html

Esse link só aparece quando você clica em "Frequent Asked Questions" no final do processo no site da Verisign . Bem , clique em Accept , e ele tentará fazer o download de um arquivo .cer . Grave em algum lugar e pronto .Clique duas vezes e ele se instala sozinho . Você deve fazer isso em toda máquina que for testar o seu site .

Bem , na próxima a gente vê como utilizar o Certificate Server do Windows 2000 para criar os certificados e ser até uma entidade certificadora .



Esta matéria foi postada originalmente no ASP4Developers por Luigi Paolo ( Lula ) (site), que na época era "Professor e Analista de Sistemas .". Hoje, vai saber...

1

Código simples de login de usuários

Muitas vezes, o conteúdo de um site é restrito à usuários cadastrados em uma tabela de um banco de dados. Para fazer a verificação, faça algo semelhante ao código abaixo:


No HTML:
<form action="login.asp" method=post>
 Username:<input type=text name=username>
 Password:<input type=password name=password>
</form>


No login.asp
set rsquery = conn.execute( "select * from usuarios where username = '" & replace( request.form("username"), "'", "''" ) & "' and password='" & replace( request.form("password"), "'", "''" ) & "'" )
if rsquery.eof then
   response.write( "Usuário ou senha incorreta. Pressione o botão back do seu browser e tente novamente" )
else
   session("autenticado") = true
   if request.querystring("pagina") <> "" then
      'envia de volta para a página onde estava
      response.redirect( request.querystring("pagina") )
   else

      response.redirect( "index.asp" )
   end if

end if


E, em todas as páginas restritas, vc precisa incluir o seguinte código:


'Envia para a página de login, passando a referência da página atual, caso nao esteja logado.
if session("autenticado") <> true then
   response.redirect( "index.asp?pagina=" & server.URLEncode( request.serverVariables("SERVER_NAME") & request.serverVariables("URL") ) )
end if


Convém também criar a opção de "logout", onde o conteúdo da session é setado como false.


Atualização: Incluido o códigp para o usuário retornar para a página onde estava, quando descobriu-se que não estava logado.



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, 29 de maio de 2001

0

Chat no ASP4D (updated!)

Para os desatentos: note que agora há uma opção de "chat" no menu do ASP4D. Acabo de disponibilizá-lo para download!


Ficaria feliz em receber seus comentários e impressões sobre o dotChat.



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

sexta-feira, 25 de maio de 2001

0

Como resolver pequenos problemas com ASP

Comos todos nós sabemos, existem pequenos problemas que demoramos para conseguir resolver, o intuito desta dica é fazer com que pessoas que estejam começando agora, resolvam seus problemas com maior facilidade, identificando o erro de forma mais rápida e prática.


Criei um formulário, postos as informações mas  quando utilizo o request não consigo recupera-la. O que fazer?


1º Verifique na página onde está seu formulário, se você colocou a TAG <FORM> e se você a fechou corretamente.
2º Verifique o nome dos campos
3º Caso tudo esteja corretamente elaborado, você pode através de um "for each" no objeto request, verificar todos os valores passados pelo formulário.
4º Se mesmo fazendo todas as verificações acima, verifique se não existe nenhum item no formulario que permita o envio de arquivos, pois isso também atrapalha um pouco nestes casos.


Não consigo utilizar o CDONTS para o envio de e-mails, o que fazer?


1º Verifique se o componente está instalado no seu servidor.
2º Se não me engano, este componente só funcionará em no Windows NT/2000 Server, portanto procure um componente que tenha a opção para que se defina o servidor SMTP utilizado.
3º Verifique a pasta BadMail configurada no seu servidor SMTP e veja se as mensagens enviadas estão lá, pois neste caso, o problema  é com a configuraçõao do servidor SMTP.


Quando utilizo Access este erro sempre acontece:
"Too few parameters expected 1"
Como resolver?


O Access é meio chatinho e quando você tem uma query:
select * from tb_teste where codigo = " & codigo
Quando você manda executar a query que você montou, o erro que descrevi acima acontece, verifique se a variavel codigo, ou qualquer outra váriavel que você inclua na query, não esteja em branco, e verifique se o campo realmente existe no banco de dados.


Por enquanto é só, com o tempo irei adicionando mais dicas nesta mesma matéria para que possam consultar.



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

quarta-feira, 23 de maio de 2001

1

Filtrando as extensões de arquivo no upload

Uma dúvida muito comum é como definir quais os tipos de arquivo que podem ser carregados no server. O código abaixo ilustra como fazer o filtro, permitindo apenas arquivos de extensão GIF, JPG e ZIP. Note que é necessário fazer a checagem novamente no servidor, assegurando que usuários que desabilitam o javascript não possam fazer uploads de extensões proibidas.


<script type="text/javascript">
 function ChecaExtensaoArquivo( formulario ){
   var extensoesOk = ",.gif,.jpg,.zip,";
   var extensao    = "," + formulario.arquivo.value.substr( formulario.arquivo.value.length - 4 ).toLowerCase() + ",";
   if( extensoesOk.indexOf( extensao ) == -1 ){
       alert( formulario.arquivo.value + "\nnão possui uma extensão válida" );
       return false;
     }
   return true;
 }
</script>


<form name="form" method="post" enctype="multipart/form-data" onsubmit="return ChecaExtensaoArquivo( this )">
 <input type="file" name="arquivo" />
 <input type="submit" />
</form>



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, 22 de maio de 2001

0

O fim dos problemas com datas

O código abaixo foi retirado do site http://www.4guysfromrolla.com/, com pequenas modificações:


Function CampoData( Data, TimeStamp )
If TimeStamp Then
  CampoData = "{ts '" & year(Data) & "-" & month(Data) & "-" & day(Data) & " " & Hour(Data) & ":" & Minute(Data) & ":" & Second(Data) & "'}"
Else
  CampoData = "{d '" & year(Data) & "-" & month(Data) & "-" & day(Data) & "'}"
End If
End Function


Essa função irá gerar uma string que pode ser incluida normalmente em bancos de dados SQL e Access, como no exemplo abaixo:


SQLstmt = "insert into tabela (campo_data) values " & CampoData( cDate( date() & " " & time() ), false )


Note que o segundo parâmetro define se a data convertida será apenas a data (false) ou o time stamp (data e hora, true).


Nota: o código anterior fazia uso da função Format do VisualBasic, que não está disponível no VBScript. Esta rotina deve agora funcionar bem no ASP.



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

domingo, 20 de maio de 2001

0

Entendendo o Session.LCID

Entendendo o Session.LCID


Quando trabalhamos com servidores que estão localizados em outros países, consequentemente Datas, Time Zone e configurações regionais estão configurados com a formatação de seu país.

O Session.LCID permite realizar a formatação de datas e configurações regionais de acordo com o país que o desenvolvedor necessitar, setando o código atribuído para cada país.

Exemplo:


Para formatar as configurações regionais e datas para o idioma americano:


<%

Session.LCID = 1033

%>



Para formatar em Português ( Brasileiro ) :


<%

Session.LCID = 1046


%>


Abaixo segue uma tabela com os idiomas e seu respectivo LCID para serem utilizado quando houver necessidade.


 


































































































































































































































































IdiomaLCID
Africano1078
Albanês1052
Alemão1031
Alemão (austríaco)3079
Alemão (suíço)2055
Árabe1025
Armênio *1067
Assamese *1101
Azeri (cirílico)2092
Azeri (latino)1068
Basco1069
Bengalês *1093
Bielo-russo1059
Búlgaro1026
Catalão1027
Chinês (simplificado)2052
Chinês (tradicional)1028
Coreano1042
Croata1050
Dinamarquês1030
Eslovaco1051
Eslovênio1060
Espanhol3082
Estoniano1061
Faroês1080
Farsi1065
Finlandês1035
Francês1036
Francês (canadense)3084
Frísio1122
Georgiano *1079
Grego1032
Guzerate *1095
Hebraico1037
Hindi *1081
Holandês1043
Húngaro1038
Indonésio1057
Inglês (australiano)3081
Inglês (canadense)4105
Inglês (E.U.A.)1033
Inglês (Inglaterra)2057
Islandês1039
Italiano1040
Japonês1041
Kannada *1099
Kashmiri *1120
Kazakh1087
Konkani *1111
Letão1062
Lituano1063
Lituano (clássico)2087
Macedônio1071
Malaiala *1100
Malaio1086
Manipuri *1112
Marathi *1102
Nepali *1121
Norueguês Bokmal1044
Norueguês Nynorsk2068
Oriá *1096
Polonês1045
Português (Brasil)1046
Português (Portugal)2070
Punjabi *1094
Romeno1048
Russo1049
Sânscrito *1103
Sérvio (cirílico)3098
Sérvio (latino)2074
Sindhi *1113
Sueco1053
Swahili1089
Tailandês *1054
Tâmil *1097
Tatar1092
Tcheco1029
Telugu *1098
Turco1055
Ucraniano1058
Urdu1056
Uzbek (cirílico)2115
Uzbek (latino)1091
Vietnamita *1066

 



André Luis Bassi é desenvolvedor em ASP, onde presta serviço para diversas empresas.




Esta matéria foi postada originalmente no ASP4Developers por André Luis Bassi (site), que na época era "Webmaster / DBA / Programador". Hoje, vai saber...

quarta-feira, 16 de maio de 2001

0

Exibindo a estrutura de um banco de dados

Execute o código abaixo e veja os detalhes do seu banco de dados. Não esqueça de acertar o caminho para o seu banco de dados.. =]


<%


Option Explicit


dim Conn  ' Conexao com o banco de dados
dim rstSchema  ' Detalhes da tabela
dim rstColumns  ' Detalhes das colunas
dim ColumnsTypes  ' Propriedades dos campos a serem mostradas
dim x   ' Para loop de campos
dim rows  ' Para visual "zebrado"
dim valor  ' Valor do campo


set conn = server.CreateObject("ADODB.Connection")
Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath( "../database/bdados.mdb" )
Conn.Open


response.buffer = false


%>
<html>
<head>
<title>Database structure for <%= server.mappath( "database/bdados.mdb" ) %></title>
<style type=text/css>
.color0 { background-color: #333333; color: white; }
.color1 { background-color: #666666; }
.color2 { background-color: #999999; }
.color3 { background-color: #BBBBBB; }
body, table, td, tr { font-family: verdana; font-size: 10pt; }
</style>
</head>


<body>
<table cellspacing=2>
<%


ColumnsTypes = array( "COLUMN_NAME", "DATA_TYPE", "COLUMN_FLAGS", "IS_NULLABLE", _
   "CHARACTER_MAXIMUM_LENGTH", "NUMERIC_PRECISION", "NUMERIC_SCALE", _
   "DATETIME_PRECISION", "COLUMN_DEFAULT", "DESCRIPTION" )


Set rstSchema = Conn.OpenSchema( adSchemaTables, array( empty, empty, empty, "TABLE" ) )
do while not rstSchema.EOF %>
 <tr>
  <td colspan=<%= uBound( ColumnsTypes ) + 1 %> class=color0>
   <b>
    TABLE_NAME: <%= rstSchema( "TABLE_NAME" ) %><br>
    TABLE_TYPE: <%= rstSchema( "TABLE_TYPE" ) %>
   </b>
  </td>
 </tr>
 <tr class=color1>


<%
   set rstColumns = Conn.OpenSchema( adSchemaColumns, array( empty, empty, rstSchema("table_name" ).value ) )
   for x = 0 to ubound(ColumnsTypes)
       response.write "  <td align=center><small>" & ColumnsTypes( x ) & "</small></td>" & vbcrlf
   next %>
 </tr><%
   rows = 0
   do while not rstColumns.eof %>
 <tr class=color<%= iif( rows mod 2, 2, 3 ) %>>


<%
      for x = 0 to ubound(ColumnsTypes)
          valor = rstColumns( ColumnsTypes(x) )
          if ColumnsTypes(x) = "DATA_TYPE" then
             valor = TypeName( valor )
          else
             if isNull( valor ) then valor = "-"
          end if
          response.write "   <td align=center>" & valor & "</td>" & vbcrlf
      next
      rstColumns.movenext %>
 </tr><%
      rows = rows + 1
   loop
   rstColumns.close
   set rstColumns = nothing


   rstSchema.MoveNext
Loop


rstSchema.close
set rstSchema = nothing


function iif( condicao, valor1, valor2 )
if condicao then iif = valor1 else iif = valor2 end if
end function


function TypeName( value )
select case value
    case adEmpty            : TypeName = "Empty"
    case adTinyInt          : TypeName = "TinyInt"
    case adSmallInt         : TypeName = "SmallInt"
    case adInteger          : TypeName = "Integer"
    case adBigInt           : TypeName = "BigInt"
    case adUnsignedTinyInt  : TypeName = "UnsignedTinyInt"
    case adUnsignedSmallInt : TypeName = "UnsignedSmallInt"
    case adUnsignedInt      : TypeName = "UnsignedInt"
    case adUnsignedBigInt   : TypeName = "UnsignedBigInt"
    case adSingle           : TypeName = "Single"
    case adDouble           : TypeName = "Double"
    case adCurrency         : TypeName = "Currency"
    case adDecimal          : TypeName = "Decimal"
    case adNumeric          : TypeName = "Numeric"
    case adBoolean          : TypeName = "Boolean"
    case adError            : TypeName = "Error"
    case adUserDefined      : TypeName = "UserDefined"
    case adVariant          : TypeName = "Variant"
    case adIDispatch        : TypeName = "IDispatch"
    case adIUnknown         : TypeName = "IUnknown"
    case adGUID             : TypeName = "GUID"
    case adDate             : TypeName = "Date"
    case adDBDate           : TypeName = "DBDate"
    case adDBTime           : TypeName = "DBTime"
    case adDBTimeStamp      : TypeName = "DBTimeStamp"
    case adBSTR             : TypeName = "BSTR"
    case adChar             : TypeName = "Char"
    case adVarChar          : TypeName = "VarChar"
    case adLongVarChar      : TypeName = "LongVarChar"
    case adWChar            : TypeName = "WChar"
    case adVarWChar         : TypeName = "VarWChar"
    case adLongVarWChar     : TypeName = "LongVarWChar"
    case adBinary           : TypeName = "Binary"
    case adVarBinary        : TypeName = "VarBinary"
    case adLongVarBinary    : TypeName = "LongVarBinary"
end select
end function
%>
</table>
</body>
</html>
<!-- #include virtual="adovbs.inc" -->



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, 14 de maio de 2001

0

XMLWARE launched!

Acaba de ser lançado o site www.xmlware.com.br, com informações sobre desenvolvimento nesta tecnologia. Com certeza, vale a visita.

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

sexta-feira, 11 de maio de 2001

0

Tornar mensagens de erros mais amigáveis.

<%


Sub CheckError
 Select Case Err.Number
  Case 3
   Response.Write " Return sem GoSub"
  Case 5
   Response.Write "Chamada de Procedimento Inválida"
  Case 6
   Response.Write "Sobrecarga"
  Case 7
   Response.Write "Sem Memória"
  Case 9
   Response.Write "SubScript fora de área"
  Case 10
   Response.Write "Este Array está fixo ou temporariamente travado"
  Case 11
   Response.Write "Divisão Por Zero"
  Case 13
   Response.Write "Tipos Incompatíveis"
  Case 14
   Response.Write "Fora de Espaço de String"
  Case 16
   Response.Write "Expressão muito Complexa"
  Case 17
   Response.Write "Não pode recuperar a operação"
  Case 18
   Response.Write "Interrupção do usuário ocorrida"
  Case 20
   Response.Write "Resume Without Error"
  Case 28
   Response.Write "Fora de Espaço de Pilha"
  Case 35
   Response.Write "Sub ou Function não Definida"
  Case 47
   Response.Write "Muitas DLL na aplicação cliente"
  Case 48
   Response.Write "Erro carregando DLL"
  Case 49
   Response.Write "DLL com problemas de chamada"
  Case 51
   Response.Write "Erro Interno"
  Case 52
   Response.Write "Nome ou número do arquivo errado"
  Case 53
   Response.Write "Arquivo não Encontrado"
  Case 54
   Response.Write "Modo de arquivo errado"
  Case 55
   Response.Write "Arquivo já está Aberto"
  Case 57
   Response.Write "Device I/O Error"
  Case 58
   Response.Write "Arquivo jé existente"
  Case 59
   Response.Write "Tamanho do registro errado"
  Case 61
   Response.Write "Disco Cheio"
  Case 62
   Response.Write "Entrada passa do final do arquivo"
  Case 63
   Response.Write "Número de registros errados"
  Case 67
   Response.Write "Muitos arquivos"
  Case 68
   Response.Write "Ferramenta não disponível"
  Case 70
   Response.Write "Permissão Negada"
  Case 71
   Response.Write "Disco não Preparado"
  Case 74
   Response.Write "Não posso renomear com discos diferentes"
  Case 75
   Response.Write "Caminho/Arquivos Erro de acesso"
  Case 76
   Response.Write "Caminho não encontrado"
  Case 91
   Response.Write "Variável de objeto não definida"
  Case 92
   Response.Write "Loop For não foi inicializado"
  Case 94
   Response.Write "Uso inválido de Null"
  Case 322
   Response.Write "Não posso criar Arquivos temporários nescessários"
  Case 325
   Response.Write "Formato inválido no arquivo"
  Case 380
   Response.Write "Valor da propriedade inválida"
  Case 400
   Response.Write "ERRO HTTP 1.1 --- pedido ruim"
  Case 401.1
   Response.Write "ERRO HTTP 1.1 --- não autorizado: falha no logon"
  Case 401.2
   Response.Write "ERRO HTTP 1.1 --- não autorizado: falha no logon devido a configuração do servidor"
  Case 401.3
   Response.Write "ERRO HTTP 1.1 --- não autorizado: não autorizado devido a ACL no recurso"
  Case 401.4
   Response.Write "ERRO HTTP 1.1 --- não autorizado: falha na autorização pelo filtro"
  Case 401.5
   Response.Write "ERRO HTTP 1.1 --- não autorizado: falha na autorização por ISAPI/CGI App"
  Case 403.1
   Response.Write "ERRO HTTP 1.1 --- proibido: acesso a execução proibido"
  Case 403.2
   Response.Write "ERRO HTTP 1.1 --- proibido: acesso de leitura proibido"
  Case 403.3
   Response.Write "ERRO HTTP 1.1 --- proibido: acesso de escrever proibido"
  Case 403.4
   Response.Write "ERRO HTTP 1.1 --- proibido: requer SSL"
  Case 403.5
   Response.Write "ERRO HTTP 1.1 --- proibido: requer SSL 128"
  Case 403.6
   Response.Write "ERRO HTTP 1.1 --- proibido: endereço de IP rejeitado"
  Case 403.7
   Response.Write "ERRO HTTP 1.1 --- proibido: requer certificação do cliente"
  Case 403.8
   Response.Write "ERRO HTTP 1.1 --- proibido: acesso ao site negado"
  Case 403.9
   Response.Write "ERRO HTTP 1.1 --- acesso proibido: Muitos usuários estão conectados"
  Case 403.10
   Response.Write "ERRO HTTP 1.1 --- acesso proibido: configuração inválida"
  Case 403.11
   Response.Write "ERRO HTTP 1.1 --- acesso proibido: senha alterada"
  Case 403.12
   Response.Write "ERRO HTTP 1.1 --- acesso proibido: negado acesso ao mapa"
  Case 404
   Response.Write "ERRO HTTP 1.1 --- não encontrado"
  Case 405
   Response.Write "ERRO HTTP 1.1 --- método não permitido"
  Case 406
   Response.Write "ERRO HTTP 1.1 --- não aceitável"
  Case 407
   Response.Write "ERRO HTTP 1.1 --- requer autenticação do Proxy"
  Case 412
   Response.Write "ERRO HTTP 1.1 --- falha em pré condições"
  Case 414
   Response.Write "ERRO HTTP 1.1 --- pedido - URI muito grande"
  Case 423
   Response.Write "Propriedade ou metodo não encontrado"
  Case 424
   Response.Write "Objeto Requerido"
  Case 429
   Response.Write "OLE Automation não pode ser criado no servidor"
  Case 430
   Response.Write "Classe não suportada pelo OLE Automation"
  Case 432
   Response.Write "Nome do arquivo ou de classe nõ encontrado durante a operação OLE Automation"
  Case 438
   Response.Write "Objeto não suporta esta propriedade ou método"
  Case 440
   Response.Write "Erro na OLE Automation"
  Case 442
   Response.Write "Connection to type library or object library for remote process has been lost. Press OK for dialog to remove reference"
  Case 443
   Response.Write "Objeto OLE Automation não contém um valor padrão"
  Case 445
   Response.Write "Objeto não suporta esta ação"
  Case 446
   Response.Write "Objeto não suporta o nome do argumento"
  Case 447
   Response.Write *Objeto não suporta a definição do local atual"
  Case 448
   Response.Write "Nome de argumentos não encontrados"
  Case 449
   Response.Write "Este argumento não é opcional"
  Case 450
   Response.Write "Número de argumentos errado ou definição de propriedade inválida"
  Case 451
   Response.Write "Objeto não é uma coleção"
  Case 452
   Response.Write "Número ordinal inválido"
  Case 453
   Response.Write "Função DLL especificada não foi encontrada"
  Case 454
   Response.Write "código de origem não encontrado"
  Case 455
   Response.Write "Erro de trava no código"
  Case 457
   Response.Write "Esta chave já está associada a um elemento desta coleção"
  Case 458
   Response.Write "Tipos de variáveis usadas na OLE Automation não são suportadas pelo Visual Basic"
  Case 462
   Response.Write "A máquina do servidor remoto não existe ou não está disponível"
  Case 481
   Response.Write "Figura Inválida"
  Case 500
   Response.Write "Variável não definida"
  Case 501
   Response.Write "Variável não pode ser atribuída"
  Case 502
   Response.Write "Objeto não é seguro para script"
  Case 503
   Response.Write "Objeto não é seguro para inicialização"
  Case 504
   Response.Write "Objeto não é seguro para criação"
  Case 505
   Response.Write "Referência inválida ou não qualificada"
  Case 506
   Response.Write "Classe não definida"
  Case 1001
   Response.Write "Sem memória"
  Case 1002
   Response.Write "Erro de Sintaxe"
  Case 1003
   Response.Write "Esperado ':'"
  Case 1004
   Response.Write "Esperado ';'"
  Case 1005
   Response.Write "Esperado '('"
  Case 1006
   Response.Write "Esperado ')'"
  Case 1007
   Response.Write "Esperado ']'"
  Case 1008
   Response.Write "Esperado '{'"
  Case 1009
   Response.Write "Esperado '}'"
  Case 1010
   Response.Write "Esperado Identificador"
  Case 1011
   Response.Write "Esperado '='"
  Case 1012
   Response.Write "Esperado 'If'"
  Case 1013
   Response.Write "Esperado 'To'"
  Case 1014
   Response.Write "Esperado 'End'"
  Case 1015
   Response.Write "Esperado 'Function'"
  Case 1016
   Response.Write "Esperado 'Sub'"
  Case 1017
   Response.Write "Esperado 'Then'"
  Case 1018
   Response.Write "Esperado 'Wend'"
  Case 1019
   Response.Write "Esperado 'Loop'"
  Case 1020
   Response.Write "Esperado 'Next'"
  Case 1021
   Response.Write "Esperado 'Case'"
  Case 1022
   Response.Write "Esperado 'Select'"
  Case 1023
   Response.Write "Esperado expressão"
  Case 1024
   Response.Write "Esperado declaração"
  Case 1025
   Response.Write "Esperado final da declaração"
  Case 1026
   Response.Write "Esperado inteiro constante"
  Case 1027
   Response.Write "Esperado 'While' , 'Until'"
  Case 1028
   Response.Write "Esperado 'While' , 'Until' ou final de declaração"
  Case 1029
   Response.Write "Esperado 'With'"
  Case 1030
   Response.Write "Identificador Muito Longo"
  Case 1031
   Response.Write "Número Inválido"
  Case 1032
   Response.Write "Caracter Inválido"
  Case 1033
   Response.Write "Constante de String não Terminada"
  Case 1034
   Response.Write "Comentário não Terminado"
  Case 1035
   Response.Write "Nested Comment"
  Case 1036
   Response.Write "'Me' não pode ser usado como saída de rotina"
  Case 1037
   Response.Write "Uso Inválido da Palavra Chave 'Me'"
  Case 1038
   Response.Write "'Loop' sem 'Do'"
  Case 1039
   Response.Write "Declaração 'Exit' Inválida"
  Case 1040
   Response.Write "Variável de Controle de Loop 'for' Inválida"
  Case 1041
   Response.Write "Variável Redefinida"
  Case 1042
   Response.Write "Tem que ser a primeira declaração da linha"
  Case 1043
   Response.Write "Não pode atribuir non-By Val para um argumento"
  Case 1044
   Response.Write "Não pode usar parêntesis para chamar uma sub"
  Case 1045
   Response.Write "Esperada Constante Literal"
  Case 1046
   Response.Write "Esperado 'In'"
  Case 1047
   Response.Write "Esperado 'Class'"
  Case 1048
   Response.Write "Tem que ser definido dentro de uma Classe"
  Case 1049
   Response.Write "Esperado Let ou Set ou Get na declaração de propriedade"
  Case 1050
   Response.Write "Esperado 'Property'"
  Case 1051
   Response.Write "Número de argumentos tem que ser consistente em especificações de propriedades"
  Case 1052
   Response.Write "Não pode haver método/ propriedade padrão múltiplo em uma Classe"
  Case 1053
   Response.Write "Class initialize ou terminate não tem argumentos"
  Case 1054
   Response.Write "Propriedade Set ou Let tem que ter pelo menos um argumento"
  Case 1055
   Response.Write "'Next' inesperado"
  Case 1056
   Response.Write "'Default' pode ser especificado somente em 'Property' ou 'Function' ou 'Sub'"
  Case 1057
   Response.Write "Especificação 'Default' precisa especificar também 'Public'"
  Case 1058
   Response.Write "Especificação 'Default' só pode estar em Property Get"


  Case 3000
   Response.Write "O provedor não concluiu a ação pedida"
  Case 3001
   Response.Write "A aplicação está usando argumentos do tipo errado, estão fora do âmbito aceitável ou em conflito com alguma outra aplicação"
  Case 3002
   Response.Write "Ocorreu um erro durante a abertura do arquivo pedido"
  Case 3003
   Response.Write "Erro na leitura do arquivo especificado"
  Case 3004
   Response.Write "Erro ao escrever no arquivo"
  Case 3021
   Response.Write "BOF ou EOF é True ou o registro atual foi deletado. A operação pedido pela aplicação requer um registro atual"
  Case 3219
   Response.Write "A operação pedida pela aplicação não é permitida neste contexto"
  Case 3246
   Response.Write "A aplicação não pode fechar explicitamente um objeto connection no meio de uma transação"
  Case 3251
   Response.Write "O provedor não oferece suporte a operação pedida pela aplicação"
  Case 3265
   Response.Write "ADO não pode achar o objeto na coleção"
  Case 3367
   Response.Write "Não é anexar, objeto já está na coleção"
  Case 3420
   Response.Write "O objeto referenciado pela aplicação não aponta mais para um objeto válido"
  Case 3421
   Response.Write "A aplicação está usando um valor do tipo errado para a aplicação atual"
  Case 3704
   Response.Write "A operação pedida pela aplicação não é permitida se o objeto estiver fechado"
  Case 3705
   Response.Write "A operação pedida pela aplicação não é permitida se o objeto estiver aberto"
  Case 3706
   Response.Write "ADO não pode achar o provedor especificado"
  Case 3707
   Response.Write "A aplicação não pode alterar a propriedade ActiveConnect de um objeto Recordset com um objeto Command como fonte"
  Case 3708
   Response.Write "A aplicação definiu de modo impróprio um objeto Parameter"
  Case 3709
   Response.Write "A aplicação pediu uma operação em um objeto com uma referência a um objeto Connection inválido ou fechado"
  Case 3710
   Response.Write "A operação não é reentrante"
  Case 3711
   Response.Write "A operação ainda está executando"
  Case 3712
   Response.Write "Operação cancelada"
  Case 3713
   Response.Write "A operação ainda está conectando"
  Case 3714
   Response.Write "A transação é inválida"
  Case 3715
   Response.Write "A operação não está sendo executada"
  Case 3716
   Response.Write "A operação não é segura sob estas circunstâncias"
  Case 3717
   Response.Write "A operação fez com que aparecesse uma caixa de diálogo"
  Case 3718
   Response.Write "A operação fez com que aparecesse um cabeçalho de caixa de diálogo"
  Case 3719
   Response.Write "A ação falhou devido a uma violação na integridade dos dados"
  Case 3720
   Response.Write "O provedor não pode ser modificado"
  Case 3721
   Response.Write "Dados longos demais para o tipo de dados apresentados"
  Case 3722
   Response.Write "Ação causou uma violação do esquema"
  Case 3723
   Response.Write "A expressão continha sinais não coincidentes"
  Case 3724
   Response.Write "O valor não pode ser convertido"
  Case 3725
   Response.Write "O recurso não pode ser criado"
  Case 3726
   Response.Write "A coluna especificada não existe nesta fileira"
  Case 3727
   Response.Write "O URL não existe"
  Case 3728
   Response.Write "Você não tem permissão para ver a árvore do diretório"
  Case 3729
   Response.Write "O URL apresentado é inválido"
  Case 3730
   Response.Write "Recurso travado"
  Case 3731
   Response.Write "Recurso já existente"
  Case 3732
   Response.Write "A ação não pode ser concluída"
  Case 3733
   Response.Write "O volume de arquivo não foi encontrado"
  Case 3734
   Response.Write "Falha na operação porque o servidor não pode obter espaço suficiente para completar a operação"
  Case 3735
   Response.Write "Recurso fora de âmbito"
  Case 3736
   Response.Write "Comando não está disponível"
  Case 3737
   Response.Write "O URL na fileira identificada não existe"
  Case 3738
   Response.Write "O recurso não pode ser deletado porque está fora do escopo permitido"
  Case 3739
   Response.Write "Esta propriedade é inválida para a coluna selecionada"
  Case 3740
   Response.Write "Você apresentou uma opção inválida para esta propriedade"
  Case 3741
   Response.Write "Você apresentou um valor inválido para esta propriedade"
  Case 3742
   Response.Write "A definição desta propriedade causou um conflito com outras propriedades"
  Case 3743
   Response.Write "Nem todas as propriedades podem ser definidas"
  Case 3744
   Response.Write "A propriedade não foi definida"
  Case 3745
   Response.Write "A propriedade não pode ser definida"
  Case 3746
   Response.Write "A propriedade não tem suporte"
  Case 3747
   Response.Write "A ação não pode ser concluída porque o catálogo não está definido"
  Case 3748
   Response.Write "A conexão não pode ser alterada"
  Case 3749
   Response.Write "O método Update da coleção Fields falhou"
  Case 3750
   Response.Write "Não é possível definir permissão Deny porque o provedor não oferece suporte para tanto"
  Case 3751
   Response.Write "o provedor não oferece suporte ao tipo de pedido"
 End Select
End Sub


On Error Resume Next

IF Err > 0 Then Call CheckError


%>



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

segunda-feira, 7 de maio de 2001

0

Numero máximo de checkbox selecionadas.

<html>
<head>
</head>
<body>


Selecione os dois item promocionais.


<script>
 var maximo=3;                                             // aqui vc define o maximo de itens a serem selecionados
 var clicados=new Array(false,false,false,false,false);    // este array deve ter o numero total de checkbox. se vc tiver 20 checkbox, deve colocar 20 valores false
 function itensClicados()                                  // função conta qtas estão marcadas
  {
  var i=0;
  for(var j=0;j<clicados.length;j++)i+=clicados[j]?1:0;
   return(i);
  }
 function itemSelecionado(_v)                              // recebe o item selecionado, compara e desabilita.
  {
    var permissao=true;
    var x=itensClicados();
    if (x>=maximo && !clicados[_v])
     {
      permissao=false;
     }
    else
     {
      clicados[_v]=clicados[_v]?false:true;
   eval("document.form.r"+_v+".clicked=false;");
     }
    return (permissao);
  }
 function enviar()                                         // compara se o numero de checkbox esta no valor solicitado e envia o formulário.
  {
  if (maximo!=itensClicados())
   alert("Selecione até 3 itens por favor");
  else
   document.form.submit();
  }
</script>


<form name=form method=get action=>
<INPUT name=r1 type=checkbox value=1 onclick="return itemSelecionado(1)">Item 1<BR>
<INPUT name=r2 type=checkbox value=2 onclick="return itemSelecionado(2)">Item 2<BR>
<INPUT name=r3 type=checkbox value=3 onclick="return itemSelecionado(3)">Item 3<BR>
<INPUT name=r4 type=checkbox value=4 onclick="return itemSelecionado(4)">Item 4<BR>
<INPUT name=r5 type=checkbox value=5 onclick="return itemSelecionado(5)">Item 4<BR>
<a href=# onClick=enviar(); return false;>enviar</a>
</form>
</body>
</html>



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

sábado, 5 de maio de 2001

0

Criando um formulário de contatos com CDONTS

Uma forma simples e eficaz de se mandar um email com informações de um formulário, é o uso do componente do CDONTS ( Collaborative Data Objects for Windows NT Server ), permite o envio de email em formato texto ou HTML.


Abaixo, veja o código em HTML necessário para o formulário:


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Contatos - Via CDONTS</title></head>


<body bgcolor="#FFFFFF">
<div align="center">
<form name="form1" action="Enviar_email.asp" >
<p>Nome: <br>
<input type="text" name="txtnome">
</p>
<p>Email: <br>
<input type="text" name="txtemail">
</p>
<p>Coment&aacute;rio: <br>
<textarea name="txtcomentario" cols="50" rows="10"></textarea>
</p>
<p>
<input type="submit" name="Submit" value="Enviar">
</p>
</form>
</div>
</body>
</html>


A action do form esta direcionado para http://www.seuservidor.com.br/suapasta/enviar_email.asp onde é uma url de exemplo, você deverá substituir de acordo com o seu servidor.



Código do arquivo enviar_email.asp


<%


Option Explicit


Dim var_nome, var_mail, var_comentario, var_to, EnviarMail, MsgBody


var_nome = Request.QueryString("txtnome")
var_mail = Request.QueryString("txtemail")
var_comentario = Request.QueryString("txtcomentario")
var_to = "andreluisbassi@hotmail.com"


Set EnviarMail = Server.CreateObject("CDONTS.NewMail")
EnviarMail.To = var_to
EnviarMail.From = var_mail
EnviarMail.Subject = "Meu Site - Contatos"
MsgBody = "<html>" _
& "<head>" _
& "</head>" _
& "<body bgcolor=""#FFFFFF"">" _
& "<p align=""center""><font face=""Verdana, Arial, Helvetica, sans-serif"" size=""2"">Voc&ecirc; recebeu uma mensagem de <b>" & var_nome & "</b>, email <b>" & var_mail & "</b> e fez o seguinte coment&aacute;rio:</font></p><p align=""center""><font face=""Verdana, Arial, Helvetica, sans-serif"" size=""2""><b>" & var_comentario & "</b></font></p>" _
& "</body>" _
& "</html>"
EnviarMail.Body = MsgBody
EnviarMail.Importance = 1
EnviarMail.BodyFormat = 0
EnviarMail.MailFormat = 0
EnviarMail.Send


Set EnviarMail = Nothing


Response.redirect "Obrigado.html"


%>


Entendendo o Código:


Option Explicit


Indica que todas as variáveis devem ser declaradas, isso deixa sua aplicação mais rápida.


Dim var_nome, var_mail, var_comentario, var_to, EnviarMail, MsgBody


Logo em seguida declaramos todas as variáveis que serão manipuladas.



var_nome = Request.QueryString("txtnome")
var_mail = Request.QueryString("txtemail")
var_comentario = Request.QueryString("txtcomentario")


Recuperamos os valores digitados no formulário.



var_to = "andreluisbassi@hotmail.com"


Definimos a variável com o email, para aonde as informações serão enviadas.



Set EnviarMail = Server.CreateObject("CDONTS.NewMail")


Instancia o objeto do CDONTS através da variável EnviarMail.



EnviarMail.To = var_to


A propriedade TO permite especificar o endereço do destinatário, onde var_to é a varíavel que esta armazenado o email de destino, que seria "andreluisbassi@hotmail.com"



EnviarMail.From = var_mail


A propriedade From permite especificar o endereço do remetente, onde var_mail é a varíavel que esta armazenado o valor recuperado do campo do formulário Email, que seria Request.QueryString("txtemail")



EnviarMail.Subject = "Meu Site - Contatos"


A propriedade Subject permite especifcar o assunto da mensagem.



A varíavel MsgBody ( veja o conteúdo dela acima ) é onde esta armazenado todo o codigo HTML concatenado e definido como string, para o CDONTS poder processar o email, e quando houver a necessidade de quebrar linha utilize o UnderScore ( _ ) , utilize o & para continuar definindo após a quebra, exemplo:


MsgBody = "HTML" _
& "HEAD" _
& "<TITLE>Exemplo de concatenação de HTML em uma varíavel</TITLE>" _
& "<p align=""center""><font face=""Verdana, Arial, Helvetica, sans-serif"" size=""2"">Voc&ecirc; recebeu uma mensagem de" & var_nome & "</p>"


Importante notar que quando existir " ( aspas ) em um código html por exemplo <p align="center"> reformate o código colocando aspas duplas, por exemplo <p align=""center"">


Se necessitar exibir o conteúdo das varíaveis var_nome, var_mail e var_comentario ou até mesmo executar uma função dentro da varíavel MsgBody por exemplo, insira a varíavel ou função entre & por exemplo:


& "<font face=""Verdana, Arial, Helvetica, sans-serif"" size=""2"">Voc&ecirc; recebeu uma mensagem de" & var_nome & "</p>"



EnviarMail.Body = MsgBody


A propriedade Body define o texto da mensagem ou do HTML, onde MsgBody é a varíavel que esta armazenado o HTML da mensagem Concatenado e coma programação necessária.



EnviarMail.Importance = 1


A propriedade Importance define o nível de prioridade ao enviar a mensagem, veja a tabela abaixo:















ValorSignificado
0Prioridade Baixa
1Prioridade normal (padrão)
2Prioridade alta




 


 


 





EnviarMail.BodyFormat = 0


A propriedade BodyFormat defini qual é o formato que a mensagem será enviada, se for definido o valor 1 a mensagem será enviada como texto, se indicarmos a propriedade por 0, a mensagem será enviada em formato HTML.



EnviarMail.MailFormat = 0


A propriedade MailFormat defini qual o tipo de codificação MIME a ser usado, onde com o valor 0 indica que o MIME interprete o HTML, no caso se usarmos o valor 1 o MIME interpretará a mensagem como texto.



EnviarMail.Send


A propriedade Send, quando é executada, a mensagem é processada e enviada ao seu destinátario.



Set EnviarMail = Nothing


O objeto EnviarMail é encerrado e liberado



Response.redirect "Obrigado.html"


Após enviar a mensagem, redirecionamos para um arquivo em HTML simples, agradecendo o contato.



André Luis Bassi é desenvolvedor em ASP, onde presta serviço para diversas empresas.

 



Esta matéria foi postada originalmente no ASP4Developers por André Luis Bassi (site), que na época era "Webmaster / DBA / Programador". Hoje, vai saber...

sexta-feira, 4 de maio de 2001

0

Transferência de dados via ASP + XML

Um dos grandes feitos do XML é a possibilidade de transferir dados de uma forma padronizada, estruturada e com um vocabulário personalizado. Neste artigo, irei demonstrar um processo de transmissão de dados via ASP e XML, utilizando estes recursos.


Primeiro passo: selecionando a massa a ser exportada


Podemos utilizar o DOM para criar o documento XML. Opcionalmente, podemos criar o documento com response.write, mas esta forma é mais sujeita a falhas de programação.


<%


set xmlDoc = server.CreateObject("MSXML2.DOMDocument.3.0" )
xmlDoc.async = false
set tabela = xmlDoc.createElement("tabela")


set oConnection = server.CreateObject("ADODB.Connection" )
oConnection.open ( banco_de_dados )
set oRecordset = oConnection.execute( "select * from tabela" )


do while not oRecordset.eof


   set registro = xmlDoc.createElement( "registro" )


   For n = 0 To oRecordset.Fields.Count - 1


       campo = oRecordset.Fields.Item(n).name
      
if oRecordset.Fields.Item(n).type = adLongVarChar or _
         
oRecordset.Fields.Item(n).type = adLongVarWChar then
         
set memo = xmlDoc.createElement( campo )
          memo.text = oRecordset( campo )

          registro.appendChild memo
      
else
         
registro.setAttribute campo, oRecordset( campo )
       end if


   Next


   tabela.appendChild registro


loop


xmlDoc.appendChild tabela


%>


Segundo passo: Enviando dados para o servidor destino


Há duas soluções possíveis:


1. Enviar os dados em um campo textarea de um formulário


Nesta, basta incluir este código após o trecho acima:


<form action="http://destino/recebe.asp" method="post">
 
<textarea readonly name=xmlDoc><%= xmlDoc.xml %></textarea><input type="submit">
</form>


O incoveniente é que o campo não pode exceder o limite de 102.399 caracteres (http://support.microsoft.com/support/kb/articles/Q273/4/82.ASP?LN=EN) e que a aplicação que recebe o documento precisa certificar-se que os dados são coerentes.


2. Enviar os dados usando o XMLHTTP


<%


Set oXMLHTTP = Server.CreateObject("MSXML2.XMLHTTP")
oXMLHTTP.open "POST", "http://destino/recebe.asp", false
oXMLHTTP.send(xmlDoc)


'Exibe o retorno do servidor. Como se trata de um documento XML, usamos as tags XMP para exibir o seu conteúdo, sem que o browser interprete-o. Opcionalmente, poderíamos transformar este documento em HTML, ou interagir com a base de dados local, dependendo da resposta.


response.write "<xmp>" & oXMLHTTP.responseXML.xml & "</xmp>


%>


O incoveniente aqui é que a máquina que processa este script precisa estar rodando o Windows 2000 ou Windows NT 4.0, com IE 5.01 ou superior instalado, não sendo suportado pelas versões 9x do Windows. Há também alguns problemas com web proxies, caso estejam sendo usados. Observados estes requisitos, funciona muito bem e elimina a necessidade de intervenção do usuário, sendo a opção recomendada.


No próximo passo, iremos adotar a segunda forma, para fins de exemplos.


Terceiro passo: Recebendo os dados no servidor e processando-os


Uma vez que os dados já foram enviados para o servidor, precisamos apenas recebê-los, verificar sua consistência e efetuar o devido processamento:


Recebe.asp


<%


Response.ContentType = "text/xml" 'Devemos retornar um documento XML


set xmlDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")
xmlDoc.load(Request) 'Aqui, carregamos os dados enviados


set xmlResposta = Server.CreateObject("MSXML2.DOMDocument.3.0")
set resposta = xmlResposta .createElement("resposta")


if xmlDoc.parseError <> 0 then
  
resposta.setAttribute "status", "Falha: " & _
      xmlDoc.parseError.srcText & _
     
xmlDoc.parseError.reason & " Linha " & _
     
xmlDoc.parseError.line & " Col " & _
     
xmlDoc.parseError.linepos
else
  
'Aqui, faremos o que for necessário com os dados recebidos: alteração de banco de dados, inclusão dos novos registros, etc.


   resposta.setAttribute "status", "Processado sem problemas"


end if


xmlResposta.appendChild resposta
xmlResposta.save(Response) 'Retornamos o resultado do processamento para quem os enviou


%>


Done! Conseguimos exportar alguns dados de um servidor para outro, usando o XML para descrever os dados e o objeto XMLHTTP para envio dos mesmos. Essa solução se aplica em diversos casos:



  • Processamento de pedidos feitos por sites de terceiros

  • Dois sites trocando informações em esquemas de parceria

  • Uma aplicação offline transmitindo dados para o servidor central

  • E o que mais sua imaginação permitir!

Comentários sobre o código são bem-vindos.



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