Страница 1 из 2

array и edit

Добавлено: 21.06.2015 21:21:19
jenny
Всем привет!

На форме для авторизации имеется два элемента edit (для пароля и для имя пользователя). При введении пароля более 3 раз одного и того же пользователя должна происходить блокировка этого пользователя. Подскажите пожалуйста как это сделать при помощи array. Заранее спасибо :-)

Re: array и edit

Добавлено: 21.06.2015 22:05:02
alex208210
используй цикл for и переменные a,b.

Re: array и edit

Добавлено: 22.06.2015 09:09:13
serg_iv
alex208210 писал(а):используй цикл for и переменные a,b.

вы что, какие a,b. Международный трибунал в гааге постановил, что блокировать пользователя, можно только переменными x, y. Все остальное признано негуманным по отношению к блокируемому пользователю.

Re: array и edit

Добавлено: 22.06.2015 09:42:05
Лекс Айрин
alex208210, я бы не использовал конкретно в этой ситуации for лучше repeat ... until (неизвестно сколько раз потребуется вводить пароль).

А элементом массива лучше стать запись в которой есть имя пользователя, пароль(или его хеш) количество попыток регистрации и поле блокировки.

Хотя задача странновато выглядит... Имеется в виду количество удачных, неудачных попыток авторизации или просто попыток захода?

Re: array и edit

Добавлено: 22.06.2015 10:52:25
jenny
количество неудачных попыток авторизации

Re: array и edit

Добавлено: 22.06.2015 10:53:53
MiniQ
serg_iv писал(а):можно только переменными x, y

<irony>
Что за сексизм? Вы в курсе, что в евросоюзе уже 6 полов? И не в кое случае нельзя пользоваться переменными черного цвета, это может быть расценено, как дискриманация по рассовому признаку.
</irony>

Re: array и edit

Добавлено: 22.06.2015 11:10:26
jenny
if (username=trim(edit1.Text)) and (pass=trim(maskedit1.Text)) then
begin
Form2.Visible := False;
Form2.ShowModal;
end
else
begin
loginfailed:= loginfailed +1;
if loginfailed >= 3 then
begin
showmessage('авторизация не удалась');
form2.Close;
end;
end;

вот код который я написала, все хорошо функционирует. Да вот только мне бы хотелось чтобы блокировка действовала только на одного пользователя, а тут получается если я каждый раз ввожу разных пользователей с неверным паролем на 3 раз все равно включается блокировка. Вот я и подумала что нужен массив который сохраняет одного определенного пользователя при введении не верного пароля.

Re: array и edit

Добавлено: 22.06.2015 11:29:44
alex208210
Что за сексизм? Вы в курсе, что в евросоюзе уже 6 полов? И не в кое случае нельзя пользоваться переменными черного цвета, это может быть расценено, как дискриманация по рассовому признаку.

Все вышеуказанные проблемы решаются зарезервированной директивой putin в теле цикла. Так же для реализации блокировки пользователя можно использовать сторонние американские библиотеки tolerantkill.pas В них блокировка пользователей толерантна ко всем, не имеет половых, рассовых и прочих различий так как юзер блокируется по ключу "каракатица"

Добавлено спустя 12 минут 49 секунд:
jenny писал(а):вот код который я написала, все хорошо функционирует. Да вот только мне бы хотелось чтобы блокировка действовала только на одного пользователя, а тут получается если я каждый раз ввожу разных пользователей с неверным паролем на 3 раз все равно включается блокировка. Вот я и подумала что нужен массив который сохраняет одного определенного пользователя при введении не верного пароля.


вот реализация кода с циклом for и переменными a,b

Код: Выделить всё

a: array[1..100,1..2] of string;
b:integer;

b:=0;
if (username=trim(edit1.Text)) and (pass=trim(maskedit1.Text)) then
begin
b:=0;
for i:=1 to 100 do begin a[i,1]:=''; a[i,2]:=''; end;
Form2.Visible := False;
Form2.ShowModal;
end
else
begin

for i:=1 to b do
 begin {putin_mode}
 
  if a[i,1]=edit1.Text then
   begin
    loginfailed:= strtoint(a[i,2]) +1;
    a[i,2]:=inttostr(loginfailed);
    showmessage('авторизация не удалась');
    if strtoint(a[i,2])>=3 then begin a[i,2]:='1'; form2.Close; end;
    exit;
   end;   
   
 end;

 b:=b+1;
 a[b,1]:=edit1.Text;
 a[b,2]:='1'; 
 showmessage('авторизация не удалась');

end;



p.s поправил код v.2

Re: array и edit

Добавлено: 22.06.2015 12:07:09
Лекс Айрин
alex208210, меня бы за такой код учительница по программированию повесила бы )))

Зачем трижды запрашивать авторизацию в цикле? :oops: :oops: :oops: когда можно просто трижды вызвать запрос и проверять в начале количество блокировок?

примерный алгоритм.


Проверить нет ли у пользователя блокировок.
Если да, то проверить как давно был последний заход.(если давно, то сбросить и продолжить если таймаут не проходит --> выход)

пароль верен?
Если да, то вход, сброс блокировок.
Если нет, то увеличиваем количество блокировок на 1.

И все же я настаиваю, что for в этом случае неприемлем. Пользователь может быть и первым в массиве.

Re: array и edit

Добавлено: 22.06.2015 12:09:30
alex208210
Лекс Айрин писал(а):alex208210, меня бы за такой код учительница по программированию повесила бы )))

Зачем трижды запрашивать авторизацию в цикле? когда можно просто трижды вызвать запрос и проверять в начале количество блокировок?

примерный алгоритм.


Проверить нет ли у пользователя блокировок.
Если да, то проверить как давно был последний заход.(если давно, то сбросить и продолжить если таймаут не проходит --> выход)

пароль верен?
Если да, то вход, сброс блокировок.
Если нет, то увеличиваем количество блокировок на 1.

И все же я настаиваю, что for в этом случае неприемлем. Пользователь может быть и первым в массиве.


код изменен, первоначальный был попыткой адаптировать существующий. Когда увидел что ерунда получается, написал занова. Теперь популяция пингвинов будет цела.

Re: array и edit

Добавлено: 22.06.2015 12:29:11
Лекс Айрин
alex208210, да ну ... хомячки уже начали дохнуть со смеха.

Re: array и edit

Добавлено: 22.06.2015 14:22:47
jenny
знаю глупый вопрос :oops: но на if a[i,2]>=3 у меня еrror -> Error: Incompatible types: got "ShortInt" expected "AnsiString". Вроде не должно тут быть ошибки...

Re: array и edit

Добавлено: 22.06.2015 14:44:14
alex208210
замени if a[i,2]>=3 на if strtoint(a[i,2])>=3

Re: array и edit

Добавлено: 22.06.2015 14:48:52
jenny
уже пыталась, не идет....

Добавлено спустя 1 минуту 56 секунд:
все пошло, но блокировка не происходит :-D

Re: array и edit

Добавлено: 22.06.2015 14:51:28
alex208210
jenny писал(а):уже пыталась, не идет....

Добавлено спустя 1 минуту 56 секунд:
все пошло, но блокировка не происходит :-D


не понятно что у вас в коде является блокировкой.. в моем примере с пингвинами.. это form2.close; (закрытие формы авторизации)