Jump to content

[RESOLVIDO]ajuda com sistema de login


rjsma
 Share

Recommended Posts

boas

eu tou a fazer um sistema de login no vb juntamente com o access

e queria saber na form para criar uma conta como fazo para mandar as informacoes(utilizador e senha) para a base de dados(access)

cumps

Antes de mais tens de ter esses campos na base de dados, do género:

Tabela Login » Campos: Utilizador e Senha

Depois no Vb.Net chamas, via wizard ou código, a tabela.

Link to comment
Share on other sites

Qual controlo?

Tens é q fazer uma class library com os métodos q necessitas para as operações na base de dados.

Para isso usas a dll com o provider para o teu motor de base de dados.

Pesquisa no google por ADO .net em VB .net para veres um exemplos.

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other sites

Eu no meu programa estou a usar SQLite (que aliás, recomendo!) Para access é idêntico. Vou-te dar um exemplo com sqlite (não sei se tem algum erro mas a ideia é esta)

Primeiro passo: na base de dados, deves criar uma tabela do género:

[users]

- username

- password

Na form colocas estes objectos:

- textbox (txtUsername)

- button (txtPassword)

- button (btnOk)

- button (btnCancel)

Código:

	Imports System.Text
Imports System.Security.Cryptography
Imports System.Data.SQLite

Public userExists As Boolean

Sub BtnCreateUserClick(sender As Object, e As EventArgs)
	Select Case (String.IsNullOrEmpty(txtusername.Text.Trim()) Or String.IsNullOrEmpty(txtpassword.Text.Trim()))
		Case True
			MsgBox("All fields are required.", MsgBoxStyle.Critical, "Incomplete fields")
		Case False
			btn_Ok.Enabled = False
			btn_Exit.Enabled = False
			CheckUserData("checkUserExistance", txtusername.Text.Trim(), GenerateHash(txtpassword.Text))
			Select Case userExists
				Case = True
					MsgBox("o username escolhido já está atribuido.", MsgBoxStyle.Critical, "user inválido")
				Case = False
					AddNewUser(txtusername.Text.Trim(), GenerateHash(txtpassword.Text))
					MsgBox("User criado com sucesso.", MsgBoxStyle.Information, "user criado")
			End Select
	End Select
End Sub

Sub BtnLoginClick(sender As Object, e As EventArgs)
	Select Case (String.IsNullOrEmpty(txtusername.Text.Trim()) Or String.IsNullOrEmpty(txtpassword.Text.Trim()))
		Case True
			MsgBox("All fields are required.", MsgBoxStyle.Critical, "Incomplete fields")
		Case False
			btn_Ok.Enabled = False
			btn_Exit.Enabled = False
			CheckUserData("checkUserNameAndPassword", txtusername.Text.Trim(), GenerateHash(txtpassword.Text))
			Select Case userExists
				Case = True
					MsgBox("Login com sucesso.", MsgBoxStyle.Critical, "Login válido")
				Case = False
					MsgBox("username ou password erradas", MsgBoxStyle.Information, "Login errado")
			End Select
	End Select
End Sub

Function AddNewUser(ByVal username As String, password As String)
	Dim SQLconnect As New SQLiteConnection()
	Dim SQLcommand As SQLiteCommand
	SQLconnect.ConnectionString = "Data Source=" & appPath & databaseFile & databasePassword
	SQLconnect.Open()
	SQLcommand = SQLconnect.CreateCommand
	SQLcommand.CommandText = "INSERT INTO Users (username, password) VALUES ('" & username & "', '" & password & "')"
	SQLcommand.ExecuteNonQuery()
	SQLconnect.Close()
End Function

Function CheckUserData(ByVal Action As String, ByVal username As String, ByVal password As String) As Boolean
	userExists = False
	Dim SQLconnect As New SQLiteConnection()
	Dim SQLcommand As SQLiteCommand
	SQLconnect.ConnectionString = "Data Source=" & appPath & databaseFile & databasePassword
	SQLconnect.Open()
	SQLcommand = SQLconnect.CreateCommand
	Select Case Action
		Case = "checkUserExistance"
			SQLcommand.CommandText = "SELECT * FROM Users WHERE username = '" & username & "'"
		Case = "checkUserNameAndPassword"
			SQLcommand.CommandText = "SELECT * FROM Users WHERE username = '" & username & "' AND password = '" & password & "'"
	End Select
	Dim SQLreader As SQLiteDataReader = SQLcommand.ExecuteReader()
	While SQLreader.Read()
		userExists = True
	End While
	SQLconnect.Close()
	Return userExists
End Function

Function GenerateHash(ByVal SourceText As String) As String
	Dim Ue As New UnicodeEncoding()
	Dim ByteSourceText() As Byte = Ue.GetBytes(SourceText)
	Dim Md5 As New MD5CryptoServiceProvider()
	Dim ByteHash() As Byte = Md5.ComputeHash(ByteSourceText)
	Return Convert.ToBase64String(ByteHash)
End Function
Link to comment
Share on other sites

boas

encontrei este exemplo

Dim ws as Workspace
dim db as database
dim strConnection as string

set ws=DBEngine.Workspaces(0)
let strConnection= "ODBC;DSN=" & DatabaseName & ";UID=" & UserName 
& ";PWD=" & UserPassword
set db=ws.OpenDatabase("", False, False, strConnection)

queria saber se deve por este codigo se e no evento do botao para fazer o registo ou no

ODBC Connection ?

ja agora obrigado pela a ajuda

cumps

Link to comment
Share on other sites

boas

tenho o seguinte codigo num botao

Dim conn As New MySqlConnection
        conn.ConnectionString = "server=127.0.0.1;user id=administrador;password=software2010;database=software"
        conn.Open()
        myCommand.Connection = conn
        myCommand.CommandText = "SELECT count(* ) N FROM `software`.`login` where utilizador = '" + UsernameTextBox.Text + "'" + " and senha = '" + PasswordTextBox.Text + "'"
        If (Convert.ToInt32(myCommand.ExecuteScalar()) = 1) Then
            Principal.Show()
            Me.Hide()
        Else
            Me.Close()
        End If
    End Sub

eu nao tou a conseguir uma parte do codigo

se o nome do user e da password estever errados fazer aparecer uma box a disser login invalido

cumps

Link to comment
Share on other sites

http://www.connectionstrings.com/

este site ajuda-vos com as strings de conexão. Quanto ao código de conexão tens muitos na net.

o que eu uso com sql é este:

cnn = New SqlConnection("StringDe Conecção no site.")
cnn.open
Dim ds As New DataSet
Dim da As New SqlDataAdapter("select * from login where user=1 and pass=2", cnn)
da.Fill(ds)
If ds.Tables(0).Rows.Count > 0 Then
        
else
msgbox("invalido")
end if

quanto ao login lembra-te de encriptares a pass com MD5 na base de dados. Segurança sempre em primeiro não é só em relações tá? XD

Link to comment
Share on other sites

Dim conn As New MySqlConnection
        conn.ConnectionString = "server=127.0.0.1;user id=administrador;password=software2010;database=software"
        conn.Open()
        myCommand.Connection = conn
        myCommand.CommandText = "SELECT count(* ) N FROM `software`.`login` where utilizador = '" + UsernameTextBox.Text + "'" + " and senha = '" + PasswordTextBox.Text + "'"
        If (Convert.ToInt32(myCommand.ExecuteScalar()) = 1) Then
            Principal.Show()
            Me.Hide()
        Else
            Me.Close()
        End If
    End Sub
Link to comment
Share on other sites


        Dim conn As New MySqlConnection
        conn.ConnectionString = "server=127.0.0.1;user id=administrador;password=software2010;database=software"
        conn.Open()
        myCommand.Connection = conn
        myCommand.CommandText = "SELECT count(* ) N FROM `software`.`login` where utilizador = '" + UsernameTextBox.Text + "'" + " and senha = '" + PasswordTextBox.Text + "'"
        If (Convert.ToInt32(myCommand.ExecuteScalar()) = 1) Then
            Principal.Show()
            conn.close()        
    Me.Hide()
        Else
          messagebox.show("Login Inválido")            
          conn.close ()
          Me.Close()

        End If
   
End Sub

Aconselhava-te a encriptar as passes a serem armazenadas na tabela, pelo menos em MD5, mas se quizeres usa Triple-DES. Não precisas de fazer grandes alterações no codigo, basta usares uma função decript para desencriptar os valores de login e pass que vêem encriptados da tabela antes de executares a condição IF.

Não te esqueças que para fazer isto quando criares um novo user tens de encriptar da mesma forma o user e pass com uma função "encript". Se precisares posso deixar-te exemplos de codigo para Triple-DES.

Uma coisa que reparei foi que não fechavas a connecção após terminar a form. Existe alguma razão especial para isto??

Cumprimentos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.