Как запомнить пользователя, если он заполнил и отправил все формы?

Всем привет.

На сайте необходимо реализовать 3 формы, которые пользователь должен в течение 1 года отправить.

1 форма (FormIt) — 1 страница (ресурс). Как вывести чанк «Спасибо, вы уже заполняли эту форму 06.12.2021.», если пользователь уже заполнял эту форму?

По какому критерию запоминать, что форма уже была отправлена?

Пока в голову приходит что-то вроде такой схемы:
1. Хранить все формы с помощью сниппета FormIt2db
2. В каждой форме добавить 3 скрытых инпута: ID формы (тут можно вручную прописать), ID залогиненого пользователя ({$_modx->user.id}), текущая дата в UNIX формате ({time()}). Все отправленные формы сохраняем в отдельной таблице.
3. Разработать сниппет, который перед выводом форм будет проверять в базе наличие ID формы + ID пользователя НЕ пусто, то показываем чанк с сообщением.

Я правильно думаю или заморочено?

Буду рад рекомендациям.
Anton Erin
06 декабря 2021, 16:47
modx.pro
202
0

Комментарии: 8

Роман
07 декабря 2021, 10:11
+1
Добавлять поля к форме, ID формы, ID пользователя, Дата заполнения. Либо расширить таблицу:
formit_forms(так наверно быстрее будет поиск, если еще индекс сделать).
Перед отправкой проверять на эти параметры, написав свой хук.
    Наумов Алексей
    07 декабря 2021, 10:13
    +1
    В целом правильно… только вот вопрос, FormIt2db хранит данные не в json формате случайно? Поиск вы потом как будете по таблице делать?
    Вместо скрытых полей — можно prehook сделать и добавлять к данным информацию о пользователе, текущем времени.
      Anton Erin
      07 декабря 2021, 13:10
      0
      Привет.
      Спасибо за ответ.

      FormIt2db, оказывается, создает автоматически, если его еще нет, xPDO объект, папку со схемами, моделью.
      В базе делаешь кастомную табличку с этими тремя полями и теперь всё сохраняется туда.

      Сделал прекхук, который сам подставляет нужные данные для запоминания пользователя.

      Но у меня теперь другая проблема.

      Сама форма — это форма с другого сайта, в action стоит:
      <form name="Webform 1"  action="https://***/modules/Webforms/capture.php" method="post">
      Вторая форма
      <form action="[[~[[*id]]]]">
      Как сделать так, чтобы при нажатии на отправить в первой форме (или второй) — данные отправляются и на внешнюю форму, и в базу (вторая форма)?

      Пока уходят данные только той формы, чью кнопку Отправить я нажал.

      Есть идеи?
        Роман
        07 декабря 2021, 18:20
        0
        Так же хуком, отправляй данные постом через curl на другой сайт.
          Anton Erin
          07 декабря 2021, 21:02
          0
          Привет, спасибо за ответ.
          Можг бы кусочек кода-примера с curl привести?
          Знаком с curl, но только для скачивания файлов.
          Как передать 2 формы curl даже не представляю.

          Или как искать в Гугле?
      Александр Мельник
      07 декабря 2021, 19:18
      0
      Хочу уточнить, а то не усну)
      Как запомнить пользователя, если он заполнил и отправил все формы? На сайте необходимо реализовать 3 формы, которые пользователь должен в течение 1 года отправить.
      Это что означает? Что нужно сохранить данные о пользователе только если между заполнением первой и третьей формы прошло не более 12 месяцев? Если заполнил первую форму в марте 2000го а третью в апреле 2001 го то уже не сохраняем?
        Anton Erin
        07 декабря 2021, 21:06
        0
        Привет.
        Нет, не совсем так.
        3 страницы с 3мя разными формами.
        Заполнить в течение года все 3 формы — это обязанность пользователя.
        Если он уже заполнял форму (например, форму номер 1) то, вместо формы (чанк с формой будет скрыт) он увидит «Спасибо, Вы уже заполняли эту форму».

        Не очень сумбурно объяснил? :))
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      8