如何使用数组中的值更新数据库?例如,假设我们有一个包含三个表的数据库:
膳食: mealnr(PK)、名称、排序
成分:成分(PK)、名称、库存
结构:膳食nr(FK)、成分nr(FK)、数量
我在数据库中填充了一些膳食和配料。每顿饭都包含多种成分。厨师决定您只需要 75 克原料 x,而不是餐 y 的 100 克,因此需要在数据库中进行更改。当然可以使用 SQL 命令来完成,但我想使用 PHP 中的表单来完成。
首先,我制作了一个显示所有餐食的页面。可以使用旁边的编辑按钮来编辑膳食,并且根据膳食编号,您可以更改该特定膳食的一种或多种成分的数量。在编辑页面上,所有成分名称和数量都显示在表格中。金额字段是文本字段,可以编辑。
我制作了这个脚本,但我不知道如何使用数组的值更新数据库。我用 foreach 循环尝试过,但它还不起作用。有人可以帮助我吗?
<?php
$conn = mysql_connect('localhost', 'root', '');
mysql_select_db("eatit", $conn);
$id = $_REQUEST['mealnr'];
$result = mysql_query("SELECT meals.name AS mealname, structure.amount, ingredients.name AS ingredientname
FROM Meals, Structure, Ingredients
WHERE meals.mealnr = structure.mealnr
AND structure.ingredientnr = ingredients.ingredientnr
AND meals.mealnr = '$id'");
if(isset($_POST['save']))
{
$new_amount = $_POST['amount[]'];
foreach ($new_amount as $value) {
mysql_query("UPDATE structure SET amount ='$value', WHERE mealnr = '$id'")
or die(mysql_error());
}
}
mysql_close($conn);
?>
<p><strong>Ingredients:</strong></p>
<?php
echo "<table>";
echo "<tr>";
echo "<th>Ingredient</th>";
echo "<th>Amount (gr)</th>";
echo "</tr>";
while($ingredient = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>";
echo $ingredient['ingredientname'];
echo "</td>";
echo "<td>";
echo '<input type="text" formmethod="post" name ="amount[]" value="' . $ingredient['amount'] . '" />';
echo "</td>";
echo "</tr>";
}
?>
<input type="submit" name="save" value="save" />
最佳答案
在 HTML 标记中,您已使用 amount[]
将名称为 amount
的元素声明为数组。
因此,在接收数据的 php 代码中,仅以这种方式引用金额就足够了:
$new_amount = $_POST['amount'];
而不是:
$new_amount = $_POST['amount[]']; // in fact, this is wrong
你的 foreach 没问题,你应该添加一些检查,以便 $value
实际上包含你期望的值,例如 int、float 或不小于零(或者你找到的任何检查)必要)。
foreach($new_amount as $value){
if($value != '' && $value >= 1){
//sql statements goes here.
}
}
以这种方式接收表单数据,然后直接将结果注入(inject)到 SQL 语句中总是很危险的:
$id = $_REQUEST['mealnr'];
如果您在直接将代码注入(inject) SQL 语句之前声明需要一个整数(id 的应该是),那么您已经编写了更安全的代码。
$id = (int)$_REQUEST['mealnr'];
此外,仅供记录 - mysql_* 库已弃用。正如评论中所指出的,尝试使用 PDO 或 mysqli 来代替 - 真的!
关于php - 使用数组值更新 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26824348/