Каким образом можно выполнить обновление цены?

Привет всем! У меня есть обработчик формы, который выглядит следующим образом: 

<pre><code>if ($go) {
   $aData = array();
   $aData['payday'] = isset($_POST['payday']) ? $_POST['payday'] : '';
}

if (isset($url['get']) &amp;&amp; in_array($url['get'], array('price', 'data'))) {
   // Цена
   $price = 50;

   if ($url['get'] == 'price')
      sys::outjs(array('sum' =&gt; $price));
}</code></pre>

А вот HTML-код формы:

<pre><code class="html">&lt;label class="form-label" for="payday"&gt;Кол-во дней&lt;span
                           class="ms-2 text-primary fs-10"&gt;&lt;/span&gt;&lt;/label&gt;
                     &lt;input id="payday" name="payday" type="number" value="1" class="form-control"
                        onchange="upd_price()"&gt;
                     &lt;div class="invalid-feedback"&gt;&lt;/div&gt;
                  &lt;/div&gt;

                  &lt;div class="d-flex fs-10 mb-1"&gt;
                     &lt;p class="mb-0"&gt;Цена — &lt;/p&gt;&lt;span class="ms-1"&gt;50 руб. день&lt;/span&gt;
                  &lt;/div&gt;
                  &lt;div class="d-flex fs-10 mb-1 text-success"&gt;
                     &lt;p class="mb-0"&gt;Итого — &lt;/p &gt;&lt;span class="ms-1"&gt;&lt;span id="sum"&gt;...&lt;/span&gt; руб. скидка: 0%&lt;/span&gt;</code></pre>

Также у меня есть JavaScript, который обновляет сумму в зависимости от значения в поле ввода с id="payday":

<pre><code class="javascript">function upd_price() {
      $.getJSON(home + 'domen/page/payday/' + $('#payday').val() + '/get/price', function (arr) {
         $('#sum').html(arr['sum']);
      });
   }</code></pre>

Однако сумма остается равной 50. Как я могу сделать так, чтобы значение, введенное в поле input, умножалось на цену (в данном случае 50)?
  • 29 марта 2025 г. 16:25
Ответы на вопрос 1
Вам необходимо внести изменения в обработчик формы и JavaScript, чтобы сумма обновлялась в зависимости от значения в поле ввода `payday`. В вашем текущем коде вы всегда возвращаете фиксированное значение `price`, не учитывая количество дней, введенное пользователем. 

Вот шаги, которые нужно выполнить для правильного обновления суммы:

1. **Измените PHP код**, чтобы он умножал количество дней на цену:

```php
if ($go) {
    $aData = array();
    $days = isset($_POST['payday']) ? (int)$_POST['payday'] : 1; // Приведение к числу
    $price_per_day = 50; // Цена за день
    $total_price = $days * $price_per_day; // Общая сумма

    // Здесь можно возвращать общую сумму
    sys::outjs(array('sum' => $total_price));
}
```

2. **Измените JavaScript функцию** для отправки корректных данных на сервер:

Необходимо убедиться, что вы вызываете `$.getJSON`, используя значение из поля, и что сервер правильно обрабатывает этот запрос.

```javascript
function upd_price() {
    var paydayValue = $('#payday').val(); // Получаем значение из поля input
    $.getJSON(home + 'domen/page/payday/' + paydayValue + '/get/price', function (arr) {
        $('#sum').html(arr['sum']); // Обновляем элемент с id="sum"
    });
}
```

Таким образом, когда пользователь изменяет значение в поле `payday`, функция `upd_price()` будет отправлять запрос с актуальным количеством дней, и PHP обработчик будет возвращать соответствующую сумму.

3. **Не забудьте про валидацию**: Вы можете добавить проверки на неотрицательное число и т.д., чтобы гарантировать корректные входные данные.

Теперь при изменении значения в поле количество дней будет пересчитано на основании установленной цены, и сумма будет отображаться корректно в элементе с id `sum`.
Похожие вопросы