Certas checagens de parâmetros, senhas, variáveis de sessão e outros, são necessárias antes de mostrar uma página. Uma vez feitas estas checagens, é feito um REDIRECIONAMENTO para a página que realmente corresponde à tarefa em si.
A seguir, um modelo de redirecionamento
<%
Ip1 = "10.1."
Ip2 = "10.3."
IPdoCliente = Request.ServerVariables("REMOTE_ADDR")
Response.write IPdoCliente
if left(IPdoCliente,5) = Ip1 or left(IPdoCliente,5) = Ip2 then
Response.redirect "http://servidor/diretorio_virtual_Web/Pagina.htm"
else
Response.write "<H2>IP inválido para visualização da página.</H2>"
end if
%>
Neste caso, o programador condicionou o redirecionamento a dois tipos de endereço IP correspondentes às subredes de sua empresa. Do contrário, aparecerá a mensagem de que o IP é inválido para visualização.
Programação com Scripts para Web
Blog da Rede Blogazine
Conteúdos com Pesquisa e Revisão
terça-feira, 23 de outubro de 2012
segunda-feira, 22 de outubro de 2012
Detectando o clique do botão direito do mouse em Javascript
Os menus de contexto personalizados em páginas HTML são fundamentais para que se tenha o controle completo do comportamento da aplicação destas páginas.
Para fazê-lo, precisamos interceptar os eventos do mouse. A seguir temos um exemplo bem simples desta interceptação:
Existem dois pontos a se considerar para o controle do mouse e do menu de contexto dos navegadores. O ponto * 1 * contém a função de tratamento do evento citado no ponto * 2 *, que declara o evento onmousedown.
Executando a script (em formato de página HTML), e dando o clique direito do mouse, aparece a mensagem do comando alert:
Portanto, a propriedade button do evento de mouse corresponde a "2" para o botão direito do mouse. O botão esquerdo traz o valor "1".
Exemplo mostrando um menu de contexto bem básico
No ponto * 1 * declaramos a função init(). Nela declaramos a interceptação do evento "onmousedown", que se refere à função contextMenu.
No ponto * 2 * declaramos a função fecha() que vai fechar a janela de contexto da DIV cujo id é "menu".
No ponto * 3 * declaramos a função contextMenu(), que trata eventos provocados pelos botões do mouse. Se o botão for o direito, ela mostra a DIV cujo id é "menu".
No ponto * 4 *, interceptamos o evento "oncontextmenu", de modo que o menu de contexto default do navegador não seja apresentado (com as funções de copiar, colar, imprimir, etc).
Para fazê-lo, precisamos interceptar os eventos do mouse. A seguir temos um exemplo bem simples desta interceptação:
Existem dois pontos a se considerar para o controle do mouse e do menu de contexto dos navegadores. O ponto * 1 * contém a função de tratamento do evento citado no ponto * 2 *, que declara o evento onmousedown.
Executando a script (em formato de página HTML), e dando o clique direito do mouse, aparece a mensagem do comando alert:
Portanto, a propriedade button do evento de mouse corresponde a "2" para o botão direito do mouse. O botão esquerdo traz o valor "1".
Exemplo mostrando um menu de contexto bem básico
No ponto * 1 * declaramos a função init(). Nela declaramos a interceptação do evento "onmousedown", que se refere à função contextMenu.
No ponto * 2 * declaramos a função fecha() que vai fechar a janela de contexto da DIV cujo id é "menu".
No ponto * 3 * declaramos a função contextMenu(), que trata eventos provocados pelos botões do mouse. Se o botão for o direito, ela mostra a DIV cujo id é "menu".
No ponto * 4 *, interceptamos o evento "oncontextmenu", de modo que o menu de contexto default do navegador não seja apresentado (com as funções de copiar, colar, imprimir, etc).
Valores separados por vírgulas - Separar com expressões regulares
Uma das formas de compor uma lista muito limitada em número de ocorrências é usar uma string.
Quando existem muitas ocorrências (mais de 50) compensa criar uma tabela em banco de dados. Depois é preciso ter uma forma de separar os valores contidos nesta lista. O exemplo a seguir explica isto:
Quando existem muitas ocorrências (mais de 50) compensa criar uma tabela em banco de dados. Depois é preciso ter uma forma de separar os valores contidos nesta lista. O exemplo a seguir explica isto:
Consistência de data com expressões regulares em Javascript
A consistência de data em javascript se resolve com uma expressão regular com número de ocorrências, evitando o lugar comum de [\d+]\/[\d+]\/[\d+], que pode admitir muitos formatos errados.
Os numerais entre chaves especificam o número de ocorrências esperado para a máscara em questão.
Os numerais entre chaves especificam o número de ocorrências esperado para a máscara em questão.
sexta-feira, 19 de outubro de 2012
Alternando estilos CSS em jquery
Em jquery podemos facilmente alternar estilos das Tags HTML por meio de funções.
Lembre-se de colocar no diretório a biblioteca jquery correta:
* 1 * - Função que responde pelo clique do botão no corpo do HTML;
* 2 * - Definição da função no evento do botão (OnClick).
Lembre-se de colocar no diretório a biblioteca jquery correta:
* 1 * - Função que responde pelo clique do botão no corpo do HTML;
* 2 * - Definição da função no evento do botão (OnClick).
Geração de números aleatórios com ASP sem Rnd
A função Random em ASP (Rnd) gera números aleatórios, bem como o método Math.Random faz o mesmo em javascript. No entanto, para fins de auditoria, é preciso explicitar qual o algoritmo que existe por trás do cálculo dos números aleatórios obtidos.
Para esta finalidade, temos um método totalmente transparente, desde a semente de número aleatório utilizada, expressa no código abaixo:
<style>
SPAN.vm { color:red; }
</style>
<%
NO_MAX = 80
QtNoGerar = 12
'* Declarações de variáveis
Dim RaizNumeroAleatorio
Dim DtHoje, Agora
Dim Dia, Mes, Ano, Hora, Minuto, Segundo
Dim sNUMERO_ALEATORIO,NUMERO_ALEATORIO
Dim intNoAleat
Dim Arranjo()
ReDim Arranjo(QtNoGerar)
'* Obtenção parâmetros raiz
DtHoje = Date()
Agora = Time()
'* Obtenção fragmentos de parâmetros
Ano = year(DtHoje):Mes = Month(DtHoje):Dia = Day(DtHoje)
Hora = Hour(Agora):Minuto = Minute(Agora):Segundo = Second(Agora)
'* Concatena parâmetros de data e hora
if Application("PSpca_RandomDec") = "" then
RaizNumeroAleatorio = CDbl(Segundo&Dia&Mes&Ano&Hora&Minuto)
RaizNumeroAleatorio = RaizNumeroAleatorio + 3.141592653589
else
RaizNumeroAleatorio = CDbl(Application("PSpca_RandomDec"))
end if
Response.write("Raiz Inicial: "&RaizNumeroAleatorio)
%>
<table border=1 cellspacing=0>
<th>Indice<th>Pré-Expoente<th>Matriz<th>Matriz<sup>8</sup><br>(Parte fracionária)<th>Número Sorteado<th>STATUS
<%
j = 0
Do while j < QtNoGerar
'* 1 - Exibe a Raiz do número aleatório modificada
Response.write("<tr><td align=right>"&CStr(j)&"<td align=right>"&RaizNumeroAleatorio)
intNoAleat = CDbl(FormatNumber(CStr(RaizNumeroAleatorio),0))
'* 2 - RETIRA A PARTE FRACIONÁRIA
NUMERO_ALEATORIO = RaizNumeroAleatorio - intNoAleat
'* 3 - SOMA UM PARA QUE O NUMERO PRODUZIDO NÃO REDUZA CADA VEZ MAIS A MANTISSA (tendendo ao valor zero)
NUMERO_ALEATORIO = NUMERO_ALEATORIO + 1
'* 4 - Exibe o número aleatório produzido
Response.write("<td align=right>"&NUMERO_ALEATORIO)
'* 5 - Eleva a matriz ao expoente 8
NUMERO_ALEATORIO = NUMERO_ALEATORIO ^ 8
'* 6 - PARTE INTEIRA
intSorteio = CDbl(FormatNumber(CStr(NUMERO_ALEATORIO),0))
'* 7 - Devido a erros de arredondamento, a subtração pode ficar ligeiramente negativa, portanto é retirado o sinal
Sorteio = Abs(NUMERO_ALEATORIO - intSorteio)
'* 8 - Exibe o número sorteado (parte fracionária)
Response.write("<td align=right>"&Sorteio)
'* 9 - Multiplica a mantissa pelo número limite de Sorteio, e soma 1, para evitar que o número sorteado seja 0 (zero)
sSorteio = FormatNumber(CStr(Sorteio * NO_MAX)+1,0)
'* 10 - Exibe o número Sorteado em formato inteiro
Response.write("<td align=right>" & sSorteio & "")
'* 11 - Guarda a mantissa como próxima raiz de número aleatório
RaizNumeroAleatorio = Sorteio 'NUMERO_ALEATORIO
JaExiste = (0=1)
'* 12 - Checa se o número sorteado já foi gerado anteriormente
for i = 1 to j
if sSorteio = Arranjo(i) then
JaExiste = (0=0)
i = QtNoGerar
end if
next
if JaExiste then
JaExiste = "<span class=Vm>JaExiste</span>"
else
j = j + 1
Arranjo(j) = sSorteio
JaExiste = ""
end if
'* 13 - Exibe o Status do número gerado (Se ja existe ou não)
Response.write("<td align=right>"&JaExiste)
loop
%>
</table>
<%
Application("PSpca_RandomDec") = CStr(RaizNumeroAleatorio)
%>
Os números são gerados até que alcancem o número de números pedidos, SEM QUE NENHUM SE REPITA.
Para esta finalidade, temos um método totalmente transparente, desde a semente de número aleatório utilizada, expressa no código abaixo:
<style>
SPAN.vm { color:red; }
</style>
<%
NO_MAX = 80
QtNoGerar = 12
'* Declarações de variáveis
Dim RaizNumeroAleatorio
Dim DtHoje, Agora
Dim Dia, Mes, Ano, Hora, Minuto, Segundo
Dim sNUMERO_ALEATORIO,NUMERO_ALEATORIO
Dim intNoAleat
Dim Arranjo()
ReDim Arranjo(QtNoGerar)
'* Obtenção parâmetros raiz
DtHoje = Date()
Agora = Time()
'* Obtenção fragmentos de parâmetros
Ano = year(DtHoje):Mes = Month(DtHoje):Dia = Day(DtHoje)
Hora = Hour(Agora):Minuto = Minute(Agora):Segundo = Second(Agora)
'* Concatena parâmetros de data e hora
if Application("PSpca_RandomDec") = "" then
RaizNumeroAleatorio = CDbl(Segundo&Dia&Mes&Ano&Hora&Minuto)
RaizNumeroAleatorio = RaizNumeroAleatorio + 3.141592653589
else
RaizNumeroAleatorio = CDbl(Application("PSpca_RandomDec"))
end if
Response.write("Raiz Inicial: "&RaizNumeroAleatorio)
%>
<table border=1 cellspacing=0>
<th>Indice<th>Pré-Expoente<th>Matriz<th>Matriz<sup>8</sup><br>(Parte fracionária)<th>Número Sorteado<th>STATUS
<%
j = 0
Do while j < QtNoGerar
'* 1 - Exibe a Raiz do número aleatório modificada
Response.write("<tr><td align=right>"&CStr(j)&"<td align=right>"&RaizNumeroAleatorio)
intNoAleat = CDbl(FormatNumber(CStr(RaizNumeroAleatorio),0))
'* 2 - RETIRA A PARTE FRACIONÁRIA
NUMERO_ALEATORIO = RaizNumeroAleatorio - intNoAleat
'* 3 - SOMA UM PARA QUE O NUMERO PRODUZIDO NÃO REDUZA CADA VEZ MAIS A MANTISSA (tendendo ao valor zero)
NUMERO_ALEATORIO = NUMERO_ALEATORIO + 1
'* 4 - Exibe o número aleatório produzido
Response.write("<td align=right>"&NUMERO_ALEATORIO)
'* 5 - Eleva a matriz ao expoente 8
NUMERO_ALEATORIO = NUMERO_ALEATORIO ^ 8
'* 6 - PARTE INTEIRA
intSorteio = CDbl(FormatNumber(CStr(NUMERO_ALEATORIO),0))
'* 7 - Devido a erros de arredondamento, a subtração pode ficar ligeiramente negativa, portanto é retirado o sinal
Sorteio = Abs(NUMERO_ALEATORIO - intSorteio)
'* 8 - Exibe o número sorteado (parte fracionária)
Response.write("<td align=right>"&Sorteio)
'* 9 - Multiplica a mantissa pelo número limite de Sorteio, e soma 1, para evitar que o número sorteado seja 0 (zero)
sSorteio = FormatNumber(CStr(Sorteio * NO_MAX)+1,0)
'* 10 - Exibe o número Sorteado em formato inteiro
Response.write("<td align=right>" & sSorteio & "")
'* 11 - Guarda a mantissa como próxima raiz de número aleatório
RaizNumeroAleatorio = Sorteio 'NUMERO_ALEATORIO
JaExiste = (0=1)
'* 12 - Checa se o número sorteado já foi gerado anteriormente
for i = 1 to j
if sSorteio = Arranjo(i) then
JaExiste = (0=0)
i = QtNoGerar
end if
next
if JaExiste then
JaExiste = "<span class=Vm>JaExiste</span>"
else
j = j + 1
Arranjo(j) = sSorteio
JaExiste = ""
end if
'* 13 - Exibe o Status do número gerado (Se ja existe ou não)
Response.write("<td align=right>"&JaExiste)
loop
%>
</table>
<%
Application("PSpca_RandomDec") = CStr(RaizNumeroAleatorio)
%>
Os números são gerados até que alcancem o número de números pedidos, SEM QUE NENHUM SE REPITA.
Verificação de digitação em campo Data - Javascript
Formulário de entrada da data em HTML
O tratamento dos dados do formulário se dá em dois pontos.
Os caracteres digitados, um a um, são tratados pelo evento "onKeyUp" do campo de INPUT "Dt". A função que faz este tratamento é "data_onChange()".
Quando o formulário estiver pronto, e o operador pressionar o botão de "submit" (se o formulário contiver um) ou a tecla ENTER, o evento "onSubmit" vai ser acionado. Este evento é tratado pela função "form_onSubmit()".
A função form_onSubmit de tratamento do evento onSubmit
* 1 * - Colocação do zero à esquerda de números, quando estes forem menores que 10 (vale para dias e meses);
* 2 * - Arranjo com o número máximo de dias de cada mês. Fevereiro é declarado como 29;
* 3 * - Máscara final de data: 3 grupos de números separados por barra ("/");
* 4 * - Construção final da data, inclusive com a inversão mês e dia, característica dos formatos internacionais.
A função data_onChange de tratamento do evento onKeyUp
* 5 * - Máscara que admite letras (maiúsculas e minúsculas);
* 6 * - Previne a digitação de caracteres estranhos no início da data (operador pode esbarrar numa tecla);
* 7 * - Previne a digitação de caracteres estranhos no meio da data (pelo mesmo motivo);
* 8 * - Define as três máscaras válidas enquanto se digita uma data. A verificação deve ir da mais completa até a mais incompleta, senão qualquer coisa é aceita.
Ao final destas rotinas, feche a tag SCRIPT. O formulário deve vir ABAIXO das scripts.
O tratamento dos dados do formulário se dá em dois pontos.
Os caracteres digitados, um a um, são tratados pelo evento "onKeyUp" do campo de INPUT "Dt". A função que faz este tratamento é "data_onChange()".
Quando o formulário estiver pronto, e o operador pressionar o botão de "submit" (se o formulário contiver um) ou a tecla ENTER, o evento "onSubmit" vai ser acionado. Este evento é tratado pela função "form_onSubmit()".
A função form_onSubmit de tratamento do evento onSubmit
* 1 * - Colocação do zero à esquerda de números, quando estes forem menores que 10 (vale para dias e meses);
* 2 * - Arranjo com o número máximo de dias de cada mês. Fevereiro é declarado como 29;
* 3 * - Máscara final de data: 3 grupos de números separados por barra ("/");
* 4 * - Construção final da data, inclusive com a inversão mês e dia, característica dos formatos internacionais.
A função data_onChange de tratamento do evento onKeyUp
* 5 * - Máscara que admite letras (maiúsculas e minúsculas);
* 6 * - Previne a digitação de caracteres estranhos no início da data (operador pode esbarrar numa tecla);
* 7 * - Previne a digitação de caracteres estranhos no meio da data (pelo mesmo motivo);
* 8 * - Define as três máscaras válidas enquanto se digita uma data. A verificação deve ir da mais completa até a mais incompleta, senão qualquer coisa é aceita.
Ao final destas rotinas, feche a tag SCRIPT. O formulário deve vir ABAIXO das scripts.
Assinar:
Postagens (Atom)