当前位置: 首页 > 知识库问答 >
问题:

使用PHP在while循环中使用动态输入字段数组更新MYSQL数据库

倪风史
2023-03-14

我不是新来的,但这是我第一次在这个网站上寻求帮助。

我有一个非常有趣的问题,我已经在下面的同时循环中呈现了许多动态输入字段

<form class="" action="" method="post">
  <div class="form-item-special">
    <input class="colorize-button"
           type="submit" name="update_all_stock" value="Update All" />
  </div>

  <table>
    <thead>
      <tr>
        <th>Location ID</th>
        <th>Item Number</th>
        <th>Name</th>
        <th>Description</th>
        <th>Storage</th>
        <th>Edit Stock</th>
        <!-- <th>Delete</th> -->
        <th>In Stock</th>
        <!-- <th>Adjust</th> -->
      </tr>
    </thead>
    <tbody>

    <?php  
      if(isset($_GET['l_id'])) {
        $selected_items_id = $_GET['l_id'];

        $query = "SELECT * FROM items WHERE item_location_id = '$selected_items_id'";
        $selected_items_result = mysqli_query($connection, $query);

        if(!$selected_items_result) {
          echo "No items found " . mysqli_error($connection);
        } else {
          while($row = mysqli_fetch_assoc($selected_items_result)) {

            $item_id = $row['item_id'];
            $item_location_id = $row['item_location_id'];
            $item_number = $row['item_number'];
            $item_name = $row['item_name'];
            $item_description = $row['item_description'];
            $item_storage = strtoupper($row['item_storage']);
            $item_inventory = $row['item_inventory'];

            echo "<tr>";

            echo    "<td>$item_location_id</td>";
            echo    "<td>$item_number</td>";
            echo    "<td>$item_name</td>";
            echo    "<td>$item_description</td>";
            echo    "<td>$item_storage</td>";
            echo    "<td><a href='users.php?source=edit_stock&i_id=$item_id'>Edit Stock</a></td>";
            echo    "<td>$item_inventory</td>";


            echo    "<td><input style='width: 50px;' type='number' name='adjust[][".$item_id."]' value='0' /></td>";


            echo    "</tr>";
          } // end while statement
        } // end else statement

      } // end $_GET['l_id']
    ?>

    </tbody>
  </table>
  <!-- <div class="form-item-special">
    <input class="colorize-button"
           type="submit" name="update_all_stock" value="Update All" />
  </div> -->
</form>

我的目标是使用name='adjust[]'动态输入字段更新mysql数据库中的多行。目前有200多个项目更新为表列项目库存。表已存在,列已设置为整数。

(表:项)--(列:item_inventory(接受整数))

这是我得到的↓它目前更新循环中最后一个数组项的所有行。因为我使用(-=$i)向后递增,所以它使用第一个用户输入字段更新所有行。因此,如果我更新输入字段1,例如顶部输入字段的数字,例如数字12,那么所有字段都将更新为12,当它们应该保持不变时,只有第一行应该更新。

此外,所有字段都应该用其相应的输入字段来更新。本质上,简而言之,当按下提交按钮时item_inventory其具有221行将被更新为具有其相应的用户输入,如果不存在用户输入,则该值应保持相同。

以下是更新查询和其余代码...

if(isset($_POST['update_all_stock'])) {
    $i = 0;
    foreach ($_POST['adjust'] as $key => $value) {
      $new_array = $_POST['adjust'];
      $value = $new_array[$key -= $i];
      $value = implode(",", $value);  

      $i ++;
    }
    $update_stock = "UPDATE items SET ";
    $update_stock .= "item_inventory = '". $value ."'";

    $update_stock_result = mysqli_multi_query($connection, $update_stock);

    if(!$update_stock_result) {
      echo "FAILED TO UPDATE STOCK ".mysqli_error($connection);
    }
  }

我已经为此工作了两个多星期,到处寻找答案。请帮忙!!!!

共有2个答案

乐正洲
2023-03-14

花了一段时间才弄清楚,但答案在这里。我只需要改变Echo

`<td><input style='width: 50px;' type='number' name='adjust[][".$item_id."]' value='0' /></td>";` 

为此:

echo   "<td><input style=' width: 60px;' type='number' name='subAdjuster[]' value=''/></td>";
echo   "<td style='display: none;'><input type='number' name='item_id[]' value='$item_id' /></td>";

在数组中存储值。然后我可以通过这样做来完成多个更新帖子。

然后更新看起来像这样:

if(isset($_POST['update_all'])) {
    $adjusters = $_POST['subAdjuster'];
    $item_id = $_POST['item_id'];
    foreach ($adjusters as $index => $adjuster) {
      if(!empty($adjuster)) {
        $adjuster = mysqli_real_escape_string($connection, $adjuster);
        if($adjuster <= 0) {
          $adjuster = 0;
        }
        $query = "UPDATE items SET item_inventory = item_inventory - '".$adjuster."' WHERE item_id = $item_id[$index]";
        $update_result = mysqli_query($connection, $query);
        // print_r is to allow you to print the array 
        // print_r($adjuster."/".$item_id[$index]."<br />");
      }
    }

祝你在别的地方找到它

蔚承天
2023-03-14

循环结束时,$value中有什么内容?在我看来,它似乎没有指定要更新的项id,因此它使用相同的值更新所有行,这是循环结束时$value保留的值,因为每次都会覆盖它。

如果调整值不是零,为什么不在循环中运行查询?添加一些echo语句,查看您的变量有哪些值可以帮助调试。

 类似资料:
  • 问题内容: 使用PHP ,我想做一个while循环,该循环读取一个大文件并在请求时发送当前行号。 使用Ajax ,我想获取当前行数并将其打印到页面上。 使用html按钮 ,我希望能够单击并激活或终止仅运行一次并调用 ajax方法 的javascript线程。 我给了它一个镜头,但是由于某种原因,除非我注释掉该函数,否则什么都不会打印,当注释掉它时,它将显示整个循环结果: 已处理1行,已处理2行,已

  • 我试图在一次提交中实现多个更新。我有一个包含许多行的表,并且希望能够通过切换到下一个插入框来更新每行中的一个字段。 我的代码是这样的:-//start a table echo'; 当我打印$\u POST数组时,一切都很好,但是变量为Null。我知道我不能在多个阵列上进行foreach(至少我不认为我可以),那么我还缺少其他技巧吗?我离这里不远了,因为$u Post打印中有正确的数据。 顺便说一

  • 我有mysql数据库。在我的页面上,当我点击一个按钮时,我从数据库中检索数据。所有数据都显示在页面上。我得到一行id、一行名称和一行数字(在输入字段中)。举个例子,我得到: 51 桌子 200 52 头 320 53 玻璃 456个 因为所有值编号(第3行)都在输入字段中,所以可以更改它们。我创建了提交按钮,所以我可以提交更改的值。这是我的js代码: 所以在控制台中,我得到了所有必要的字段。它们为

  • 我想使用Ajax更新数据,下面是示例代码。SweetAlert被移位,因为它已经更新了,但是它在数据库中没有生效,因此它给出了一个错误。 这是在单击submit按钮时提交表单的Ajax脚本。 这段代码用于php服务器端,用于将数据插入数据库。

  • 所以,我的程序中有公司和员工实体。雇员为公司工作,在雇员表中有company_id(外键),我跟踪某些雇员为哪个公司工作。现在,如果我想更新该字段,如何更改公司员工正在工作? 我想更新员工类中的company_id,使用字段int companyId来引用该列,但是它不起作用。在员工服务实施中。类如果我想更新该列(这意味着员工不是为公司工作,或员工更改了公司),我必须调用公司类,这不是我想在员工表

  • 我正在从Sahni的“C语言数据结构基础”中学习数据结构。在使用动态数组的循环队列中,作者提到了以下几点, 假设capacity是循环队列的初始容量,我们必须首先使用realloc增加数组的大小,这将把最大容量元素复制到新的数组中。为了获得正确的循环队列配置,我们必须将右段中的元素(即元素a和B)滑动到数组的右端(参见图3.7.d)。数组加倍和向右滑动一起最多复制2*容量-2个元素。