k245 wrote:
dazzleqq wrote:

Я понял, что username должно быть только на английском, кириллицу не воспринимает. Тогда у меня вопрос. Как добавить в встроенной форме пользователей текстовое поле и чтобы кнопка сохранить сохраняла данные из этого текстового поля?

Как добавить компоненты на форму логина: https://k245.ru/mvdb/autentifikatsiya.html
Было:
https://k245.ru/wp-content/uploads/2022/09/standartnaya-forma-logina.png
Стало:
https://k245.ru/wp-content/uploads/2022/09/izobrazhenie_2022-09-23_150246342.png
С кнопкой история такая: добавляете свою кнопку, с нужным обработчиком, в котором вызываете нажатие имеющейся кнопки.
А чтобы проще ориентироваться в имеющихся стандартных формах, рекомендую инструмент: https://k245.ru/mvdb/component-explorer.html
https://k245.ru/wp-content/uploads/2022/06/CpmponentExplorer.png

Спасибо, а как изменить шифрование при нажатии кнопки сохранить, в форме где добавляются или изменяются пользователи?

Я понял, что username должно быть только на английском, кириллицу не воспринимает. Тогда у меня вопрос. Как добавить в встроенной форме пользователей текстовое поле и чтобы кнопка сохранить сохраняла данные из этого текстового поля?

и что даже для встроенной таблицы _user подойдет Password_hash()? Учитывая что хэш хранится таким образом md5(password+username)?

k245 wrote:

md5(password+username)
Отсюда интересное следствие - после редактирования имени пользователя его пароль становится недействительным ))

Подскажите, может быть знаете. Как в PHP сделать проверку пароля при авторизации? Я пытаюсь так

$login = $data['login'];
$password = $data['password'];
$user = R::findOne('_user', 'username = ?', array($login));
if ($user) {
    // логин существует
    $hashed_password_from_db = $user->password;
    if (md5($password . $login) === $hashed_password_from_db) {
        // если пароль совпадает, то нужно авторизовать пользователя
        session_start();
        $_SESSION['logged_user'] = $user;
        header('Location: /');
        exit();
    } else {
        $errors[] = 'Неверно введен пароль!';
    }
} else {
    $errors[] = 'Пользователь с таким логином не найден!';
}

Но так не получается

k245 wrote:

md5(password+username)
Отсюда интересное следствие - после редактирования имени пользователя его пароль становится недействительным ))

Благодарю

k245 wrote:

SQLiteStudio вам в помощь. Заходите и меняете что вам там нужно )))
https://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=10004&download=0

https://sqlitestudio.pl

Каким методом хэшируется пароль? (md5(md5(password))?

Очень странно, попробовал дома точно также все подключить и ошибок нет. А на работе выходят вышеуказанные ошибки...

pavlenko.vladimir.v wrote:
dazzleqq wrote:

Добрый день. При подключении к MySQL Выходит ошибка #HY000Duplicate foreign key constraint name '_user_id__role'. Как ее устранить? Включены встроенные роли.

Вы случайно скриптом не добавляете новую запись при старте программы?
--

Повторяющееся имя ограничения внешнего ключа

Нет. Уже даже пробовал полностью данные удалять и заново подключать.
Так же не знаю, может это как то связанно...если пользователь  с ролью админ подключается, то все хорошо. А если не админ, то к базе не подключается и программа закрывается, сопровождая ошибкой, какой я так и не понял.
MySQL 8

Добрый день. При подключении к MySQL Выходит ошибка #HY000Duplicate foreign key constraint name '_user_id__role'. Как ее устранить? Включены встроенные роли.

10

(3 replies, posted in Russian)

Кто может скинуть образец (проект) (MySQL)? Пожалуйста.

Здравствуйте, кто подскажет, можно ли при запуске отчета через Excel сделать так, чтобы некоторые данные открывались на 2 (второй) странице Excel?

Hello, who can tell me if it is possible to make some data open on the 2nd (second) Excel page when running a report through Excel?
(Google translate)

12

(15 replies, posted in Russian)

Вот еще вариант

13

(15 replies, posted in Russian)

Можно и так (обновленный вариант Derek) big_smile:D:D
P.S. Возможно неправльно, но за то работает) (лучше конечно DateTimerPicker использовать и обновлять не кнопкой, а скриптом, дабы лишними кнопками не засорять форму)

k245 wrote:

Главная форма не меняется скриптом, только в режиме конструктора.
https://k245.ru/wp-content/uploads/2023/08/f8.png
https://k245.ru/mvdb/formy.html
Но вы можете при запуске приложения скрывать главную форму и отображать нужную вам в зависимости от роли.

Да, я читал и читаю ваши темы. И там было написан "Изменить или скрыть главное меню можно с помощью скриптов" и я подумал что можно с помощью скрипта изменить. Но я не правильно понял.

Доброй ночи всем. Помогите пожалуйста. Как с помощью скрипта изменить главную форму по умолчанию?

s := VarToStr(SQLExecute('SELECT COUNT(*) FROM _user WHERE username = ''' + application.User.Username + ''' AND id__role = 4;'));
if s = '1' then
begin
  frmPriemnaya.Show;
  Application.MainForm := frmPriemnaya; // Устанавливаем frmPriemnaya как главную форму
  Form1.Close;
end;
derek wrote:

Привет,
попробуй вот так
Derek.

Да, это то что нужно, спасибо!!!

17

(33 replies, posted in Russian)

derek wrote:

Привет,
Если я правильно понял, то возможно попробуйте так.
Derek.

Чуть чуть не то, но спасибо за ответ)

18

(6 replies, posted in General)

vovka3003 wrote:

Можно еще с виндой "поспорить", свои бордюры и элементы нарисовать:

https://i.imgur.com/KynxVqc.png

Можно пример?

Помогите пожалуйста. Есть TableGrid, в нем имеются кое какие записи. Нужно сделать так, чтобы при выборе записи из TableGrid данные отображались в поле Edit, вытягивая данные из таблицы базы данных.
Используя скрипт:

procedure Form1_TableGrid1_OnCellClick (Sender: TObject; ACol, ARow: Integer);
begin
    Form1_ProcessSelectedRecordNR;
end;

procedure Form1_ProcessSelectedRecordNR;
begin
        Form1.Edit3.Text := SQLExecute('SELECT vvv FROM dfg WHERE dfg.id='+Form1.TableGrid1.sqlValue); //
        Form1.Edit4.Text := SQLExecute('SELECT zzx FROM dfg WHERE dfg.id='+Form1.TableGrid1.sqlValue); //
end;


procedure Form1_TableGrid1_OnKeyDown(Sender: TObject; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
  case Key of
    VK_UP, VK_DOWN: // Обработка нажатия клавиш вверх и вниз
      begin
        Form1_ProcessSelectedRecordNR;
      end;
  end;
end;

,
работает корректно только когда выбираю запись мышкой, а если кнопками на клавиатуре (стрелками вверх или вниз), то данные отображаются с предыдущей записи, т.е. не правильно.

20

(33 replies, posted in Russian)

derek wrote:

Привет Dazzleqq
Несомненно, существует технически гораздо более совершенный способ сделать это, но я всегда выбирал простой вариант и жульничал!  big_smile
Однако я бы не рекомендовал этот вариант, если у вас большое количество записей — тогда я думаю, вам, вероятно, следует сделать это «правильным» способом.
Пожалуйста, посмотрите приложение.
Derek.

Спасибо, Derek! Еще вопрос, а вывести по мимо пользователя еще и должность его? Если можно, то покажите на Вашем примере. Спасибо.

21

(33 replies, posted in Russian)

Спасибо! А как в FastReport вывести? Что в запросе писать?

22

(33 replies, posted in Russian)

Добрый день, как с встроенной авторизацией получить информацию кто авторизировался в программе?
До того как начал использовать встроенную авторизацию, я пользовался авторизацией через скрипт и кто авторизировался в программе указывалось в скрипте в переменной:
var                                             
   sUser: string = '';
А сейчас выводит пустой текст

23

(7 replies, posted in Russian)

k245 wrote:
dazzleqq wrote:

Ещё раз добрый день, возникла такая необходимость, чтобы при редактировании записи фильтр был бы пустым, т.е. отключен, а при создании новой записи,  фильтр был бы включен. Как реализовать?

Добавить обработчики на отображение и закрытие формы редактирования

procedure UD_REDACT_OnClose (Sender: TObject; Action: string);
begin
  UD_REDACT.ComboBox7.dbFilter := ''; // по умолчанию фильтр снят
  UD_REDACT.ComboBox7.dbUpdate;
end;

procedure UD_REDACT_OnShow (Sender: TObject; Action: string);
begin
  if Action='NewRecord' then // если добавление новой записи, то
  begin // добавить фильтр
    UD_REDACT.ComboBox7.dbFilter := 'id_LS_STATUS = 1';
    UD_REDACT.ComboBox7.dbUpdate;
  end;
end;

Спасибо!

24

(7 replies, posted in Russian)

Ещё раз добрый день, возникла такая необходимость, чтобы при редактировании записи фильтр был бы пустым, т.е. отключен, а при создании новой записи,  фильтр был бы включен. Как реализовать?

derek wrote:

Привет Dazzleqq,
Во вложении 4 примера разных "Заставок" (в "Splash2" используйте кнопку чтобы изменить сообщение, скорость сообщения и продолжительность сообщения).
Может быть, это поможет.
Derek
.
In the attachment are 4 examples of different "Splash Screens" (in "Splash2", use the button to change the message, the speed of the message and the duration of the message).

Спасибо, derek!