Login em VB

RPortela

Power Member
boas, eu tenho um formulario de login em que o login e feito atraves da confirmação dos dados da base de dados, agora a minha duvida e a seguinte: como fazer para alterar o nome de utilizador ou a password? neste momento a questao e apenas para o nome de utilizador, a password depois e so adapatar. o codigo que estou a usar e o seguinte:

If txtuser.Text = user.Text And txtpassword.Text = password.Text And txtnovouser.Text = txtnovouser2.Text Then
user.Text = txtnovouser.Text
If MsgBox("O nome de utilizador foi alterado", vbInformation + vbOKOnly, "Erro") = vbOK Then
frmprincipal.Show
Unload Me
End If
Else
If MsgBox("Algum dos dados está incorrecto", vbInformation + vbOKOnly, "Erro") = vbOK Then
txtuser.SetFocus
End If
End If

agora a exlicação:
eu tenho duas textbox´s como invisiveis ligadas a Bd e essas textbox servem para fazer uma vrificação dos dados, ou seja, o programa verifica se os dados de uma determinada text box sao iguais aos de outra textbox e se forem iguais, faz o login.

user.Text = txtnovouser.Text --> é aqui que esta o problema: a user.text e a txtbox que esta ligada a base de dados, atraves deste codigo quero colocar o texto da txtbox txtnovouser no texto da user.text,
como faço para guardar esta alteração??

já agora, se alguem souber como fazer isto de outra maneira..diga:

plzz ajudem-me
 
Porque não fazes, o utilizador preenche o campo de usernam e password, e carrega no botao. no onclick do botao, fazes algo do género:

select * from utilizadores where username = txtuser and passwd = txtpassword

se retornar valores quer dizer que o utilizador e a password correspondem ao mesmo user. se isto acontecer mandas para o form k te interessa, senao acontecer, crias uma label com o texto "Dados incorrectos". Porque da forma como estás a fazer nunca consegue spor os dados certos nas textbox que tens a hidden.

Penso ser isto que percebi do teu problema.

Fica bem.
 
Tinha isto para aqui que tinha feito para a escola espero que dê para tirares alguma ideia:

Private Sub cmd_ok_Click()
Data_utilizadores.RecordSource = "SELECT utilizadores.username, utilizadores.password From utilizadores WHERE (((utilizadores.username)='" & Text_utilizador.Text & "'));"
Data_utilizadores.Refresh
If Data_utilizadores.Recordset.EOF Then
MsgBox "Utilizador desconhecido"
ElseIf Data_utilizadores.Recordset.Fields("password") = Text_password.Text Then
Unload Me
principal.Show
Else
MsgBox "Passsword Incorrecta"
End If
End Sub
 
já consegui resolver o meu problema através de um metodo "alternativo". se alguem quiser saber detalhes é so perguntar.

obrigado na mesma pela vossa cooperação.:)
 
Só uns pormenores:
1) Não precisas de fazer IF MsgBox() = vbOk. Basta-te a MsgBox. Se o único botão dela é o OK, então já sabes que se o utilizador saiu dela foi por carregar em OK.
2) Não te aconselho a utilizar uma segunda textbox para guardar a password. Não a podes simplesmente guardar numa variável?

Cumps [[[[[[[[[[]]]]]]]]]]
angelofwisdom
 
um pouco offtopic ...

não tens necessidade de guardar em text box's invisiveis ...

habitua-te a não usar soluções dessas "marteladas" pq são demasiado faceis de crackar ...
 
Só uns pormenores:
1) Não precisas de fazer IF MsgBox() = vbOk. Basta-te a MsgBox. Se o único botão dela é o OK, então já sabes que se o utilizador saiu dela foi por carregar em OK.
2) Não te aconselho a utilizar uma segunda textbox para guardar a password. Não a podes simplesmente guardar numa variável?

Cumps [[[[[[[[[[]]]]]]]]]]
angelofwisdom

boas,

1-eu sei que e possivel fazer uma msgbox apenas atraves de msgbox"exemplo" mas eu fiz o if msgbox() = vbok para poder definir o icone da msgbox e o titulo (MsgBox("O nome de utilizador foi alterado", vbInformation + vbOKOnly, "Erro")) eu ja tentei fazer isso sem o =vbok, e deu-me erro; se souberes de alguma maneira de fazr isso avisa :007:


2- essa era a minha ideia inicial, guardar o valor da bd para uma variavel, e comparar essa variavel com o o texto da textobox onde inserem os dados, mas nao consegui fazer isso, e por isso opetei por este metodo, se souberem uma maneira de fazer isso digam, todas as ajudas sao bem-vindas (e sempre se aprende mais alguma coisa :))


cumprimentos,
 
boas,

1-eu sei que e possivel fazer uma msgbox apenas atraves de msgbox"exemplo" mas eu fiz o if msgbox() = vbok para poder definir o icone da msgbox e o titulo (MsgBox("O nome de utilizador foi alterado", vbInformation + vbOKOnly, "Erro")) eu ja tentei fazer isso sem o =vbok, e deu-me erro; se souberes de alguma maneira de fazr isso avisa :007:


2- essa era a minha ideia inicial, guardar o valor da bd para uma variavel, e comparar essa variavel com o o texto da textobox onde inserem os dados, mas nao consegui fazer isso, e por isso opetei por este metodo, se souberem uma maneira de fazer isso digam, todas as ajudas sao bem-vindas (e sempre se aprende mais alguma coisa :))


cumprimentos,

comparas o valor directamente com o que está armazenado na BD, sem andares a guardar em variaveis ...
 
1)

MsgBox "O nome de utilizador foi alterado", vbInformation, "Erro"

MsgBox "Algum dos dados está incorrecto", vbInformation, "Erro"

2) Eu nunca trabalhei com bases de dados, portanto não sei absolutamente NADA sobre isso. Mas teoricamente, podes ir buscar um valor à base de dados e gravá-lo numa variável, em vez de uma Textbox. Portanto, o local onde tu fazes Text1.Text = <valor>, fazes Variavel = <valor>. Sempre é melhor, porque senão é como o spastikman disse - é bastante fácil de crackar. Por exemplo: se tu não fazes em runtime "TextboxComAPassword.Visible = False", então até algum n00b no cracking pode abrir o teu programa com o ExeScope, mudar a visibilidade da T.B. com a password para True, e ao executar o programa, a textbox está visível, e com ela, a password.

Se precisares de alguma explicação em algum destes campos diz, mas pode ser preciso postares source code; nem que seja para EU perceber as B.D.'s ;)

Cumps [[[[[[[[[]]]]]]]]]]
angelofwisdom
 
1)

MsgBox "O nome de utilizador foi alterado", vbInformation, "Erro"

MsgBox "Algum dos dados está incorrecto", vbInformation, "Erro"

2) Eu nunca trabalhei com bases de dados, portanto não sei absolutamente NADA sobre isso. Mas teoricamente, podes ir buscar um valor à base de dados e gravá-lo numa variável, em vez de uma Textbox. Portanto, o local onde tu fazes Text1.Text = <valor>, fazes Variavel = <valor>. Sempre é melhor, porque senão é como o spastikman disse - é bastante fácil de crackar. Por exemplo: se tu não fazes em runtime "TextboxComAPassword.Visible = False", então até algum n00b no cracking pode abrir o teu programa com o ExeScope, mudar a visibilidade da T.B. com a password para True, e ao executar o programa, a textbox está visível, e com ela, a password.

Se precisares de alguma explicação em algum destes campos diz, mas pode ser preciso postares source code; nem que seja para EU perceber as B.D.'s ;)

Cumps [[[[[[[[[]]]]]]]]]]
angelofwisdom


boas,

nao sabia desse pormenor das msgbox, mas e sempre a aprender e agora ja esta alterado, obrigado;

em relação as textobox invisiveis, ja as removi, e removi tambem a ligação a base de dados, encontrei um artigo num site que explica isso, e o sistema ja esta a bombar,

obrigadao :)
 
olá...
será que podias dar referencia ao artigo que encontras-te sobre como fazer o login e mudar o nome de utilizador e palavra passe?
é que ando a tentar fazer algo semelhante e não tou a encontrar nada que me agrade...
consigo encontrar artigos para fazer login, mas nã encontro para mudar o nome de utilizador e palavra passe....

ainda sou um pouco novo nisto e toda a ajuda é bem vinda...

tanks...
 
eu fis algo assim usando uma base de dados ca fica o codigo

Tenho 2 caixas de testo, user e pass e um botao entrar, no botao tenho algo assim
Dim login As Recordset
Código:
Set login = bdadmin.OpenRecordset("select nome,pass from admin")
If login.RecordCount > 0 Then
    login.MoveFirst
    Do While Not login.EOF
        If Text1.Text = login("nome") And Text2.Text = login("pass") Then
            band% = 1
            login.MoveLast
            login.MoveNext
        Else
            login.MoveNext
        End If
    Loop
End If

If band% = 1 Then 'Text1.Text = login("nome") And Text2.Text = login("pass") Then
    acesso = 1
 inicio.Show 1
end if

registar user
Private Sub Command1_Click()

Set admins = bdadmin.OpenRecordset("admin", dbOpenTable)
admins.AddNew
admins("nome") = Text1
admins("pass") = Text2
admins("email") = Text3
admins.Update
isto deve ter alguns bugs, isto e de uma area de admin de um projecto que fis ha meses mas ca fica a ideia
 
Última edição pelo moderador:
Porque não fazes, o utilizador preenche o campo de usernam e password, e carrega no botao. no onclick do botao, fazes algo do género:

select * from utilizadores where username = txtuser and passwd = txtpassword

se retornar valores quer dizer que o utilizador e a password correspondem ao mesmo user. se isto acontecer mandas para o form k te interessa, senao acontecer, crias uma label com o texto "Dados incorrectos". Porque da forma como estás a fazer nunca consegue spor os dados certos nas textbox que tens a hidden.

Penso ser isto que percebi do teu problema.

Fica bem.
Atenção que este código tem uma falha de segurança gravissima....
 
Atenção que este código tem uma falha de segurança gravissima....
Realmente acho que esse é precisamente o pior método de autenticar um utilizador. É, de todos, o mais fácil de contornar.


Acho que um tópico sobre SQL Injection iria dar jeito a muito boa gente...
 
(pela terceira vez, lá vou eu repetir a mensagem ... o fórum não anda bem :s )
Segundo o que vi, o teu vai buscar o nome de utilizador e a password à BD, e depois compara-os com os introduzidos pelo utilizador. Nesse aspecto, ele não é passível de SQL injection (até porque o query é fixo. Não há variáveis que o possam adulterar).
 
(pela terceira vez, lá vou eu repetir a mensagem ... o fórum não anda bem :s )
Segundo o que vi, o teu vai buscar o nome de utilizador e a password à BD, e depois compara-os com os introduzidos pelo utilizador. Nesse aspecto, ele não é passível de SQL injection (até porque o query é fixo. Não há variáveis que o possam adulterar).
exacto.
Já agora, para kem não sabe, ficar a saber.
O problema com a abordagem que eu citei acima é o seguinte:

temos então o seguinte sql: "select user,pass from utilizadores where username='%variavel1%' and password='%variavel2%'"

e temos uma janelinha bonitinha que nos pede um username e password e depois executa aquele select substituindo os valores das %variaveis%, depois só tenho que comparar kts registos retornou a instrução para ver se as credenciais estão certas. pois, isto funciona, mas mal..... ora vejamos:
Imaginemos agora que eu introduzo isto ja janelinha:

/--------------------\
|user: r3pek .......|
|pass: ' or '1'='1. |
| .____ ..............|
| | OK |..............|
\-------------------/

se eu introduzir aquilo tal e qual como está escrito o que vou provocar é que sejam sempre retornados registos e como tal tenho o meu acesso à aplicação/site/whatever garantido quando eu nem sequer um utilizador válido (pois, por aquelo utilizador até pode nem existir).

Este é o chamado ataque por SQL Injection, que como o nome indica, funciona por "injecção" de SQL nas queries internas do programa.

Dá pa perceber?!


EDIT: os pontinhos são uma tentativa triste de por o ASCII art o mais parecido possivel com "art" ;)
 
Última edição:
Se quiseres ASCII Art, experimenta usar as tags Code e ficas com o tipo de letra monoespaçado ;)

Eu já dei por várias vezes as "introduções" do SQL Injection cá no fórum, sempre em PHP/MySQL. Se calhar, vou mesmo escrever qualquer coisa sobre o assunto e colocar cá, para evitar estar constantemente a dar a mesma explicação vezes sem conta.

edit - aqui está o exemplo mais recente: http://www.techzonept.com/showthread.php?t=182232
 
Última edição:
Se quiseres ASCII Art, experimenta usar as tags Code e ficas com o tipo de letra monoespaçado ;)

Eu já dei por várias vezes as "introduções" do SQL Injection cá no fórum, sempre em PHP/MySQL. Se calhar, vou mesmo escrever qualquer coisa sobre o assunto e colocar cá, para evitar estar constantemente a dar a mesma explicação vezes sem conta.

edit - aqui está o exemplo mais recente: http://www.techzonept.com/showthread.php?t=182232

obrigado pela dica :)
Pois, se calhar é mesmo melhor escrever qualquer coisa sobre o assunto, parece que há muita gente que não está informada sobre o problema. Se precisares de ajuda avisa.
 
Back
Topo