【问题标题】:MySQL Update 'n' number of rows with new info by row[id]?MySQL按行[id]用新信息更新'n'行数?
【发布时间】:2012-06-27 06:47:25
【问题描述】:

好的,我有一组 php 文件,它们可用作基于 Web 的库存系统。在搜索一个项目并从列表中选择一个之后,用户将被带到一个页面,该页面显示先前选择的项目的当前数量。在同一页面上,javascript 用于添加或减去当前数量值。我希望能够在 Present Quantity texboxes 中获取更新的值,并在 MySQL 中更新它们。

请注意,显示的项目数量因搜索页面上选择的数量而异。

以下是更新页面,用户可以在此处对数量值进行加减:

<html>
<title>Update Selections</title>
<body>
<?php
    include("menu.php");
    include("sqlconnect.php");


?>
<script type="text/javascript">
/*<![CDATA[*/

function add(obj,ud){
 while (obj.parentNode){
  if (obj.nodeName.toUpperCase()=='TR'){
   obj=obj.getElementsByTagName('INPUT')[0];
   break;
  }
  obj=obj.parentNode;
 }
 if (obj.nodeName.toUpperCase()=='INPUT'){
  obj.value=Math.max(obj.value*1+ud,0);
 }
}


/*]]>*/
</script></head>


<p align="center"><b>Make Updates:</b>
<br />
<br />
The following items were selected for quantity update:
<br />
<br />
<table border="1">
<tr><th>Item:</th>
<th>QUANTITY</th>
<th>ADD/SUBTRACT</th></tr>
<style>
textarea {resize: none;}
</style>
<form action="updatequantityprocess.php" method="post">
<?php

        //$row_id = $_POST['itemselect'];
        foreach ($_POST['itemselect'] as $confirm)
        {

            $result = mysql_query("SELECT * FROM inventory WHERE id='$confirm'");
            while ($row = mysql_fetch_array($result))
            {
                echo "<tr><td>" . $row['Item'] . "</td>";
                echo "<td bgcolor='grey'><input type='text' id='value' name='itemupdate[]' disabled='disabled' style='text-align: center' value='" . $row['QuaninInventory'] . "'><input type='hidden' value='" . $row['id'] . "' name='itemid[]'></td>";
                echo "<td><div align='center'><input type='button' value='+' onclick='add(this, 1)'><input type='button' value='-' onclick='add(this, -1)'></div></td></tr>";

            }
        }
        echo "</table>";
?>
<br />
<br />
<input type="submit" value="Update">
<br />
<INPUT TYPE="BUTTON" VALUE="<-- Back to Results" ONCLICK="window.location.href='http://localhost/Inventory/quantitybybrandprocess.php'">
</p>
</form>
</body>     
</html>

我不知道如何构造下一页quantityupdateprocess.php,使用itemupdate[]item[] 数组来更新MySQL 数据库中的选定项。

【问题讨论】:

    标签: php javascript mysql html arrays


    【解决方案1】:

    使用 foreach 循环遍历所有 itemid,并单独更新每一个。

    foreach($_POST["itemids"] as $itemid){
        //Do mysql update based on other fields (make sure to escape itemid, and the other fields as well, or even better use prepared statements).
    }
    

    要访问当前项目的数量,请执行以下操作。

    foreach($_POST["itemids"] as $i=>$itemid){
        //do mysql updates where $_POST["itemupdate"][$i] is the item update for the item id.
    }
    

    【讨论】:

    • 是的,但我还需要更新每个选定项目的新数量。所以我有 2 个 $_POST 数组,一个带有所选行的 id,另一个带有用户输入的新值。我不认为您的代码可以做到这一点。我知道我需要使用 foreach 循环来遍历 id,但是我必须从 $_POST['itemupdate'] 数组中更新每个 id 的数量。
    【解决方案2】:

    我将根据您的问题标题以更简单的方法呈现它:

    首先,强烈建议不要使用mysql 扩展,而是使用PHP PDO

    例子:

    $DBH = new PDO('mysql:host=http://yourhost.com;dbname=yourdbname;charset=utf8', 'username', 'password');
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $STH = $DBH->prepare('INSERT INTO `yourtable` (`column1`, `column2`) VALUES (?, ?)');
    
    foreach($array as $value) {
        $STH->bindParam(1, $value);
        $STH->bindParam(2, $value);
        $STH->execute();
    }
    
    $DBH = null;
    

    您可以使用prepared statements 自动转义所有无效或有问题的字符。您还可以制作一个准备好的语句,并在优化整个过程的同时重复使用它来插入大量数据。

    您可以在phpro.org's PDO tutorial pages 上找到更多信息。他们解释得很好。

    关于您的问题,在这种情况下,您可能需要执行以下操作:

    假设您通过$_POST 收到id =&gt; values[] 形式的数组,因此您的查询将如下所示:

    $DBH = new PDO('mysql:host=http://yourhost.com;dbname=yourdbname;charset=utf8', 'username', 'password');
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $STH = $DBH->prepare('UPDATE `yourtable` SET `column1` = ?, `column2` = ? WHERE `id` = ?');
    
    foreach($array as $id => $values) {
        $STH->bindParam(1, $values[0]);
        $STH->bindParam(2, $values[1]);
        $STH->bindParam(3, $id);
        $STH->execute();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多