Co dokladnie zwraca contains i jak poprawic ten kod?

0

Witam wszystkim. Mam problem z symulacja logowania. Oczywiscie jest ona bez zadnych zabezpieczen i szyfrowan jest to dopiero prototyp... Mam problem ze sprawdzaniem poprawnosci hasla. Pobieram login i haslo z textboxa i password boxa. Jednak program wyswietla mi zalogowano tylko gdy login jest poprawny. W przypadku nie poprawnosci hasla ku mojemu zdziwieniu jest zalogowano. Ktos jakies pomysly? Ponizej kod:

    public bool Sprawdzam(string Login,string Haslo, StreamReader Odczyt,bool SprawdzamLogin,bool SprawdzamHalso)
        {
            using(Odczyt)
            {
                if (SprawdzamLogin == true || SprawdzamHalso == true)
                {
                    MessageBox.Show("Zalogowano");
                    return true;
                }
                else if (SprawdzamLogin == false && SprawdzamHalso == false)
                {
                    return false;
                }
                else
                {
                    return false;
                }
            }
        }
         private void zaloguj_Click(object sender, RoutedEventArgs e)
        {
            string Login = this.txtLogowanie.Text;
            string Haslo = this.boxHaslo.Password;
            if (!File.Exists(Login + ".txt"))
            {
                MessageBox.Show("Nie ma takiego użytkownika");
            }
            if (File.Exists(Login + ".txt"))
            {
                StreamReader Odczyt = new StreamReader(Login + ".txt");
                string Linia = Odczyt.ReadLine();
                bool SprawdzamLogin = Linia.Contains(Login);
                bool SprawdzamHaslo = Linia.Contains(Haslo);


                if (uzytkownik.Sprawdzam(Login, Haslo, Odczyt, SprawdzamLogin, SprawdzamHaslo) == true)
                {
                    this.Hide();
                    Window1 Okno = new Window1();
                    Okno.Show();
                }
                else
                {
                    MessageBox.Show("Nie poprawne dane logowania");
                }
            }

        }
0

Przecież sam napisałeś w warunku: jeśli SprawdzamLogin jest prawdziwe LUB SprawdzamHasło jest prawdziwe.

Poza tym, odnośnie Twojej funkcji Sprawdzam:

  1. Po co Ci parametry Login, Haslo oraz Odczyt, skoro z nich w ogóle nie korzystasz?
  2. Nie pisz costam == true, pisz po prostu costam (podobnie jak nie costam == false, tylko !costam).
  3. Funkcja powinna robić jedną rzecz, Twoja robi dwie: sprawdza poprawność oraz wypisuje coś na wyjście, podczas gdy powinna tylko sprawdzać (jak zresztą brzmi jej nazwa).
  4. Prawidłowy nagłówek funkcji powinien być w rodzaju bool CheckCredentials(string login, string password).
0

Z tym sie zgodze jednak blad jest gdzie indziej. Funkcja contains sprawdza czy istnieje dowolny znak. Wiec jezeli podam chociaz jeden znak taki sam w dobrej kolejnosci to zwroci prawde. MAsz moze pomysl jak to objesc, albo skorzystac z innej funkcji?

0

Nie, problem jest na wielu płaszczyznach - przede wszystkim w Twojej dziwacznej funkcji, a drugorzędnie... cóż... faktycznie wpisanie w Google c# comparing strings nie zwraca żadnych wyników.

0

Zastanawiam sie dlaczego na tego typu forach tacy eksperci jak ty nie potrafia ukierunkowac we wlasciwy sposob tylko zachowuja sie jakby byli nie wiadomo kim. Nie znam cie i nie chce oceniac, ale te sarkastyczne odpowiedzi mozesz sobie wsadzic gleboko gdzies. Nie jestem ekspertem dlatego sie pytam, raczej amator ze mnie. Dlatego szukam wiedzy i rady u lepszych - proste.

0

Przecież wskazałem Ci dokładnie problemy w Twoim kodzie.
O Google wspomniałem, abyś na przyszłość wiedział, że najpierw powinno się szukać, a dopiero potem pytać na forum - nie ma nic złego w Twoim temacie, ponieważ rzecz jasna nie wiedziałeś co jest w Twoim kodzie nieprawidłowe i to jest naturalne, lecz Twój późniejszy post z MAsz moze pomysl jak to objesc, albo skorzystac z innej funkcji? już jawnie daje do zrozuimienia, że nawet nie spróbowałeś odszukać rozwiązania w internecie.

0

Co zwraca Contains (google: c# string contains):
https://msdn.microsoft.com/pl-pl/library/dy85x1sa(v=vs.110).aspx
http://csharp.net-informations.com/string/csharp-string-contains.htm

Jak poprawić ten kod:
W wypadku takich pytań możesz ich mieć wiele (chyba że ktoś zrobi wszystko za Ciebie).
Pomocna może być tutaj znajomość debuggera:

0

Jeśli tekst będzie:
login:haslo
a Login:
i
a sprawdzasz tak:

tekst.Contains(Login)

to będzie prawda, bo tekst zawiera znak i

jeśli masz zapisane dane w taki sposób:
login:hasło
to podziel to używając dane[] = linia.Split(':')
a później użyj:

(dane[0].Equals(Login) && dane[1].Equals(Password))

(jeśli dlugosc tablicy == 2 możesz jeszcze dodać przed tym)

1 użytkowników online, w tym zalogowanych: 0, gości: 1