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

array и edit

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

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

Re: array и edit

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

Re: array и edit

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

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

Re: array и edit

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

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

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

Re: array и edit

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

Re: array и edit

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

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

Re: array и edit

СообщениеДобавлено: 22.06.2015 12: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 12:16:55
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 13:07:09
Лекс Айрин
alex208210, меня бы за такой код учительница по программированию повесила бы )))

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

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


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

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

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

Re: array и edit

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

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

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


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

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

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


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

Re: array и edit

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

Re: array и edit

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

Re: array и edit

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

Re: array и edit

СообщениеДобавлено: 22.06.2015 15:46:56
jenny
уже пыталась, не идет....

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

Re: array и edit

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

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


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