Opened 11 months ago

Closed 11 months ago

Last modified 11 months ago

#1176 closed дефект (готово)

Не отбражается список изделий после манипуляций с фильтрами

Reported by: alx Owned by: Denis_N
Priority: major Component: БД изделий АДС
Keywords: Cc:

Description

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

  • Открыл главную страницу.
  • Кликнул "Показать фильтры".
  • В строке "Комбинирование таблиц" кликнул "Выбрать столбцы для отображения".
  • В появившемся списке отметил чекбокс "Тип записи".
  • Нажал Enter.
  • В открывшейся странице кликнул заголовок столбца "Тип записи" (изменил сортировку).
  • Кликнул заголовок столбца "№".
  • Кликнул "Показать фильтры".
  • В строке "Комбинирование таблиц" кликнул "Выбрано: 1".
  • В появившемся списке снял отметку с чекбокса "Тип записи".
  • Нажал Enter.

В результате получил страницу с сообщением об ошибке: "Ошибка запроса в Продукты1: mysqli_queryUnknown column 'history.type_write' in 'order clause'".

Ожидалось, что вместо сообщения об ошибке отобразится список изделий.

Change History (11)

comment:1 by Denis_N, 11 months ago

In 265/base:

Исправлен баг: не отображается список изделий после манипуляций с фильтрами

Заметил, что этот баг по-разному воспроизводится в Chrome и в Firefox
Для того, чтобы воспроизвести - нужно на главной нажать "Показать фильтры", в строке "Комбинирование таблиц" кликнуть на "Выбрать столбцы для отображения", выбрать столбец из "Истории" и нажать Enter.
После того, как это сделано кликнуть на заголовок столбца из Истории, чтобы применить сортировку. И после применения сортировки заново раскрыть фильтры, в комбинировании таблиц снять галочку с пункта для отображения из истории и далее:
-в Chrome нажать в любое место, кроме окна комбинирования таблиц, снова раскрыть окно и кликнуть Enter
-в Firefox достаточно нажать Enter

Устранил этот баг, добавив в условие проверку переменной $_POST, выбраны ли из истории столбцы для отображения и содержит ли она строку с отвечающую за сортировку.

Думаю, что разница в воспроизведении багов обусловлена разным устройством браузеров и основная причина этого бага тоже в этом

Думаю, что пока не нужно закрывать тикет

See #1176

in reply to:  1 ; comment:2 by alx, 11 months ago

Replying to Denis_N:

Для того, чтобы воспроизвести - нужно на главной нажать "Показать фильтры", в строке "Комбинирование таблиц" кликнуть на "Выбрать столбцы для отображения", выбрать столбец из "Истории" и нажать Enter.
После того, как это сделано кликнуть на заголовок столбца из Истории, чтобы применить сортировку. И после применения сортировки заново раскрыть фильтры, в комбинировании таблиц снять галочку с пункта для отображения из истории и далее:
-в Chrome нажать в любое место, кроме окна комбинирования таблиц, снова раскрыть окно и кликнуть Enter
-в Firefox достаточно нажать Enter

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

in reply to:  2 comment:3 by alx, 11 months ago

Replying to alx:

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

А сейчас проверил - воспроизводится... Вероятно, я ошибся в каком-то действии когда писал тикет...

comment:4 by Denis_N, 11 months ago

Выяснил, что форма отправляется по разному, когда к нажатию Enter привязано событие submit(). А дальше, скорее всего браузеры, по разному себя ведут. Один при определенных условиях отправляет форму, а другой при этих же условиях (когда не выбраны чекбоксы) обновляет страницу
По привязка события к нажатию Enter обусловлена тикетом #1079, поэтому его не убрать. А залазить в дебри того, как каждый браузер реагирует займет длительное время.
Решение в r265/base устраняет баг, описанный в этом тикете и на этом тикет предлагаю закрыть

in reply to:  4 ; comment:5 by alx, 11 months ago

Replying to Denis_N:

Выяснил, что форма отправляется по разному, когда к нажатию Enter привязано событие submit(). А дальше, скорее всего браузеры, по разному себя ведут. Один при определенных условиях отправляет форму, а другой при этих же условиях (когда не выбраны чекбоксы) обновляет страницу

Хм... Как это? То есть после отправки формы страница не обновляется? Браузер отправил запрос, получил ответ с новой страницей - а отображать продолжает старую? :)

на этом тикет предлагаю закрыть

??? Кому ты это предлагаешь? :) Владелец тикета - ты. Разработчик - тоже ты. Почему ты предлагаешь закрыть тикет кому-то другому? Почему не закрываешь его сам?

in reply to:  5 ; comment:6 by Denis_N, 11 months ago

Replying to alx:

Replying to Denis_N:

Выяснил, что форма отправляется по разному, когда к нажатию Enter привязано событие submit(). А дальше, скорее всего браузеры, по разному себя ведут. Один при определенных условиях отправляет форму, а другой при этих же условиях (когда не выбраны чекбоксы) обновляет страницу

Хм... Как это? То есть после отправки формы страница не обновляется? Браузер отправил запрос, получил ответ с новой страницей - а отображать продолжает старую? :)

Я не правильно выразился. При одном исходе значения в переменной POST отсутствуют совсем, словно страницу открыли в первые, при другом значения есть

in reply to:  5 comment:7 by Denis_N, 11 months ago

??? Кому ты это предлагаешь? :) Владелец тикета - ты. Разработчик - тоже ты. Почему ты предлагаешь закрыть тикет кому-то другому? Почему не закрываешь его сам?

Понял. Закрываю

comment:8 by Denis_N, 11 months ago

Resolution: готово
Status: newclosed

in reply to:  6 comment:9 by alx, 11 months ago

Replying to Denis_N:

Я не правильно выразился. При одном исходе значения в переменной POST отсутствуют совсем, словно страницу открыли в первые, при другом значения есть

А, теперь понял. Действительно, при запросе из chrome сервер зачем-то возвращал переадресацию на clearmain.php (который опять возвращал переадресацию на main.php), в результате которой POST превращался в GET... Но я не могу понять, каким образом в r265/base это было устранено. Я не вижу там ничего, что могло бы быть связано с переадресацией. Не ошибся ли ты с номером коммита?

comment:10 by Denis_N, 11 months ago

В r256/base было устранено получение ошибки после манипуляции с фильтрами. Ошибка возникала из-за того, что после нажатия Enter и перезагрузки страницы, если не выбраны чекбоксы в "Комбинировании таблиц", сохранялась в переменной $_POST сохранялось значение, которого не должно было быть

comment:11 by Denis_N, 11 months ago

In 295/base:

Упразднил clearmain.php, поскольку она создавалась на начальных этапах, когда для меня многое было не известно. Можно обойтись без этого файла

See #1176

Note: See TracTickets for help on using tickets.