我正在尝试创建一个非常简单的库存管理系统。我能够显示表“部分”中的所有项目,并且在文本框中显示金额。但是,当我将文本框中的值从 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>€ ".$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] - 它位于行循环之外?
即使更新,也会再次显示错误的结果。更新应该在上面选择!因此它会获取新更新的值。
要做什么:
- 首先为所有更新制作一张表格。
- 使用提交按钮获取 DATABASE_ID 值。
- 将“aantal”的名称设为“aantalDATABASE_ID”。
- 提交时检查 $_POST['update'],并使用它的值 (DATABASE_ID) 获取输入 $_POST["aantal".$_POST['update']]。
- 请更新,您已拥有所需的一切。
示例:
<?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>€ ".$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/