为了账号安全,请及时绑定邮箱和手机立即绑定

使用javascript从html表中提取数据

使用javascript从html表中提取数据

PHP
幕布斯7119047 2021-06-29 17:57:51
我有一个 php 网站,它使用从数据库中获取的数据制作表格。在表格中,我有一个输入,以便用户可以选择他们想要购买的每件商品的数量。我通过连接 id 成功地使每个输入的 id 不同。这是制作表格的php:<?phpif ($result->num_rows > 0) {    // output data of each row    while($row = $result->fetch_assoc()) {      echo "<tr>";      echo "<td>" . $row['id'] . "</td>";      echo "<td>" . $row['Article'] . "</td>";      echo "<td>" . $row['Prix'] . "</td>";      echo "<td>" . $row['PrixRetour'] . "</td>";      echo "<td>" . $row['QuantiteeMaximale'] . "</td>";      echo "<td>" . $row['Projet'] . "</td>";      echo "<td id=\"quantity" . $row['id'] . "\"><input type=\"number\" name=\"quantity\" id=\"quantity\"></td>";      echo "</tr>";    }} else {    echo "0 results";}$conn->close();?>我需要在表的末尾写下总金额,但我不知道如何在 javascript 中进行 for 循环,以便输入字段中的数字乘以价格。是否有一个简单的代码部分可以用来计算总价?
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

您不需要在 Javascript 中执行此操作。你可以在你的 PHP 代码中做到这一点:


<?php


if ($result->num_rows > 0) {

    $grandTotal = 0;

    // output data of each row

    while($row = $result->fetch_assoc()) {

      $grandTotal += $row['Prix'] * $row['QuantiteeMaximale'];


      echo "<tr>";

      echo "<td>" . $row['id'] . "</td>";

      echo "<td>" . $row['Article'] . "</td>";

      echo "<td>" . $row['Prix'] . "</td>";

      echo "<td>" . $row['PrixRetour'] . "</td>";

      echo "<td>" . $row['QuantiteeMaximale'] . "</td>";

      echo "<td>" . $row['Projet'] . "</td>";

      echo "<td id=\"quantity" . $row['id'] . "\"><input type=\"number\" name=\"quantity\" id=\"quantity\"></td>";

      echo "</tr>";

    }


    echo "Grand Total: {$grandTotal}"; // you might want to end your table before this. I'll leave formatting up to you.

} else {

    echo "0 results";

}

$conn->close();


?>

此外,这里有一种更简洁的方式来输出 HTML:


<?php


if ($result->num_rows > 0) {

    $grandTotal = 0;

    // output data of each row

    while($row = $result->fetch_assoc()) {

      $grandTotal += $row['Prix'] * $row['QuantiteeMaximale'];


      ?>


      <tr>

          <td><?= htmlentities($row['id']); ?></td>

          <td><?= htmlentities($row['Article']); ?></td>

          <td><?= htmlentities($row['Prix']); ?></td>

          <td><?= htmlentities($row['PrixRetour']); ?></td>

          <td><?= htmlentities($row['QuantiteeMaximale']); ?></td>

          <td><?= htmlentities($row['Projet']); ?></td>";

          <td id="quantity<?= $row['id']; ?>"><input type="number" name="quantity"></td>

      </tr>


      <?php

    }


    echo "Grand Total: {$grandTotal}"; // you might want to end your table before this. I'll leave formatting up to you.

} else {

    echo "0 results";

}

$conn->close();


?>

如果您想使用表格本身中的数量字段,您可以这样做。这是一个非常快速的解决方案。你可能想要改进它。但它至少是可以使用的。


<?php


if ($result->num_rows > 0) {


    echo "<table id='items'>";

    // output data of each row

    while($row = $result->fetch_assoc()) {

      $grandTotal += $row['Prix'] * $row['QuantiteeMaximale'];


      ?>


      <tr>

          <td><?= htmlentities($row['id']); ?></td>

          <td><?= htmlentities($row['Article']); ?></td>

          <td><?= htmlentities($row['Prix']); ?></td>

          <td><?= htmlentities($row['PrixRetour']); ?></td>

          <td><?= htmlentities($row['QuantiteeMaximale']); ?></td>

          <td><?= htmlentities($row['Projet']); ?></td>";

          <td><input data-price='<?= floatval($row['Prix']); ?>' data-max-quantity='<?= intval($row['QuantiteeMaximale']); ?>' type="number" name="quantity"></td>

      </tr>


      <?php

    }


    ?>


    </table>


    <p>Grand Total: $<span id='grandTotal'></span></p>


    <script>

        (() => {

            const updateGrandTotal = (grandTotalEl, inputEls) => {

                grandTotalEl.innerText = inputEls.reduce((total, inputEl) => {

                    const maxQuantity = parseInt(inputEl.dataset.maxQuantity)


                    if(parseInt(inputEl.value) > maxQuantity) inputEl.value = maxQuantity

                    if(parseInt(inputEl.value) < 0) inputEl.value = 0


                    const price = parseFloat(inputEl.dataset.price)

                    const quantity = parseInt(inputEl.value)


                    if(isNaN(quantity)) return total


                    return total + (price * quantity)

                }, 0)

            }


            const tableEl = document.getElementById('items')

            const grandTotalEl = document.getElementById('grandTotal')

            const quantityInputEls = tableEl.querySelectorAll('input[name=quantity]')


            quantityInputEls.forEach(el => el.addEventListener('keyup', () => updateGrandTotal(grandTotalEl, inputEls)))

        })()

    </script>


    <?php

} else {

    echo "0 results";

}

$conn->close();


?>


查看完整回答
反对 回复 2021-07-02
  • 1 回答
  • 0 关注
  • 248 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信