Перейти к содержимому

Заявка с формы не сохранилась - разбор причин

Посетитель нажал «Отправить», а заявки в результатах нет. Разбираем причины по убыванию частоты, начиная с проверки самих результатов формы.

С чего начать

Смотрим последние сохранённые результаты:

SELECT ID, FORM_ID, DATE_CREATE, USER_ID FROM b_form_result
ORDER BY ID DESC LIMIT 10; -- последние заявки по всем формам сайта
-- пустая выборка означает, что до сохранения дело вообще не дошло

Список результатов отвечает на главный вопрос за секунду. Если свежие записи есть, разбор переходит к письмам и к фильтрам списка, а если их нет - к самой отправке формы.

Проверяем ответ формы на отправку:

Окно терминала
curl -s -X POST -F 'WEB_FORM_ID=3' -F 'web_form_submit=Y' https://example.com/feedback/ \
| grep -iE 'ошибк|error|обязательн' | head
# сообщение об ошибке приходит в разметке, а шаблон формы его иногда не показывает

Форма почти всегда сообщает о проблеме, но шаблон не всегда это сообщение выводит. Посетитель видит «ничего не произошло», а в ответе сервера лежит понятный текст про незаполненное поле.

Смотрим обработчики событий модуля форм:

$handlers = \Bitrix\Main\EventManager::getInstance()
->findEventHandlers('form', 'onBeforeResultAdd');
printf("обработчиков: %d\n", count($handlers));
// свой обработчик может молча отменить сохранение результата

Проверяем защиту от спама на форме:

printf("капча=%s\n", \CForm::GetByID($formId)->Fetch()['USE_CAPTCHA']);
// ловушки и ограничение частоты чаще всего добавляют своим кодом рядом с формой

Сверяем фильтр в списке результатов:

SELECT COUNT(*) FROM b_form_result WHERE FORM_ID = 3 AND DATE_CREATE >= CURDATE();
-- в интерфейсе список часто отфильтрован по статусу или по датам с прошлой сессии

Причины

  1. Не прошли обязательные поля формы примерно 25% случаев

    ПризнакСтраница перезагружается, форма остаётся заполненной, результата в базе нет.

    ПроверкаОтправляем форму запросом из консоли и ищем сообщение об ошибке в ответе.

    Что делатьВыводим ошибки в шаблоне формы: посетитель должен видеть, какое поле не заполнено.

  2. Сработала защита от спама примерно 20% случаев

    ПризнакЧасть заявок теряется, а у части посетителей форма не отправляется совсем.

    ПроверкаСмотрим настройку картинки с кодом у формы и свои проверки рядом с обработчиком.

    Что делатьСмягчаем проверки и показываем причину отказа: молчаливый отказ выглядит как поломка.

  3. У группы нет прав на заполнение формы примерно 15% случаев

    ПризнакФорма отправляется у администратора и не работает у гостя сайта.

    ПроверкаПроверяем права формы для группы всех пользователей в её настройках доступа.

    Что делатьВыдаём право заполнения нужным группам, включая неавторизованных посетителей.

  4. Отправка идёт мимо сохранения результата примерно 15% случаев

    ПризнакПисьмо приходит, а в результатах формы пусто, либо наоборот.

    ПроверкаСмотрим код обработчика: сохраняет он результат формы или только шлёт письмо.

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

  5. Обработчик события отменяет сохранение примерно 15% случаев

    ПризнакЗаявки перестали приходить после доработки, хотя форма не менялась.

    ПроверкаПечатаем список обработчиков события сохранения результата и читаем их код.

    Что делатьПравим обработчик: отмена сохранения должна происходить осознанно и с сообщением.

  6. Смотрят не тот список или не тот фильтр примерно 10% случаев

    ПризнакВ базе записи есть, а в административном разделе список выглядит пустым.

    ПроверкаСчитаем результаты формы за сегодня прямым запросом к таблице результатов.

    Что делатьСбрасываем фильтр списка результатов: он сохраняется между заходами сотрудника.

Частые вопросы

Письмо пришло, а результата нет. Так бывает?

Да, если форма собрана своим кодом и только отправляет письмо. Хранение и письмо - разные вещи, и заявку стоит сохранять всегда.

Где искать результаты веб-формы?

В разделе результатов той же формы в административной части. Список помнит фильтр, поэтому при пустой выдаче его сначала сбрасывают.

Можно ли восстановить потерянные заявки?

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

Как убедиться, что форма работает после правок?

Тестовой отправкой с проверкой записи в результатах и письма. Проверять только письмо недостаточно: сохранение и отправка независимы.

Мешает ли кэш увидеть новые заявки?

Нет, список результатов не кэшируется. Пустой список почти всегда объясняется фильтром или тем, что заявка не сохранилась.

Смежное

Первоисточник