Problem z wpisanym tekstem - sprawdza część a nie całość.

0

Witam, zrobiłem panel logowania w delphi. Wszystko działa pięknie, tylko że mam problem z porównaniem loginu wpisanego w polu Edit do loginów wypisanych na tablicy. Do tablicy pobiera mi loginy ze strony www, a gdy użytkownik wpiszę login do pola Edit, sprawdza czy pole Edit zgadza się z loginem na tablicy. Oto kod:

if Pos(login.Text, Tablica[1]) <> 0 then
  Tablica[2]:=(Tablica[1]);
  if Tablica[2]=('') then begin
  ShowMessage('Nie znaleziono podanego loginu w bazie!');
  end else begin
  ShowMessage('Znaleziono podany login w bazie!');

//tablica 1 - loginy użytkowników
//tablica 2 - login wpisany przez użytkownika

Program działa tak że użytkownik wpiszę login do pola Edit (login.Text), skopiuje wpisany tekst do tablicy nr. 2, oraz porówna go z loginami w tablicy nr. 1. Jeżeli wykryje wpisany login program odda nam odpowiedź pozytywną, jeżeli odwrotnie - negatywną.

Program polega na tym że jeżeli w tabeli nr. 1 jest lista użytkowników na której jest użytkownik - Scoti, a użytkownik wpiszę w polu Edit (login.Text) nazwę: "Sco", program odda nam odpowiedź pozytywną. Chciałbym przekształcić ten kod tak, że gdy użytkownik wpiszę "cały" login, dopiero program zwróci nam wartość pozytywną.

Proszę o pomoc,
Pozdrawiam,
Scoti.

0

pelsta, tablica, to jest właśnie tablica z nazwą "tablica". Możesz o tym poczytać w faqu delphi pod tym linkiem:

http://4programmers.net/Delphi/Tablice

Tablica[1] to tablica z loginami użytkowników w bazie na serwerze ftp
Tablica[2] przechwytuje login wpisany przez użytkownika w polu Edit (login.Text)

Błąd który próbuje naprawić prawdopodobnie leży w linijce:

if Pos(login.Text, Tablica[1]) <> 0 then
  Tablica[2]:=(Tablica[1]);
  if Tablica[2]=('') then begin
(...)

Niżej daję Ci jeszcze var z kodu tworzenia "tablicy":

(...)
Tablica: array[0..2] of String;
(...)

Deklaracja Tablicy nr. 1:

Tablica[1] := idHTTP1.Get('http://example.pl/logins.ini');  //strona została ukryta, logins.ini to plik z loginami użytkowników

Deklaracja Tablicy nr. 2:

Jest pusta aż do momentu kiedy użytkownik wpiszę login w polu Edit (login.Text). Następnie następuje porównanie tablicy nr. 2 do tablicy nr. 1. (sprawdzanie czy użytkownik istnieje).

0

Nie wiem po co używasz tutaj tablic i dlaczego piszesz o dwóch tablicach (tabela nr.1, tablica nr. 2).
Tablica[1] to nie jest tablica tylko string.
Skoro w pojedynczym stringu przechowujesz kilka loginów (pobranych z 'http://example.pl/logins.ini') to muszą one być oddzielone jakimiś separatorami.
Jeżeli występuje tam login 'Scoti', to zarówno Pos('Sco',Tablica[1]) jak i Pos('Scoti',Tablica[1]) dadzą taki sam wynik.
Zatem funkcja Pos nie nadaje się.
Zanim zaczniesz wyszukiwać loginy powinieneś je rozdzielić (Explode) do jakiejś tablicy. Następnie w pętli szukać czy któryś jej element ma wartość 'Scoti'.
Możesz też rozbić loginy do TStringList i zastosować metodę IndexOf.

0

Wiem, tak chyba powinno być. Tak jest źle? Wszystko działa tylko "nie" działa sprawdzanie pozycji wpisanego tekstu, więc nie wiem po co rozmawiamy o tablicach.

No właśnie ta twoja tablica nie działa tak jak ci się wydaje że działa. Ja bym to zadeklarował Tablica: array[1..2] of array of string; i potem parsował i wrzucał do odpowiednich elementów a na końcu sprawdzał.

0

Loginy w pliku logins.ini są oddzielone enterem. Dlatego skorzystałem z tablic gdyż wcześniej wszystkie loginy w bazie danych, loginy wpisane przez użytkownika były zapisywane w polach memo, przez co robiło to niezły syf w programie, więc wolałem to przekształcić na tablice. Nie wiem jak robić to na poszczególne tablice czy stringi, w tym momencie się zgubiłem.

I dodam jeszcze że Tablica[0] też jest wykorzystywana.

1

Chodzi o to, że nie przekształciłeś tego na tablice tylko wszystkie loginy rozdzielone, jak piszesz, enterami wrzuciłeś do jednego stringa. Problem "pocięcia" stringa na poszczególne loginy ostatnio był omawiany tutaj Delphi procedura Explode.
A jeżeli potrafiłeś te loginy wczytać do TMemo to tak samo potrafisz wczytać je do TStringList i już łatwo będzie można wykorzystać metodę IndexOf.

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