PHP 和 SQL - 更新查询无法更新值

标签 php mysql sql

我正在尝试创建一个非常简单的库存管理系统。我能够显示表“部分”中的所有项目,并且在文本框中显示金额。但是,当我将文本框中的值从 0 更改为 5 并按下提交按钮时,它不会更新库存。

下面是我的代码,我在更新查询方面没有太多经验,但显然我在 php.net 上读过相关内容。

                      <?php
                  echo "<table width=\"800\" class=\"nieuws\">";
                    $db=mysqli_connect("localhost","root","","lichtwinkel");
                    $p=mysqli_query($db, "SELECT * FROM parts WHERE product LIKE 1");

                    echo "<form method='post' action=''>";
                    echo "<tr><th></th><th>Onderdeel nummer</th><th>Eigenschappen</th><th>Prijs</th><th>Voorraad</th></tr>";

                    while ($row = mysqli_fetch_array($p)){
                      echo "<tr>";
                      echo "<td><img class='lamp' src='../css/images/".trim($row['partnr']).".png' alt='Geen afbeelding beschikbaar'></td>";
                      echo "<td>".$row['partnr']."</td>";
                      echo "<td>".$row['specs']."</td>";
                      echo "<td>&euro; ".$row['price']."</td>";
                      echo "<td><input type='text' id='aantal' name='aantal' value=$row[voorraad] /></td>";
                      echo "<td><input type='submit' id='update' name='update' value='Update' /></td>";
                      echo "</tr>";
                    }
                    echo "</table>";

                    if(isset($_POST['aantal']) && $_POST['update']) {
                      $y = $_POST['aantal'];
                      $p=mysqli_query($db, "UPDATE parts SET voorraad = '$y' WHERE partnr = $row[0]");
                    }

                    echo "</form>"
                  ?>

简单地说,我想要实现的目标如下: 每当我更改文本框中显示的值并按下提交按钮时,我希望它更新数据库中的值。

有人知道我做错了什么吗?有任何想法吗?我应该阅读的文章? 所有帮助将不胜感激。

谢谢。

最佳答案

据我所知,你根本就做错了。

首先,您不能在多个 td 元素中使用表单标签。

您没有关闭表单标签,只是在结束时关闭。 (因此,如果循环 6 次,您将打开 6 个表单,但其中一个已结束!)。

更新时,您选择行[0] - 它位于行循环之外?

即使更新,也会再次显示错误的结果。更新应该在上面选择!因此它会获取新更新的值。

要做什么:

  1. 首先为所有更新制作一张表格。
  2. 使用提交按钮获取 DATABASE_ID 值。
  3. 将“aantal”的名称设为“aantalDATABASE_ID”。
  4. 提交时检查 $_POST['update'],并使用它的值 (DATABASE_ID) 获取输入 $_POST["aantal".$_POST['update']]。
  5. 请更新,您已拥有所需的一切。

示例:

<?php
echo "<form method='post' action=''>";
echo "<table width=\"800\" class=\"nieuws\">"   
$db=mysqli_connect("localhost","root","","lichtwinkel");

if(isset($_POST['update']) && !empty($_POST['update'])) {
    $y = $_POST['aantal'.$_POST['update']];
    $p=mysqli_query($db, "UPDATE parts SET voorraad = '".$y."' WHERE partnr = '".$_POST['update']."'");
    }

$p=mysqli_query($db, "SELECT * FROM parts WHERE product LIKE 1");
echo "<tr><th></th><th>Onderdeel nummer</th><th>Eigenschappen</th><th>Prijs</th><th>Voorraad</th></tr>";
while ($row = mysqli_fetch_array($p)){
    echo "<tr>";
        echo "<td><img class='lamp' src='../css/images/".trim($row['partnr']).".png' alt='Geen afbeelding beschikbaar'></td>";
        echo "<td>".$row['partnr']."</td>";
        echo "<td>".$row['specs']."</td>";
        echo "<td>&euro; ".$row['price']."</td>";
        echo "<td><input type='text' id='aantal' name='aantal".$row[0]."' value='".$row[voorraad]."' /></td>";
        echo "<td><input type='submit' id='update' name='update' value='".$row[0]."' /></td>";
    echo "</tr>";
}
echo "</table>";
echo '</form>';
?>

毕竟,要小心 SQL 注入(inject)。 “aantal”值是用户输入。因为提交值可以更改。

关于PHP 和 SQL - 更新查询无法更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40128637/

相关文章:

php - Google map 未在 PHP/MySQL 页面中显示

mysql - 具有多个条件的 SUM IF

c# - 如何在写入表之前检查数据是否存在

MySQL 最长前缀匹配 100 万条记录与 3000 种可能性

php - 如何使用 JQuery 的 "load"函数来获取变量中所需的数据?

PHP 日文验证码

php - 使用查询两次 mysql_fetch_array

php - 如何通过mysql表跟踪parent_id?

php - Mysql 从另一个表中选择 sum()

sql - 将金钱转换为文本并保持格式