Страница 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, меня бы за такой код учительница по программированию повесила бы )))
Зачем трижды запрашивать авторизацию в цикле?

когда можно просто трижды вызвать запрос и проверять в начале количество блокировок?
примерный алгоритм.
Проверить нет ли у пользователя блокировок.
Если да, то проверить как давно был последний заход.(если давно, то сбросить и продолжить если таймаут не проходит --> выход)
пароль верен?
Если да, то вход, сброс блокировок.
Если нет, то увеличиваем количество блокировок на 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
знаю глупый вопрос

но на 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 секунд:все пошло, но блокировка не происходит

Re: array и edit
Добавлено: 22.06.2015 14:51:28
alex208210
jenny писал(а):уже пыталась, не идет....
Добавлено спустя 1 минуту 56 секунд:все пошло, но блокировка не происходит

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