0

目的: onchange 関数を使用して PHP テーブルに表示されるデータを変更し、インベントリ データベースを更新します。

データベースからデータを取得し、テーブルに表示しています。テキストフィールドにデータが表示されているので、編集可能です。データが編集されると、関数は 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」と変更された値を更新スクリプトに渡す方法を見つけることができなかったことです。必要なもののデータを値に渡し、リストと分解を使用してそれらを分離することでそれを行うことができますが、それを行うと、各テキストフィールドにアイテム ID が表示されてしまい、良くありません。

onchange 関数を使用して、両方のデータをスクリプトに渡す方法をご存じでしたら、よろしくお願いします。

4

1 に答える 1

1

これをパラメータとして 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();
}
于 2013-05-18T01:53:20.337 に答える