[How To]Login und Registrierung in ein Programm einbauen

05/29/2010 15:37 killeeer111#1
Hallo,

In diesem Tutorial zeig ich euch wie ihr einen Login + Registrierung mit MYSQL programmiert.

1. Was brauchen wir?
Eine Mysql Datenbank die Externen Zugriff Erlaubt, die bekommen wir z.b. hier kostenlos: [Only registered and activated users can see links. Click Here To Register...]
MYSQL
[Only registered and activated users can see links. Click Here To Register...]


2. Tabelle in Datenbank anlegen
Ihr geht auf [Only registered and activated users can see links. Click Here To Register...]
Da loggt ihr euch ein!
[Only registered and activated users can see links. Click Here To Register...]

Dann wählt ihr eure Datenbank aus!
[Only registered and activated users can see links. Click Here To Register...]

Dann klickt ihr auf das sql zeichen!
[Only registered and activated users can see links. Click Here To Register...]


Dann sollte sich ein Fenster öffnen und da gebt ihr folgendes ein und klick OK!
Code:
CREATE TABLE `login` (
  `ID` int(5) NOT NULL auto_increment,
  `Benutzername` varchar(255) default NULL,
  `Passwort` varchar(255) default NULL,
  `Email` varchar(255) default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
Aber was bedeutet das?

Code:
CREATE TABLE `login` (
Das bedeutet das er eine Tabelle mit dem Namen login erstellt.

Code:
`ID` int(5) NOT NULL auto_increment,
  `Benutzername` varchar(255) default NULL,
  `Passwort` varchar(255) default NULL,
  `Email` varchar(255) default NULL,
Das sind die Felder der Tabelle

Code:
PRIMARY KEY  (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
Das ist der Primary Key und das Auto Increment


[Only registered and activated users can see links. Click Here To Register...]

Dann öffnet ihr Visual Basic 2008 und erstellt eine Windows Forms anwendung!
[Only registered and activated users can see links. Click Here To Register...]

Dann öffnet ihr den Projektmappen - Explorer und klickt auf MyProjekt!
[Only registered and activated users can see links. Click Here To Register...]

Dann klickt ihr auf Verweise -> Hinzufügen und wählt MySQL.Data aus!
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]


3. Login

Dann fügt ihr mindestens im Login 2 TextBoxen und 1 Button hinzu!
Wichtig! Die TextBox für den Usernamen heißt: txt_benutzer und die für Passwort: txt_passwort

Die Form kann dann so aussehen:
[Only registered and activated users can see links. Click Here To Register...]

Dann machen wir doppelklick auf die Forum und ersetzen den bisherigen code durch diesen:
Code:
' Importieren
Imports System.Security.Cryptography
Imports System.Text
Imports MySql.Data.MySqlClient
' Ein Modul das das Passwort nicht im Klartext gespeichert wird sondern in 
' MD5
Module md5

	Public Function MD5StringHash(ByVal strString As String) As String
    	Dim MD5 As New MD5CryptoServiceProvider
    	Dim Data As Byte()
    	Dim Result As Byte()
    	Dim Res As String = ""
    	Dim Tmp As String = ""

    	Data = Encoding.ASCII.GetBytes(strString)
    	Result = MD5.ComputeHash(Data)
    	For i As Integer = 0 To Result.Length - 1
        	Tmp = Hex(Result(i))
        	If Len(Tmp) = 1 Then Tmp = "0" & Tmp
        	Res += Tmp
    	Next
    	Return Res
	End Function

End Module
' Anfang der Form1
Public Class Form1
' Das Button1_Click Event
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Conn Definieren
Dim conn As MySqlConnection
    conn = New MySqlConnection
' Die mysql daten eingeben, das er weis auf welchem benutzer und host und '   db die tabelle liegt
    conn.ConnectionString = "server=serverip;" _ 'Hier gibt ihr die Server IP ein, die kommentare bei server ip etc. löschen, da sonst errors auftauchen
                                         & "user id=benutzername;" _ 'Hier gibt ihr euren Benutzernamen ein
                                         & "password=passwort;" _ 'Hier gibt ihr euer Passwort ein
                                         & "database=datenbankname" 'Hier gibt ihr die Datenbank ein auf der die Tabelle login liegt
' Er versucht sich zu Verbinden
    Try
        conn.Open() ' Verbindung öffnen
    Catch myerror As MySqlException
' Falls ein Verbindung Fehler auftaucht kommt eine MsgBox
        MsgBox("Keine Verbindung zur Datenbank : " & myerror.Message.ToString) ' Falls Fehler : Fehler anzeigen
    End Try
' Benutzer Definieren und gleich in MD5 Umwandeln
    	Dim benutzer As String = MD5StringHash(txt_benutzer.Text)
' Passwort definieren und gleich in MD5 Umwandeln
    	Dim passwort As String = MD5StringHash(txt_passwort.Text)
' myAdapter definieren
    	Dim myAdapter As New MySqlDataAdapter
' Er sucht Die Tabelle Login in der angegebenen Datenbank
' Er schreibt in das Benutzername Feld der Tabelle den verschlüsselten Text
' von benutzer, dasselbe mit Passwort
    	Dim SQLAbfrage As String = "SELECT * FROM login WHERE Benutzername='" + Replace(benutzer, " ", "") + "' AND Passwort='" & Replace(passwort, " ", "") & "'" 
' myCommand definieren
    Dim myCommand As New MySqlCommand
    myCommand.Connection = conn
    myCommand.CommandText = SQLAbfrage

    myAdapter.SelectCommand = myCommand
    Dim myData As MySqlDataReader
    myData = myCommand.ExecuteReader()  ' Hier startet man die SQL Abfrage
    If myData.HasRows Then ' Wenn die Abfrage Einträge enthält / also der Benutzer und das Passwort stimmen überein
        MsgBox("Einloggen erfolgreich !")
        conn.Close()
        conn.Open()

    Else 
        MsgBox("Fehler Code 2 : Falsche Daten")
'Sonst wird angezeigt das die Daten falsch sind
    End If
    End Sub
End Class
' Der Rest müsste eigentlich klar sein.

4. Registrieren

Dann gehen wir auf Neues Element Hinzufügen -> Form Hinzufügen


Da brauchen wir mindestens 5 TextBoxen und 1 Button.
Namen:
Benutzername = txt_benutzer
Passwort = txt_passwort
Passwort Wiederholen = txt_passwort_w
Email: txt_email
Email Wiederholen: txt_email_w

Das kann dann so aussehen:
[Only registered and activated users can see links. Click Here To Register...]

Dann doppelklick auf die Form und ersetzen den bestehenden code durch diesen:
Code:
' Importieren
Imports System.Security.Cryptography
Imports System.Text
Imports MySql.Data.MySqlClient
' Ein Modul das das Passwort nicht im Klartext gespeichert wird sondern in 
' MD5
Module md5

	Public Function MD5StringHash(ByVal strString As String) As String
    	Dim MD5 As New MD5CryptoServiceProvider
    	Dim Data As Byte()
    	Dim Result As Byte()
    	Dim Res As String = ""
    	Dim Tmp As String = ""

    	Data = Encoding.ASCII.GetBytes(strString)
    	Result = MD5.ComputeHash(Data)
    	For i As Integer = 0 To Result.Length - 1
        	Tmp = Hex(Result(i))
        	If Len(Tmp) = 1 Then Tmp = "0" & Tmp
        	Res += Tmp
    	Next
    	Return Res
	End Function

End Module
' Ich hab dieses Modul jetzt nicht kommentiert, da der code gleich ist wie oben.
' Anfang der Form1
Public Class Form1
' Das Button1_Click Event
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Jetzt prüft er ob die 2 eingegeben passwörter übereinstimmen
 If txt_passwort.Text = txt_passwort_w.Text Then ' Prüft ob die Passwörter übereinstimmen
' Jetzt prüft er ob die email ein @ enthält
        If txt_email.Text.Contains("@") And txt_email_w.Text.Contains("@") Then ' Prüft ob die E-Mails ein @ enthalten.Damit wird geschaut ob die Email gültig ist
' Jetzt überprüft er ob die emails übereinstimmen
            If txt_email.Text = txt_email_w.Text Then ' Wenn die Emails übereinstimmen dann Trage ein
' conn definieren
                Dim conn As MySqlConnection
                conn = New MySqlConnection
                ' AB Hier in mysql daten ändern
                  conn.ConnectionString = "server=serverip;" _ 'Hier gibt ihr die Server IP ein, kommentare wieder löschen
                                         & "user id=benutzername;" _ 'Hier gibt ihr euren Benutzernamen ein
                                         & "password=passwort;" _ 'Hier gibt ihr euer Passwort ein
                                         & "database=datenbankname" 'Hier gibt ihr die Datenbank ein auf der die Tabelle benutzer liegt 
                                         ' Ab Hier nichts mehr ändern
' Er versucht die Verbindung zu öffnen
                Try

                    conn.Open() 
' Wenn ein Fehler auftaucht erscheint MsgBox!
                Catch myerror As MySqlException
                    MsgBox("Keine Verbindung zur Datenbank : " & myerror.Message.ToString)
                End Try
' Das selbe wie oben
                Dim myAdapter As New MySqlDataAdapter
                Dim SQLAbfrage As String = "SELECT * FROM login WHERE Benutzername='" + txt_benutzer.Text + "'" ' Erstmal eine SQL Abfrage die überprüft ob es den Benutzernamen schon gibt
                Dim myCommand As New MySqlCommand
                myCommand.Connection = conn
                myCommand.CommandText = SQLAbfrage

                myAdapter.SelectCommand = myCommand
                Dim myData As MySqlDataReader
                myData = myCommand.ExecuteReader()  ' Abfrage starten

                If myData.HasRows = 0 Then ' Wenn dieser Benutzername nicht existiert dann fang mit der Registrierung an
                    conn.Close()
                    conn.Open()
                    Dim registerfinal As New MySqlDataAdapter
Dim benutzer As String = MD5StringHash(txt_benutzer.Text)
Dim passwort As String = MD5StringHash(txt_passwort.Text)
    http://www.elitepvpers.com/forum/epvp-coders-tutorials/587234-vb-2008-how-login-und-registrierung-ein-programm-einbauen.html#post5424689                myCommand.CommandText = "INSERT INTO benutzer(Benutzername, Passwort, Email)" _
                                         & "VALUES('" & benutzer & "','" & passwort & "','" & txt_email.Text & "')"
                    myCommand.ExecuteNonQuery() ' SQL Abfrage starten und eintragen
                    MsgBox("Der Account mit dem Namen : " & txt_benutzer.Text & " wurde erfolgreich erstellt")
                    conn.Close()
                Else
                    MsgBox("Dieser Benutzername existiert bereits")
                End If
            Else
                MsgBox("Die eingegebenen Emails stimmen nicht über ein !")
            End If
        Else
            MsgBox("Die eingegebenen E-Mails sind ungültig !")
        End If
    Else
        MsgBox("Die eingegebenen Passwörter stimmen nicht überein")
    End If
end sub
End Class
FERTIG!!
Hoffe euch hat das Tutorial Gefallen!

BITTE THX DRÜCKEN!
05/29/2010 15:52 Reextion#2
Und wo lernt man da was?

C&P , super! Tutorials sind dafür da um jemand was beizubringen, tut er bei dir nicht, keine Codeerklärung nix. Einfach nur wo man welchen Code einfügen soll.
:facepalm:
05/29/2010 15:55 killeeer111#3
Quote:
Originally Posted by Reextion View Post
Und wo lernt man da was?

C&P , super! Tutorials sind dafür da um jemand was beizubringen, tut er bei dir nicht, keine Codeerklärung nix. Einfach nur wo man welchen Code einfügen soll.
:facepalm:
ok werde noch kommentare einfügen, dass ihr es besser versteht^^

EDIT

Kommentare im Code eingefügt, die werden eh in vb grün angezeigt^^
05/29/2010 16:29 Elektrochemie#4
naja die mysql daten direkt ins programm einzubinden ist sehr mutig.
05/29/2010 17:37 Jay Niize#5
eigentlich vom Grundaufbau sehr gut, gut wegen den Bildern verständlich und man geht davon aus, das man die Grundkenntisse kann! Sehr gute arbeit

#Added to List

Wenn du es da nicht haben willst bitte PN!

MFG Jusikid
05/29/2010 17:54 killeeer111#6
Quote:
Originally Posted by Jusikid View Post

Wenn du es da nicht haben willst bitte PN!
wer will es da denn nicht haben ;)
05/30/2010 14:49 *GuideMan*#7
Voll C&P Kopiert:
[Only registered and activated users can see links. Click Here To Register...]
05/30/2010 15:28 killeeer111#8
@Guideman
Ich guck mir das tut dort mal an ob das wirklich das selbe ist.

Edit: Hab mir das angeguckt, hat ähnlichkeit, aber habs ned von dort kopiert.
05/31/2010 08:03 Jay Niize#9
aber die Form und alles sieht alles komischer weise genauso aus!
05/31/2010 15:02 Cholik#10
Es sieht nicht nur ähnlich aus es sind sogar die selben Bilder, selbst der Code ist identisch.

Dieser Thread vs. fremdes Forum
[Only registered and activated users can see links. Click Here To Register...] [Only registered and activated users can see links. Click Here To Register...]

Quote:
Edit: Hab mir das angeguckt, hat ähnlichkeit, aber habs ned von dort kopiert.
Jo sondern von wo anders.


Das ist kein Tutorial. Es beschreibt nur wie man den Code zusammenkopiert, entweder du schreibst das um und erklärst den Code und sagst was was tut oder ich muss das closen.
05/31/2010 15:41 killeeer111#11
Quote:
Originally Posted by Walter Sobchak View Post
Es sieht nicht nur ähnlich aus es sind sogar die selben Bilder, selbst der Code ist identisch.

Dieser Thread vs. fremdes Forum
[Only registered and activated users can see links. Click Here To Register...] [Only registered and activated users can see links. Click Here To Register...]


Jo sondern von wo anders.


Das ist kein Tutorial. Es beschreibt nur wie man den Code zusammenkopiert, entweder du schreibst das um und erklärst den Code und sagst was was tut oder ich muss das closen.
ok werde es umschreiben

edit:

habs umgeschrieben, hoffe jetzt passts
06/02/2010 15:16 Intro~#12
ist das denn sicher?
06/02/2010 15:49 killeeer111#13
mit dem normalen editor kann man das passwort sicher nicht knacken ;)
sollte eigentlich sicher sein.
Wenn es dir nicht sicher ist, kannst du Username und Passwort auch in MD5 verschlüsseln, geht genau so wie beim Login
06/08/2010 20:12 SandMann016#14
das ist alles quatsch es war C&P von VBP und man kann mit jedem free .NET decompier die sql daten auslesen fals man da mehr drauf hatte hat man pech!
und die md5 sicherung finde ich unnötig hab ich in vbp auch schon gesagt..-.-
06/09/2010 18:45 killeeer111#15
hab die md5 sicherung eingebaut, das man das passwort nicht sehen kann ;)