Xpoint
   [напомнить пароль]

Вычисления на клиенте и на сервере

Метки: [без меток]
2012-12-18 12:45:17 [обр] Superman(0/16)[досье]

Есть два модуля: "Коммерческие предложения" (КП) и "Заказы".
Упрощенная схема таблиц:

quotesordersitems
ididid
namenamequote_id
totaltotalorder_id
......qty
name
...

Создаем запись в модуле "КП", загружается форма с возможностью добавить строки.
В каждой строке указывается наименование, кол-во, стоимость.
Встроенный в форму javascript подсчитает общую стоимость исходя из данных в строках до нажатия кнопки "Сохранить".
Пользователь нажимает "Сохранить" и сервер просто сохраняет общую стоимость в поле total текущего модуля (КП).

Далее пользователь может конвертировать созданную запись в запись модуля Заказы.
Приэтом строки останутся как в модуле КП, так и в Заказах.
Теперь пользователь пытается отредактировать запись в Заказе, загружаются ранее созданные строки,
он меняет в них стоимость и кол-во и соответственно javascript пересчитает общую стоимость. Жмем сохранить.

Так как эти строки были отнесены и к КП, то там тоже произошли изменения в общей стоимости,
но сейчас там отображается старая общая стоимость. Чтобы обновить стоимость, нам нужно загрузить экран редактирования и сохранить запись (чтобы инициировать javascript вычисления).

Из проблемы ясно, что нужно обновлять общую стоимость зависимого модуля при сохранении записи текущего модуля.
Получается, что я должен портировать те javascript-вычисления, которые встроены в форму редактирования записи, на сервер (PHP)?

спустя 3 часа 32 минуты [обр] Marat Tanalin(0/78)[досье]
Из соображений безопасности все вычисления и проверки следует делать на сервере. На JavaScript можно лишь продублировать определённые вычисления/проверки с целью сделать пользователю удобнее (предотвратив задержки, обусловленные обращением к серверу), но никак не использовать непосредственно эти данные на сервере. Злоумышленник может подделать результат JavaScript-вычисления, доверять такому результату нельзя.
спустя 9 часов [обр] Thirteensmay(0/157)[досье]
В простейшем варианте да, вычисления необходимо делать на сервере и повторять для удобства на клиенте. Можно избавится от дублирования если переделать скрипт вычисляющий сумму, он будет собирать идентификаторы и количество товаров, отправлять их AJAX на сервер, а тот будет считать и выдавать результат, весьма быстро. Если никаких особых требований к вычислению суммы нет, то лучше продублировать, если же есть то можно как описал выше, при этом можно реализовать дополнительные плюшки вроде проверки наличия товара в реальном времени, резервирования и т.п. Вообще, чем богаче, более функционален и интерактивен интерфейс, чем ближе он к классическим приложениям типа офисных, тем выгоднее и проще AJAX, отказ от ручного HTML, верстки, форм, т.е. от подходов web 1.0, в пользу десктопных подходов, и лучше их не смешивать.
Powered by POEM™ Engine Copyright © 2002-2005