2013-05-18 54 views
0

目的:通過修改PHP表中顯示的數據使用onchange函數更新清單數據庫。如何使用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>"; 

這裏是我的 '平變化的功能':

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函數,我很感謝您的幫助。

+1

該代碼似乎很容易受到SQL注入。 – elclanrs

+0

@elclanrs感謝您的領導。代碼運行後,我會對其進行修改以防止注入。 –

+0

@elclanrs這種說法更好嗎? '$ result = $ db-> prepare(「UPDATE inventory SET item_name =?WHERE item_id =?」); $ result-> bind_param(「ss」,$ item_name,$ item_id); $ result-> execute(); $ result-> close();' 它似乎是這樣工作,但確認如果我正確執行它將不勝感激。謝謝。 –

回答

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(); 
} 
+0

感謝您的回覆。我發現這隻適用於一個單元格,因爲函數中的名稱是靜態的,所以如果我嘗試傳遞唯一名稱,它就不能區分單元格。有什麼想法嗎? –

+0

您需要使用'$ i'來標識行,或者在字段名稱中使用'row_id'來代替'$ i'。 – doublesharp

+0

謝謝你的幫助。我能夠通過給每個單元添加一個id來解決這個問題。 –

相關問題