Hallo,
ich möchte gerne ein Programm schreiben, dass einen Loginbereich hat. Die PW’s und Namen sind in einer MySQL Datenbank Tabelle auf einem Webserver. Ich habe jetzt 2 Textboxen tbnamen und tbpasswort und einen Button. Klickt man darauf soll er sich mit der Datenbank connecten, in der Tabelle „member“ nach dem eingegebenen Namen von tbname suchen und wenn dieser in der Tabelle drin steht überprüfen ob das PW aus tbpasswort mit dem aus der Datenbank identisch ist. Sollte es identisch sein wird ein Wert auf true gesetzt, falls nicht sagt ein Label „Falscher Name oder Passwort“.
So, wie krieg ich das hin? Bis jetzt habe ich folgenden code:
Public oConn As New MyVbQL.MYSQL\_CONNECTIONClass
Public oRs As MyVbQL.MYSQL\_RS
Public Const sServer As String = "server"
Public Const sUser As String = "name"
Public Const sPass As String = "pw"
Public Const sDB As String = "datenbank"
Public Function connect()
oConn.OpenConnection(sServer, sUser, sPass, sDB)
End Function
' Fehlerausgabe bei Verbindungsfehler
Public Function MySQL\_Error() As Boolean
With oConn.Error
If .Number = 0 Then Exit Function
MsgBox("Error " & .Number & ": " & .Description)
MySQL\_Error = True
End With
End Function
Private Sub Button3\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
connect()
oRs = oConn.Execute("select name from member where name = 'tbname'")
End Sub
Bei den letzten Zeilen hab ich leider keine Ahnung. Hab noch nie vorher mit MySQL Abfragen gearbeitet.
Wäre net wenn ihr mir helfen könntet,
Flaiker 
Hallo Flaiker,
Da ich idR c# nutze ggfs. übersetzen!
mal im Groben:
public bool success
Private Sub Button3\_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button3.Click
connect()
oRs = oConn.Execute("select name from member where
name = '"&sUser &"' and pw = '"&sPass&"'")
if oRs is nothing then
success = false
else
success = true
end if
End Sub
Wird also ein Datensatz gefunden, in dem sUser und sPass den dort vorhandenen Daten entspechen, also die Berechtigung stimmt, wird oRs einen Datensatz enthalten. (Was ist oRs für ein Typ?) Dann kann man des Inhalts von oRs eine Variable setzen. Oder besser eine Function implementieren, die bool zurückgibt.
Ich bin davon ausgegangen, dass die beiden vars die Eingaben des Users beinhalten.
Noch eine Anmerkung:
Damit du auch später sagen kannst, ob der User legitimiert ist muss man sich das merken. Eine Weiterleitung auf die Seiten die nur dann sichtbar ist nützt nichts.
Normalerweise benutzt man dazu Session-Objekte oder htaccess (hoffe das heißt so, das letztere kenne ich garnicht …)
mfg
Dirk.Pegasus
Hallo Dirk!
Bitte Anfänger nicht gleich auf den falschen Weg bringen. Das Zusammenbasteln von SQL-Statements durch Aneinanderhängen von ungeprüften Benutzereingaben ist ein Hauptgrund für unsichere Software (Stichwort: SQL Injection).
Daher unbedingt mit parametrierten Abfragen arbeiten, so kann ein Angreifer durch geschickt gewählte Eingaben keinen Schaden anrichten.
Außerdem ist das Ablegen von Klartextpasswörtern in der Datenbank, wie in Deiner Lösung gezeigt, ebenfalls sehr verpönt.
Die „Best Practise“ in diesem Bereich ist das Speichern/Verwenden eines Passwort-Hashes und eines Salt-Wertes, um auch gegen sog. Dictionary-Attacks gewappnet zu sein (also Angriffe mit „Wörterbüchern“, in denen die Hashes bekannter Verfahren zu Passwörtern abgelegt sind).
Insofern ist der Zugriffsschutz immer nicht trivial und, wenn er schlecht programmiert ist, noch schlimmer als gar kein Zugriffsschutz, weil dem Benutzer eine Sicherheit vorgegaukelt wird, die nicht existiert.
Gruß,
Martin
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo!
Ich gehe mal davon aus, dass es sich um eine ASP.NET Anwendung handelt, oder?
Dort gibt es standardisierte Wege, ein Login zu realisieren (z.B. ein mitgeliefertes Webcontrol „Login“ in der Toolbox), die die Daten auch sicher ablegen/verwalten.
Belies’ Dich mal zum Thema „Forms Authentication“ mit ASP.NET, da findest Du jede Menge Dokumentation zum Thema.
Für MySQL gibt es unter http://www.codeproject.com/KB/database/mysqlmembersh… einen sog. MembershipProvider, den man dafür braucht.
Gruß,
Martin
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Martin,
Danke für den Hinweis. Ja, man denkt oft zu kurz. Ich arbeite in einem „geschützten“ Umfeld und mach mir daher selten darüber Gedanken.
Außerdem denke ich auch (leider) immer, dass der Fragende weiß was er da tut. Wenn man dann mal nachfragt (nicht dieser Thread) ist man oft erstaunt, was das eigentliche Ziel der Aktion war.
mfg
Dirk.Pegasus
Hallo Martin,
Hi!
Danke für den Hinweis. Ja, man denkt oft zu kurz. Ich arbeite
in einem „geschützten“ Umfeld und mach mir daher selten
darüber Gedanken.
Du Glücklicher! Leider ist die Welt da draußen aber bööööse… 
Außerdem denke ich auch (leider) immer, dass der Fragende weiß
was er da tut.
Ja, den Fehler mache ich auch öfter mal 
Und oft stellt sich dann heraus, dass irgendwelche Codeschnipsel aus dem Internet zusammenkopiert werden, ohne dass der Betreffende weiss, was da eigentlich passiert. (Auch wenn ich jetzt besser die Asbest-Jacke anziehen sollte, aber ich habe einen eindeutigen Zusammenhang zwischen verwendeter Programmiersprache und dieser Art der Copy&:stuck_out_tongue_winking_eye:aste Programmierung gefunden…)
Wenn man dann mal nachfragt (nicht dieser
Thread) ist man oft erstaunt, was das eigentliche Ziel der
Aktion war.
mfg
Dirk.Pegasus
Servus,
Martin
Danke für die Antworten.
Funktionieren tut es leider trotzdem nicht. Immer wenn ich mich mit einem Login einlogge welches nicht in der Datenbank ist sagt er mir trotzdem ich wäre eingelogged!? Mein script:
Public oConn As New MYSQL_CONNECTIONClass
Public oRs As MYSQL_RS
’ Verbindungsdaten
Public Const sServer As String = „server“
Public Const sUser As String = „name“
Public Const sPass As String = „pw“
Public Const sDB As String = „db“
’ Datenbank verbinden
Public Function connect()
oConn.OpenConnection(sServer, sUser, sPass, sDB)
’ Statusabfrage für Verbindung
If (oConn.State = MYSQL_CONNECTION_STATE.MY_CONN_CLOSED) Then
’ Falls Verbindung nicht geöffnet, Fehlerangabe!
MySQL_Error()
End If
End Function
’ Fehlerausgabe bei Verbindungsfehler
Public Function MySQL_Error() As Boolean
With oConn.Error
If .Number = 0 Then Exit Function
MsgBox("Error " & .Number & ": " & .Description)
MySQL_Error = True
End With
End Function
Dim eingelogged As Boolean
Dim einloggenstatustext As String
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
einloggenstatustext = „“
connect()
If MySQL_Error() = False Then
oRs = oConn.Execute(„select name from member where name = ‚tbname‘ and pw = ‚tbpasswort‘“)
If oRs Is Nothing Then
eingelogged = False
leinloggenfehler.Text = „Name oder Passwort falsch“
Else
eingelogged = True
einloggenstatustext = „Eingelogged“
End If
leingelogged.Text = „Status“ + einloggenstatustext
End If
End Sub
Ich bekomme auch keine Fehermeldung.
Weiß wer ne Antwort?
-Flaiker