Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Подсчет данных формы при загрузке (https://javascript.ru/forum/jquery/70219-podschet-dannykh-formy-pri-zagruzke.html)

Белый шум 21.08.2017 08:47

laimas,
а зачем дублировать код? Пусть всё в js считается. Заодно на сервере при получении данных с формы будет видно когда скрипт не отработал (это лучше чем получить неверные данные). - О какой нагрузке на клиент вы говорите в данном случае?... :)

pava467,
в какую форму? По какому счётчику?

laimas 21.08.2017 08:58

Цитата:

Сообщение от Белый шум
а зачем дублировать код?

Что за хрень, о каком дублировании речь? Или вы считаете что для того чтобы умножить два числа РНР также должен как и JS ковыряться в DOM?

Несете не понять что. А насчет отработал клиент, не отработал, так миль пардон, по умолчанию почему-то определено.

pava467 21.08.2017 08:59

Согласен с Вами, вот только я не могу реализовать это сам. Сюда пришел за помощью..

Белый шум 21.08.2017 09:08

Цитата:

Сообщение от laimas
Что за хрень, о каком дублировании речь?

Я говорю о дублировании алгоритма, который потом придётся поддерживать в двух местах. При чём тут ковыряние в DOM? Лишняя миллисекунда при загрузке не стоит геморроя поддержки такого кода.

Впрочем, не буду спорить. Своё мнение я высказал, а решать всё-равно ТопикСтартеру.

laimas 21.08.2017 09:15

Цитата:

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

Вы могли бы назвать "второе место", что это за место и что там будет дублироваться?

Белый шум 21.08.2017 09:24

Одно место - js, второе - php.
Дублироваться будет эта строчка:
Код:

summ = summ*perhour*kurs;
- завтра понадобится добавить умножение на коэффициент, послезавтра - прибавить константу, а через год - высчитывать налог. И когда-нибудь впопыхах забудут что надо ещё в другом месте поправить.

laimas 21.08.2017 09:34

Цитата:

Сообщение от Белый шум
Одно место - js, второе - php.

Охренеть, ей богу. summ = summ*perhour*kurs отношения к РНР никакого не имеет, это уже чистый как вы сказали "алгоритм" клиента. Пусть он им и занимается, а речь идет о просчете чего-то по умолчанию при загрузке страницы. Нахрена для этого нужен клиент если все что нужно РНР, это в месте выводящем по умолчанию сделать банальный вывод

<?=$price*$current?>


Цитата:

Сообщение от Белый шум
завтра понадобится добавить умножение на коэффициент, послезавтра - прибавить константу

И какие проблемы если их определяют на сервере и сервер в любом случае и так к ним будет обращаться?

А через год война атомная.... ну что пороть не понять что.

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

pava467 21.08.2017 11:02

Так а мне что делать то с кодом?

laimas 21.08.2017 17:09

Цитата:

Сообщение от pava467
Так а мне что делать то с кодом?

Курс валюты сервер должен получать один раз в сутки по окончанию торгов на валютной бирже. Если этот курс используется только для расчета в этой форме (не считая вывода для информации), то выгодно его помещать в атрибут поля формы, по изменению значения в котором производится расчет. Иначе курс нужно выводить как js-переменную, но не в скриптах подключаемых, а в теле страницы. В атрибут поля нужно поместить и цену за час.

Очень странная форма у вас, кроме скрытых полей в ней ничего нет, а поля с именем "k-less" не видно, но в общем это может выглядеть так и сразу с выводом в рублях для этого значения по умолчанию:

<input name="k-less" value="1" data-price="<?=$perhour?>" data-usd="<?=$currency?>" />
<span class="k-cost"><?=$perhour * $currency?></span>


Клиент обрабатывает расчет по мере ввода в поле:

$(window).load(function() {
    $('input[name="k-less"]').change(function () {
        var o = $(this);
        $('.k-cost').text(o.data('price') * o.data('usd') * this.value);
    });
});


Запрос же в базу обязательно заменить, то что у вас написано, это мягко выражаясь ахинея. Последняя запись в базу, это из отсортированных в обратном порядке по ID или времени добавления записи взять первую (LIMIT 1).

Если при этом интересует только поле id, то только его и нужно получать. Но если его получение для <?=$v['id']+1?> (это краткая запись <?php echo $v['id']+1; ?>), которое будет служить новым идентификатором для новой записи, то это грубейшая ошибка. Идентификаторы записей, это зачастую первичный ключ с автоинкрементом. Если таким образом формировать идентификаторы записей в базе, то это можно делать только если у этой таблицы будет один единственный пользователь, что вряд ли в вашем случае верно. А это означает, что неизбежны ситуации, когда один из пользователей, которым вашим кодом будет сформирован один и тот же следующий ID, запишет в базу, а попытка записи второго приведет к ошибке дублирования ключа. Если даже это не первичный ключ с автоинкрементом, то запись второго пользователя заменит запись первого.


Часовой пояс GMT +3, время: 00:57.