使用数组值更新MySQL数据库

时间:2014-11-09 02:32:59

标签: php mysql arrays

如何使用数组中的值更新数据库?例如,假设我们有一个包含三个表的数据库:

餐: mealnr(PK),名字,排序

成分:成分(PK),名称,库存

结构: mealnr(FK),成分(FK),数量

我在数据库中填写了一些膳食和成分。每餐都包含多种食材。厨师决定你只需要75克配料x而不是100克用餐y,所以需要在数据库中进行更改。当然可以使用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" />

1 个答案:

答案 0 :(得分:0)

在HTML标记中,您已使用amount将名称为amount[]的元素声明为数组。

所以,在你接收数据的php代码中,它足以通过这种方式引用数量:

$new_amount = $_POST['amount'];

而不是:

$new_amount = $_POST['amount[]']; // in fact, this is wrong

你的foreach很好,你应该添加一些检查,以便$value实际上包含你期望的值,例如int,float或不小于零(或者你认为必要的任何检查)。< / p>

foreach($new_amount as $value){
    if($value != '' && $value >= 1){
        //sql statements goes here.
        }
    }

以这种方式接收表单数据,然后直接将结果注入SQL语句总是很危险的:

$id = $_REQUEST['mealnr'];

如果在直接将代码注入SQL语句之前声明您希望有一个整数(因为id <#> 应该),那么您已经编写了更安全的代码。

$id = (int)$_REQUEST['mealnr'];

另外,仅为记录 - 不推荐使用mysql_ *库。正如评论中指出的那样,尝试使用PDO或mysqli - 真的!