如何使用onChange传递多个值来更新php表中的数据库

How to pass multiple values using onChange to update a database in a php table

本文关键字:php 更新 数据库 onChange 何使用      更新时间:2023-09-26

目的:通过修改PHP表中显示的数据来使用onchange函数更新库存数据库。

我正在从数据库中提取数据并将其显示在表中。我有数据显示在文本字段,所以他们是可编辑的。编辑完数据后,我的函数使用POST提供的数据,最好是项目ID和值,将用于更新库存。

这是我的'inventory.php'代码:

   $db = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
   $inventory = mysqli_query($db, "SELECT item_id, item_name, item_quantity, item_cost, item_price FROM inventory");
   $num_rows = mysqli_num_rows($inventory);
   mysqli_close($db);
      echo "<form id='"update_add_inventory'" action='"'" method='"post'">";
      echo "<table>";
      echo "<tr>";
      echo "<th>Item ID</th>";
      echo "<th>Item Name</th>";
      echo "<th>Item Quantity</th>";
      echo "<th>Item Cost</th>";
      echo "<th>Item Price</th>";
      echo "</tr>";
      $i = 1;
         while($row = mysqli_fetch_array($inventory))
         {
            echo "<tr>";
            echo "<td>".$row['item_id']."</td>";
            echo "<td><input type='"text'" name='"item_".$i."_name'" onchange='"updateInventory('update_inventory.php')'" value='".$row['item_name']."' /></td>";
            echo "<td><input type='"text'" name='"item_".$i."_quantity'" onchange='"updateInventory('update_inventory.php')'" value='".$row['item_quantity']."' /></td>";
            echo "<td><input type='"text'" name='"item_".$i."_cost'" onchange='"updateInventory('update_inventory.php')'" value='".$row['item_cost']."' /></td>";
            echo "<td><input type='"text'" name='"item_".$i."_price'" onchange='"updateInventory('update_inventory.php')'" value='".$row['item_price']."' /></td>";
            echo "</td></tr>";
            $i++;
         }
      echo "</table><br>";
      echo "</form>";
下面是我的onchange函数:
function updateInventory(action)
{
  document.getElementById('update_add_inventory').action = action;
  document.getElementById('update_add_inventory').submit();
}

这是我的'update_inventory.php'代码:

     $db = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
     $inventory = mysqli_query($db, "SELECT item_id, item_name, item_quantity, item_cost, item_price FROM inventory");
     $num_rows = mysqli_num_rows($inventory);
     $i = 1;
     for ($n=1; $n<=$num_rows; $n++) {
        if (isset($_POST['item_'.$i.'_name'])) {
           $item_id = $_POST['item_'.$i.'_id'];
           $item_name = $_POST['item_'.$i.'_name'];
           $result = mysqli_query($db, "UPDATE inventory SET item_name='".$item_name."' WHERE item_id='".$item_id."'");
        } else if (isset($_POST['item_'.$i.'_quantity'])) {
           $item_id = $_POST['item_'.$i.'_id'];
           $item_name = $_POST['item_'.$i.'_quantity'];
           $result = mysqli_query($db, "UPDATE inventory SET item_quantity='".$item_quantity."' WHERE item_id='".$item_id."'");
        } else if (isset($_POST['item_'.$i.'_cost'])) {
           $item_id = $_POST['item_'.$i.'_id'];
           $item_name = $_POST['item_'.$i.'_cost'];
           $result = mysqli_query($db, "UPDATE inventory SET item_cost='".$item_cost."' WHERE item_id='".$item_id."'");
        } else if (isset($_POST['item_'.$i.'_price'])) {
           $item_id = $_POST['item_'.$i.'_id'];
           $item_name = $_POST['item_'.$i.'_price'];
           $result = mysqli_query($db, "UPDATE inventory SET item_price='".$item_price."' WHERE item_id='".$item_id."'");
        }
     $i++;
     }
     mysqli_close($db);
     header('Location: inventory.php');

我遇到的麻烦是,我一直无法找到一种方法来传递"项目ID"和被修改到更新脚本的值。我可以通过值传递我需要的数据,然后使用list和explosion来分隔它们,但这样做我在每个文本字段中显示项目ID,这是不好的。

如果您知道使用onchange函数将这两部分数据传递给脚本的方法,我将非常感谢您的帮助。

您可以将其作为参数添加到onChange函数,然后在提交之前使用此值更新表单上的隐藏字段。

PHP

updateInventory('update_inventory.php', ".$row['item_id'].")
JavaScript

function updateInventory(action, item_id){
    // update hidden form value with item_id
    document.getElementById('item_id').value = item_id;
    document.getElementById('update_add_inventory').action = action;
    document.getElementById('update_add_inventory').submit();
}