Jump to content


Photo

Validação Em Querystring


  • Faça o login para participar
Nenhuma resposta neste tópico

#1 Tarkan

Tarkan

    Powered by Linux - Que inglês! ;)

  • Ex-Admins
  • 651 posts
  • Sexo:Masculino
  • Localidade:Copacabana - RJ

Posted 23/02/2004, 19:51

Pode parecer meio inútil este tópico para alguns.
Mas pelo menos para os novatos, espero que seja de grande utilidade.

Muitos aqui devem fazer consultas em bandos através de ID (auto-numeração), por QueryString.
Fazem o sistema, colocam no ar, só que acabam não fazendo uma validação evitando erros futuros.

Então, o endereço "ver.asp?id=15", que antes funcionava corretamente mostrando o registro selecionado, passou a agir de maneira incorreta quando um usuário "chato" digitou no location "ver.asp?id=15lalala", apresentando o seguinte erro ao invés do sistema em perfeito estado:

Microsoft JET Database Engine (0x80040E14)
Erro de sintaxe (operador faltando) na expressão de consulta 'id=15lalala'.
/agenda/ver.asp, line 90

Novato: "Mas, por quê acontece isso, Tarkan?"

Simples...
No banco de dados, estamos trabalhando com uma consulta em cima de um campo de auto-numeração.
Ao inserir uma string para ser buscada neste mesmo campo, é normal que o sistema dê erro, já que o tipo de campo onde estamos agindo não está formatado para o tipo string.

Por este motivo, fiz uma função simples demais, mas que pode ajudar a não dar este problema.
A função é esta abaixo:

Function TrataStr(str)
If IsNumeric(str) = True Then
  str = str
Else
  str = 0
End If

TrataStr = str
End Function

Explicando:

O que faz a função IsNumeric()?
Ela verifica se o parâmetro é do tipo é numérico, retornando um valor booleano (True / False) como resposta.

Daí, fiz uma função exatamente deste modo.
Passando para o português estruturado, vejam como fica:

Função TrataStr(str)
Se ÉNumérica(str) = Verdadeiro Então
  str = str   '*** Não faz nada, continua com o valor padrão
Ou
  str = 0     '*** Transforma em 0
Fim Se

TrataStr = str
Fim da Função          

Como podem ver, utilizei a função IsNumeric() para ver se continha string no parâmetro.
Não contém string: Continua com o valor padrão. Ou seja, se o ID na url é 15, vai continuar 15.
Contém string: Ele abandona a operação transformando antes o valor do parâmetro em 0. Quando fizer a leitura no banco, não vamos ter problemas caso a gente tenha feito o tratamento do BOF / EOF.

Espero que tenham entendido esta função básica, mas que pode ajudar algumas pessoas que estão começando agora e passam por este problema.
Abaixo, segue o código... Para ser analizado.

Neste exemplo, precisei de:
- Banco Access: "exemplo.mdb"
- Tabela: "tbl_agenda"
- Campo 1: "id" (auto-numeração)
- Campo 2: "evento" (texto)

Código:

<%
Dim Conexao, ConnString, strSQLListaAgenda, rsListaAgenda

Function TrataStr(str)
If IsNumeric(str) = True Then
  str = str
Else
  str = 0
End If

TrataStr = str
End Function

Set Conexao = CreateObject("ADODB.Connection")
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("exemplo.mdb") & ";Persist Security Info=False"
Conexao.Open ConnString

strSQLListaAgenda = "select * from tbl_agenda where id=" & TrataStr(Request.QueryString("id"))
Set rsListaAgenda = Conexao.Execute(strSQLListaAgenda)

If rsListaAgenda.EOF = True Then
             Response.Write "Nenhum evento marcado"
Else
             Response.Write rsListaAgenda("evento")
End If

rsListaAgenda.Close
Set rsListaAgenda = Nothing

Conexao.Close
Set Conexao = Nothing
%>

Espero que entendam!

Qualquer dúvida, podem postar!
Qualquer código que também seja de validação e que seja de ajuda para outros usuários, podem aproveitar este tópico!

Abraços!

:D
' nome: gustavo veiga
' profissão: ALOG Data Centers do Brasil (analista de sistemas)
' publicidade: ALOG Data Centers do Brasil




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq