На форме для авторизации имеется два элемента edit (для пароля и для имя пользователя). При введении пароля более 3 раз одного и того же пользователя должна происходить блокировка этого пользователя. Подскажите пожалуйста как это сделать при помощи array. Заранее спасибо
array и edit
Модератор: Модераторы
array и edit
Всем привет!
На форме для авторизации имеется два элемента edit (для пароля и для имя пользователя). При введении пароля более 3 раз одного и того же пользователя должна происходить блокировка этого пользователя. Подскажите пожалуйста как это сделать при помощи array. Заранее спасибо
На форме для авторизации имеется два элемента edit (для пароля и для имя пользователя). При введении пароля более 3 раз одного и того же пользователя должна происходить блокировка этого пользователя. Подскажите пожалуйста как это сделать при помощи array. Заранее спасибо
-
alex208210
- постоялец
- Сообщения: 207
- Зарегистрирован: 12.05.2010 13:16:51
используй цикл for и переменные a,b.
alex208210 писал(а):используй цикл for и переменные a,b.
вы что, какие a,b. Международный трибунал в гааге постановил, что блокировать пользователя, можно только переменными x, y. Все остальное признано негуманным по отношению к блокируемому пользователю.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
alex208210, я бы не использовал конкретно в этой ситуации for лучше repeat ... until (неизвестно сколько раз потребуется вводить пароль).
А элементом массива лучше стать запись в которой есть имя пользователя, пароль(или его хеш) количество попыток регистрации и поле блокировки.
Хотя задача странновато выглядит... Имеется в виду количество удачных, неудачных попыток авторизации или просто попыток захода?
А элементом массива лучше стать запись в которой есть имя пользователя, пароль(или его хеш) количество попыток регистрации и поле блокировки.
Хотя задача странновато выглядит... Имеется в виду количество удачных, неудачных попыток авторизации или просто попыток захода?
количество неудачных попыток авторизации
serg_iv писал(а):можно только переменными x, y
<irony>
Что за сексизм? Вы в курсе, что в евросоюзе уже 6 полов? И не в кое случае нельзя пользоваться переменными черного цвета, это может быть расценено, как дискриманация по рассовому признаку.
</irony>
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 раз все равно включается блокировка. Вот я и подумала что нужен массив который сохраняет одного определенного пользователя при введении не верного пароля.
begin
Form2.Visible := False;
Form2.ShowModal;
end
else
begin
loginfailed:= loginfailed +1;
if loginfailed >= 3 then
begin
showmessage('авторизация не удалась');
form2.Close;
end;
end;
вот код который я написала, все хорошо функционирует. Да вот только мне бы хотелось чтобы блокировка действовала только на одного пользователя, а тут получается если я каждый раз ввожу разных пользователей с неверным паролем на 3 раз все равно включается блокировка. Вот я и подумала что нужен массив который сохраняет одного определенного пользователя при введении не верного пароля.
-
alex208210
- постоялец
- Сообщения: 207
- Зарегистрирован: 12.05.2010 13:16:51
Что за сексизм? Вы в курсе, что в евросоюзе уже 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
Последний раз редактировалось alex208210 22.06.2015 14:48:08, всего редактировалось 4 раза.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
alex208210, меня бы за такой код учительница по программированию повесила бы )))
Зачем трижды запрашивать авторизацию в цикле?
когда можно просто трижды вызвать запрос и проверять в начале количество блокировок?
примерный алгоритм.
Проверить нет ли у пользователя блокировок.
Если да, то проверить как давно был последний заход.(если давно, то сбросить и продолжить если таймаут не проходит --> выход)
пароль верен?
Если да, то вход, сброс блокировок.
Если нет, то увеличиваем количество блокировок на 1.
И все же я настаиваю, что for в этом случае неприемлем. Пользователь может быть и первым в массиве.
Зачем трижды запрашивать авторизацию в цикле?
примерный алгоритм.
Проверить нет ли у пользователя блокировок.
Если да, то проверить как давно был последний заход.(если давно, то сбросить и продолжить если таймаут не проходит --> выход)
пароль верен?
Если да, то вход, сброс блокировок.
Если нет, то увеличиваем количество блокировок на 1.
И все же я настаиваю, что for в этом случае неприемлем. Пользователь может быть и первым в массиве.
-
alex208210
- постоялец
- Сообщения: 207
- Зарегистрирован: 12.05.2010 13:16:51
Лекс Айрин писал(а):alex208210, меня бы за такой код учительница по программированию повесила бы )))
Зачем трижды запрашивать авторизацию в цикле? когда можно просто трижды вызвать запрос и проверять в начале количество блокировок?
примерный алгоритм.
Проверить нет ли у пользователя блокировок.
Если да, то проверить как давно был последний заход.(если давно, то сбросить и продолжить если таймаут не проходит --> выход)
пароль верен?
Если да, то вход, сброс блокировок.
Если нет, то увеличиваем количество блокировок на 1.
И все же я настаиваю, что for в этом случае неприемлем. Пользователь может быть и первым в массиве.
код изменен, первоначальный был попыткой адаптировать существующий. Когда увидел что ерунда получается, написал занова. Теперь популяция пингвинов будет цела.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
alex208210, да ну ... хомячки уже начали дохнуть со смеха.
знаю глупый вопрос
но на if a[i,2]>=3 у меня еrror -> Error: Incompatible types: got "ShortInt" expected "AnsiString". Вроде не должно тут быть ошибки...
-
alex208210
- постоялец
- Сообщения: 207
- Зарегистрирован: 12.05.2010 13:16:51
замени if a[i,2]>=3 на if strtoint(a[i,2])>=3
уже пыталась, не идет....
Добавлено спустя 1 минуту 56 секунд:
все пошло, но блокировка не происходит
Добавлено спустя 1 минуту 56 секунд:
все пошло, но блокировка не происходит
-
alex208210
- постоялец
- Сообщения: 207
- Зарегистрирован: 12.05.2010 13:16:51
jenny писал(а):уже пыталась, не идет....
Добавлено спустя 1 минуту 56 секунд:
все пошло, но блокировка не происходит
не понятно что у вас в коде является блокировкой.. в моем примере с пингвинами.. это form2.close; (закрытие формы авторизации)
