如何使用PHP从动态增加的表单字段中保存信息到数据库


How to save information to a database from a dynamically increasing number of form fields using PHP?

我想做一个关于食谱的节目。如果用户愿意,他/她必须能够添加更多的成分,同时他/她也可以删除字段。

我在想我将如何命名多个字段,以及我如何能够获得值并将它们插入数据库?

任何帮助都是感激的。

在HTML中的字段名末尾使用方括号,PHP将显示为数组:

<input type="text" name="ingredients[]" value="Chicken" />
<input type="text" name="ingredients[]" value="Mushroom" />
<input type="text" name="ingredients[]" value="Cream" />

这将提供一个请求变量(让我们假设您在此场景中使用POST),以便请求数组(即$_POST)显示给PHP(即如果您调用var_dump):

array(1) {
  ["ingredients"]=>
  array(3) {
    [0]=>
    string(7) "Chicken"
    [1]=>
    string(8) "Mushroom"
    [2]=>
    string(5) "Cream"
  }
}

我假设您的应用程序数据库中有一个表来存储食谱详细信息,如食谱名称,照片等。该表中的每个条目都有一个主键RecipeId。

因为一个食谱可以有多个配料,所以这里存在一对多关系。因此,您必须创建另一个表来使用外键RecipeId存储配料详细信息。

现在用相应的RecipeId将配料详细信息插入到这个新表中。

同样适用于方向和烹饪说明,如果你认为一个食谱可以有多个方向或烹饪说明。

希望这对你有帮助。

实现:

在客户端,您已经添加了所需的html和javascript来添加多个条目。

你可以把配料数组对象发送到你的php页面。

$.ajax({
   url: "CreateRecipe.php",
   data: { recipeName: "myRecipe", 
           ingredients: [ { name: "", amount: "", unit: "" },
                          { name: "", amount: "", unit: "" } ],
           directions: "",
           cookingInstructions: "" }
  success: function(){ }
});

至少可以有5列(id、name、Ingredients、Directions、Instruction)来完成这样的任务。虽然您以一种显而易见的方式保存id和name,但对于其余三列,您需要将其保存为序列化数组。因此,您可以为这三列的每个部分设置任意多的字段,例如…

<input name="ingredients[]" ... />
<input name="ingredients[]" ... />
<input name="ingredients[]" ... />

和其他两个字段,然后在将其保存为列值

之前将其转换为序列化数据。
// You can do this before save the value into your database
$ingredients = serialize($_POST['ingredients']);
// While you retrieve the value from your database, unserialize it to get your array back
$ingredients = unserialize($row['ingredients']);