Во многих программах используются роли и личные кабинеты для них. Эта задача, столь популярная и типовая, что многие программисты делают её на лету. В целях закрепления навыков решил написать небольшую статью на эту тему.
Сам алгоритм я сформулировал для себя так
…Проверки…
1.Искать введенный логин в БД, если не нашли, то выйти из алгоритма
2. Сопоставить пару логин-пароль, если пара совпадает, то следующее действие, иначе выход
3. Какое-то действие, например открытие окна, страницы, поздравление со входом и так далеее
Под проверками я понимаю, что поле не пустое, поле содержит или не содержит такие-то символы и так далее…
Практика
База данных. Создадим БД из 1 таблицы users, например так
Заполним её двумя строками – админом и пользователем.
Форма авторизации.
Датамодуль для формы авторизации
Я делаю подключение к БД при помощи технологиии FireDAC, поэтому здесь такой набор компонентов. В FDQuery_Users написан вот такой запрос в свойстве SQL
1 |
select Login,Password from users |
Кнопка Войти
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
procedure TLoginForm.Button1Click(Sender: TObject); begin //Если поле пустое - выходим if leLogin.Text='' then exit; //Готовим и открываем множество с логинами, паролями из базы DataModule1.FDQuery_Users.SQL.Clear; DataModule1.FDQuery_Users.SQL.Add( 'select*from users where Login=:Login'); DataModule1.FDQuery_Users.Params.ParamByName('Login').AsString:= trim(leLogin.Text); DataModule1.FDQuery_Users.Open; //Если логина нет - выходим, иначе продолжаем if DataModule1.FDQuery_Users.IsEmpty=true then begin showmessage('Пара логин/пароль не совпадает'); DataModule1.FDQuery_Users.Close; exit; end else //Проверяем, совпадает ли он с паролем if DataModule1.FDQuery_Users.FieldByName('Password').AsString= trim(lePassword.Text) then begin showmessage('Ура! Система Вас узнала! Вы админ или пользователь!'); end else begin showmessage('Пара логин/пароль не совпадает'); DataModule1.FDQuery_Users.Close; exit; end; end; |
Вот наш результат