2016-09-27 6 views
0

Schwierigkeiten beim Erstellen einer Anmeldung aus einer Textdatei-Datenbank. Die Informationen müssen manuell in die Textdatei eingegeben werden, bevor sie funktioniert ... siehe meinen Code unten für das Formular. Es lässt mich nicht einloggen.Login-Formular - funktioniert nicht

Public Class UserLogin 
    Private PWD As String 
    Public User As User 
    Public Users As List(Of User) = New List(Of User) 

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
     Me.Close() 
    End Sub 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Try 

      If isValidData() Then 

       If isValidUser() Then 
        MessageBox.Show("Login Successful") 
        Form2.Show() 
        Me.Hide() 

       Else 
        MessageBox.Show("Incorrect Username or password") 
       End If 
      End If 


     Catch ex As Exception 
      MessageBox.Show(ex.Message & vbCrLf & vbCrLf & ex.GetType.ToString & vbCrLf & vbCrLf & ex.StackTrace, "User Does not Exist") 

     End Try 

    End Sub 
    Private Function isValidData() As Boolean 

     Return Validator.IsPresent(TextBox1, "Username") AndAlso 
     Validator.IsPresent(TextBox2, "Password") 

    End Function 
    Private Function isValidUser() As Boolean 

     Return UserDB.ValidateUser("Username", "Password") 


    End Function 
    Public Sub setPath(cwd As String) 
     PWD = cwd 
    End Sub 
End Class 

Benutzerklasse unter:

Public Class User 
    Public Sub New() 

    End Sub 
    Public Sub New(Username As String, Password As String) 
     Me.Username = Username 
     Me.Password = Password 


    End Sub 

    Public Property Username As String 
    Public Property Password As String 



    Public Function GetDisplayText(sep As String) As String 
     Dim text As String = Username & sep & Password 
     Return text 

    End Function 
End Class 

UserDB Klasse Below

Imports System.IO 

Public Class UserDB 
    Private Const Databasename = "C:\Depreciate\Users.txt" 
    Public User As New User 
    Public Shared Users As List(Of User) = New List(Of User) 


    Public Shared Function GetUsers(Dir As String) As List(Of User) 
     Dim Users As New List(Of User) 
     Dim textIn As New StreamReader(
      New FileStream(Databasename, FileMode.OpenOrCreate, FileAccess.Read)) 



     Do While textIn.Peek <> -1 
      Dim row As String = textIn.ReadLine 
      Dim columns As String() = row.Split(CChar(",")) 
      Dim User As New User 
      User.Username = columns(0) 
      User.Password = columns(1) 
      Users.Add(User) 

     Loop 
     textIn.Close() 


     Return Users 
    End Function 
    Public Shared Function ValidateUser(username As String, password As String) As Boolean 

     Dim Validated = False 

     For Each userEntry As User In Users 


      If username = userEntry.Username AndAlso password = userEntry.Password Then 
       Validated = True 
       Exit For 
      End If 
     Next 
     Return Validated 


    End Function 


End Class 

Antwort

0

sieht aus wie Sie alle Benutzernamen und Passwörter zu den Saiten "Benutzername" und "Passwort" durch den Aufruf zu vergleichen:

Return UserDB.ValidateUser("Username", "Password") 

in isValidUser. Wahrscheinlich sollten Sie den tatsächlichen Benutzernamen und das Passwort, das der Benutzer eingegeben hat, lieber weitergeben?

0

Es gibt ein paar Probleme in Ihrem Code: Zuerst kann ich nirgends den Anruf an UserDB.GetUsers sehen, der die Liste der Benutzer aus der Datei initialisieren sollte. Aber auch vorausgesetzt, dass Sie den Anruf an einem anderen Ort getätigt haben, gibt es ein anderes Problem in dieser Methode.

Diese Zeile innerhalb der GetUsers Methode erstellt eine neue Variable vom Typ List (Of Benutzer) und nennen Sie es mit dem gleichen Namen des gemeinsam benutzte man effektiv die man auf der globalen Klassenstufe erklärt versteckt

Dim Users As New List(Of User) 

Dann Ihr Code wird fortgesetzt und füllt eine Variable mit dem Namen Benutzer, aber diese Variable ist nicht die gemeinsame Klasse, die auf globaler Klassenebene deklariert ist. Wenn Sie Ihren Benutzernamen und Ihr Passwort in der gemeinsam genutzten Variablen suchen, finden Sie natürlich nichts.

Entfernen Sie einfach die Zeile ein und lassen Sie den Anruf GetUsers die gleiche Variable in der Prüfung verwendet füllen

(Natürlich habe ich auch davon ausgehen, dass, wenn Sie UserDB.ValidateUser nennen Sie eine tatsächliche Benutzernamen und ein Passwort übergeben und nicht die Platzhalterzeichenfolge, die Sie im obigen Code verwenden)

+0

Dank buddddd bekam es !!!!!! Diese Zeile wurde entfernt und eine Zeile innerhalb der Button-Klick-Funktion erstellt, die die Benutzer erhält. –

+0

Da Sie ein neuer Benutzer der Website bin, empfehle ich, lesen Sie [Wie funktioniert die Annahme einer Antwort funktioniert] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) dann Sie kann die Antwort wählen, die Ihnen am besten geholfen hat, Ihr Problem zu lösen. Sie können auch Antworten auf Ihre vorherigen Fragen überprüfen – Steve

Verwandte Themen