За последние 24 часа нас посетили 15777 программистов и 1544 робота. Сейчас ищут 886 программистов ...

Подсчет суммы значений в импутах по id элементов

Тема в разделе "PHP для новичков", создана пользователем qux, 9 дек 2014.

  1. qux

    qux Активный пользователь

    С нами с:
    9 дек 2014
    Сообщения:
    16
    Симпатии:
    0
    Добрый день. Есть веб форма для заказа товаров. Цель подсчитать итоговую сумму при формировании заказа.

    Это скрипт формирования каталога из файла csv и подсчета сумм в строках при вводе количества:
    Код (Text):
    1.  
    2. <?PHP
    3. $G=0;
    4. $fileZakaz = fopen ("images/catalog/zakaz.csv","r");
    5. while ($data = fgetcsv ($fileZakaz, 1000, ";"))
    6.     {$G++;
    7.         if ($data[0]=='head'){
    8.         echo '<tr align="center" height="30px">';
    9.         echo '<td colspan="5" class="zakazgroup">'.$data[1].'</td>';
    10.         echo '</tr>';
    11.         echo '<tr align="center" height="30px">';
    12.         echo '<td width="40%" class="zakazhead">Наименование</td>';
    13.         echo '<td width="15%" class="zakazhead">Заказ количество</td>';
    14.         echo '<td width="15%" class="zakazhead">В упаковке</td>';
    15.         echo '<td width="15%" class="zakazhead">Цена шт.</td>';
    16.         echo '<td width="15%" class="zakazhead">Сумма</td>';
    17.         echo '</tr>';
    18.         }
    19.         else {
    20.         echo '<tr align="center" valign="middle" height="40px">';
    21.         echo '<td width="40%" align="left" class="zakazrowname">'.$data[1].'</td>';
    22.         echo '<td width="15%" class="zakazrow"><input onChange=f'.$G.'() id=i'.$G.'1 type="text" size="2" maxlength="3" class="zakaz"></td>';
    23.         echo '<td width="15%" class="zakazrow"><input disabled id=i'.$G.'2 value='.$data[2].' type="text" size="2" maxlength="3" class="zakazdis"></td>';
    24.         echo '<td width="15%" class="zakazrow"><input disabled id=i'.$G.'3 value='.$data[3].' type="text" size="3" maxlength="3" class="zakazdis"></td>';
    25.         echo '<td width="15%" class="zakazrow"><input disabled id=i'.$G.'4 type="text" size="3" maxlength="3" class="zakazdis"></td>';
    26.         echo '</tr>';
    27.         echo '<script>';
    28.         echo 'function f'.$G.'(){';
    29.         echo 'var n1=document.getElementById("i'.$G.'1").value;';
    30.         echo 'var n2=document.getElementById("i'.$G.'2").value;';
    31.         echo 'var n3=document.getElementById("i'.$G.'3").value;';
    32.         echo 'document.getElementById("i'.$G.'4").value=Number(n1)*Number(n2)*Number(n3);';
    33.         echo 'alert($G);';
    34.         echo 'sum();';
    35.         echo '}';
    36.         echo '</script>';
    37.         }
    38.     }
    39.   fclose ($fileZakaz);
    40. ?>
    Это функция подсчета итоговой суммы:

    Код (Text):
    1.  
    2. <tr align="center" height="40px">
    3.             <td colspan="4" class="zakazgroup" align="right" style="padding-right:10px">Заказ на сумму</td>
    4.             <td width="15%" class="zakazgroup"><input disabled id=S1 type="text" size="3" maxlength="3" class="zakazdis"></td>
    5.           <script>
    6.         function sum(){
    7.         $num=1;
    8.         $sum=0;
    9.         alert($G);
    10.         while ($num <= $G) {
    11.         var n4=document.getElementById(i.$G.4).value;
    12.         alert(n4);
    13.         $sum+=Number(n4);    
    14.         alert($sum);
    15.         $num++;
    16.         }
    17.         document.getElementById(S1).value=$sum;}
    18.         </script>  
    19.           </tr>
     
  2. qux

    qux Активный пользователь

    С нами с:
    9 дек 2014
    Сообщения:
    16
    Симпатии:
    0
    При отладке выходит ошибка " Uncaught ReferenceError: sum is not defined"
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    чую какая-то разница есть в написании...
     
  4. qux

    qux Активный пользователь

    С нами с:
    9 дек 2014
    Сообщения:
    16
    Симпатии:
    0
    Насколько я понимаю sum() - это функция, а $sum - это переменная...
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    всё верно. её объявление есть во втором листинге а попытка использования - в первом. а как эти листинги связаны?
     
  6. qux

    qux Активный пользователь

    С нами с:
    9 дек 2014
    Сообщения:
    16
    Симпатии:
    0
    функция sum() объявляется в head документа, затем с помощью инклюда и функцией php из первого листинга формируется body страницы с каталогом товаров, где при изменении количества в каждой строчке подсчитывается сумма с помощью функции из первого листинга:
    Код (Text):
    1.  
    2. <script>
    3.       function f'.$G.'(){
    4.       var n1=document.getElementById("i'.$G.'1").value;
    5.       var n2=document.getElementById("i'.$G.'2").value;
    6.       var n3=document.getElementById("i'.$G.'3").value;
    7.       document.getElementById("i'.$G.'4").value=Number(n1)*Number(n2)*Number(n3);
    8.       alert($G);
    9.       sum();
    10.       }
    11.       </script>
    при вычислении суммы в стоке вызывается функция sum() для обновления итоговой суммы по всему заказу.
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а вот этот листинг это на каких языках написано? это пхп-вывод жс-кода?
     
  8. qux

    qux Активный пользователь

    С нами с:
    9 дек 2014
    Сообщения:
    16
    Симпатии:
    0
    это я взял из конца первого листинга только убрал все echo и знаки пунктуации
     
  9. qux

    qux Активный пользователь

    С нами с:
    9 дек 2014
    Сообщения:
    16
    Симпатии:
    0
    Тему закройте, неправильно передаю переменную из PHP в JS... Перепишу функцию sum() и будет все норм.

    Добавлено спустя 35 минут 44 секунды:
    Сделал так:
    Код (Text):
    1.  
    2. <script>
    3.         function sum(){
    4.         var sum=0;
    5.         var elems = document.getElementsByName('itog');
    6.         for (var i=0; i<elems.length; i++){
    7.         var n4 = elems[i].value;
    8.         sum+=Number(n4);
    9.         }
    10.         document.getElementById('S1').value=sum;
    11.         }
    12.         </script>