Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago Paschoalin

ERRO: Type mismatch

Recommended Posts

Eu tenho o login e senha para entrar em certa página... ASP+MySql

 

Bom, no meu login tenho isso:

 

<!--#include file="ConnDB.asp"-->
<%
usuario = Request.Form("user")
msenha = Request.Form("senha")

set rs = Conn.execute("SELECT * FROM usuarios WHERE user = '"& usuario &"' and senha = '"& msenha &"'")

If not rs.eof Then
Session("user") = rs("user")
Session("logon") = rs("logon")
response.redirect "admin.asp"
else
response.redirect "default.asp?Login=Erro"
end if 

%>

Ai na minha página admin.asp tenho está verificação:

<% response.buffer=true %>
<% if Session("user") = "" Then
response.redirect("default.asp")
 end if %>

Bom, o problema é: quando coloco lá no MySql os campos 'user', 'senha' e 'logon' como VarChar(32) esse meu código funciona perfeito ! PORÉM, ele não diferencia MAIUSCULA de minuscula, ou seja, se tenho uma senha assim: SeNhA, como lá no mysql está como VarChar(32) e eu colocar na senha assim: sEnHa ele aceita e entra !!!!

 

Ai li sobre o tipo de campo VarBinary, que diferencia as letras... Bom, troquei no meu MySql os 3 campos acima para VarBinary(32)... Ai fui tentar logar e realmente ele diferencia, pois quando coloquei o user e senha sem as mauisculas ele deu senha inválida !

Mas ai quando coloquei do user e senha da forma correta me deu o erro de TYPE MISMATCH na linha 2 do meu admin.asp que é o

<% if Session("user") = "" Then...

Pelo que entendi o VarBinary() não é compativel com o Session(), mas como seria o correto para esse caso então ?

 

Grato desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema está ocorrendo porque você não está mais trabalhando com strings, e sim com binários. Se você for tentar fazer um insert, receberá o mesmo erro (ou um semelhante).

 

O que você precisa é de uma função que converta de string para binário.

 

Te confesso que tentei muita coisa aqui mas não consegui.

 

Eu tenho uma função aqui que uso para converter imagens para binários e vice-versa, mas não consegui fazer o mesmo para string.

 

Tente achar algo na net que fale sobre isso, eu pesquisei e não encontrei.

 

Boa sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha não tive sucesso... mas agora fiquei pensando, como eu poderia em ASP fazer uma verificação de letras maiusculas e minusculas em um campo no MySql ?

 

Pq ai poderia deixar meu campo no DB como VarChar() mesmo, e faço o ASP confirmar se onde tem Maiuscula no DB está Maiscula no Request.Form ?

 

*EDIT:

Isto é uma pergunta tá.. hehehe...

 

Fiz uma pergunta parecendo uma afirmação né... hauahuahua....

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não era isso não Ted, achei aqui o que queria...

 

Tipo, quando você cria uma tabela e seus campos no Mysql, tem uma opção de "Collation", onde seria (acho) o tipo de linguagem para acentuações ou tb nem sei o é exatamente.. hehehehe

Mas enfim...

 

* Criar Campo de User e Senha no MySql com sensitive Case:

 

No seu Editor de MySql ou no PhpMyAdmin, quando criar os campos USER e SENHA, escolham o seguinte:

 

("Tipo" = VarChar(32) ) e ("Collation" = utf8_bin ).

 

Com o UTF8_BIN ativado, quando você escrever no seu form html o USER e SENHA, ele verifica as maisculas e minusculas no banco e compara com seu form.

Fazendo com que você tenha que escrever EXATAMENTE CoRReTo seu USER e SENHA !!!!

 

EURECA !!! hauhuahua... isso é mais uma aula para mim que sou cabaço mesmo em MySql, mas se isso for o problema de muita gente ou muitas pessoas fazem coisas absurdas somente para fazer este tipo de verificação, está ai uma resolução SIMPLES e PRÁTICA e tem o meu consentimento para publicar isso em algum tutorial se for o caso !!! ^^

 

Abraços e Obrigado !

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas daí, se o user for inserir uma senha com caracteres em maiúsculo, você naõ vai deixar inserir !?!?!,

ou você usa uma função para gerar senha tb,com maiuscula,numeros,caracteres.

 

olha esta função:

 

LCase(Right(((recordset.Fields.Item("heading").Value)), Len((recordset.Fields.Item("heading").Value))-1))

<%=UCase(Left((recordset.Fields.Item("heading").Value),1)) & LCase(Right(((recordset.Fields.Item("heading").Value)), Len((recordset.Fields.Item("heading").Value))-1))%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi xanburzum, então se eu deixar (Collation=utf8_bin) no campo SENHA, ele não aceitará outros caracteres alem de a...z minusculos em um futuro INSERT... é isso ?

 

Isso acontece somente com o campo senha, ou com qualquer campo ? Pq tipo, no MySql eu coloquei o campo senha como VarChar(), e não apontei o campo como password...

 

Inclusive aproveitar aqui, quando eu seto o campo SENHA como password, ele embaralha a minha SENHA, mas ai ele não aceita a minha senha... dá sempre incorreto... que caminho tenho que tomar para encriptar ou codificar o campo SENHA no MySql ?

 

Bom, eu escrevi aqui sua função xanburzum, mas me explica melhor sobre minha dúvida para entender direito ! Obrigado ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpem pelo post duplicado, mas só deu um up para finalizar o assunto, ok !

 

Bom, se criar no MySql campos com ("Tipo" = VarChar(32) ) e ("Collation" = utf8_bin ) ele diferenciará maisculos de minusculos e não tera problemas no INSERT ou UPDATE, já testei esses problemas, inclusive pela explicação do xanburzum, que me deixou com dúvidas...

 

Bom, se por exemplo você criar uma tabela chamada 'ADMIN', com campos Id, User, Senha e colocar esses campos com COLLATION='utf8_bin', depois criar um Form HTML + ASP para verificar seu User e Senha, ele difenciará as letras !

 

User = Thiago

Senha = SeCrEtA

 

Se no Form HTML coloca no <input name='Senha' value='secreta'>, estará INCORRETO ! e o melhor,não vai precisar de nenhuma verificação em ASP para que isso ocorra, só tendo o campo utf8_bin já resolve !

 

Bom, é isso, isso será inutil para muitos, porém salvará alguns, espero ^^ !

 

Bom ano novo para todos !

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.