我在尝试用新条目更新菜肴表并将其交叉引用到现有的配料表中。对于添加的每道菜,用户都需要分配现有配料和多条生产线所需的体积。提交时,应将盘子输入“盘子”表格中,并将所分配的成分输入到“DishIng”链接表格中。从PHP插入多个MySQL的问题
我的表是这样设置:
Table: "Dishes" Columns: DishID, DishName, Serves, etc...
Table: "DishIng" Columns: DishID, IngID, Volume
Table: "Ingredients" Columns: IngID, IngName, Packsize etc...
HTML:
<form action="Array.php" method="post">
<ul>
<li>DishID: <input type="text" name="DishID"></li>
<li>Name: <input type="text" name="DishName"></li>
<li>Catagory : <input type="text" name="DishCatID"></li>
<li>Serving: <input type="text" name="Serving"></li>
<li>SRP: <input type="text" name="SRP"></li>
<li>Method : <input type="text" name="Method"></li>
<li>Source : <input type="text" name="SourceID"></li>
<br>
<li>IngID: <input type="text" name="IngID"></li>
<li>Volume: <input type="text" name="Volume"></li>
<li>IngID: <input type="text" name="IngID"></li>
<li>Volume: <input type="text" name="Volume"></li>
<li>IngID: <input type="text" name="IngID"></li>
<li>Volume: <input type="text" name="Volume"></li>
</ul>
<input type="submit">
</form>
动态地添加在HTML成分的排任何建议将是非常欢迎的。
PHP:
<?php
require_once('db_connect.php');
$DishID = mysqli_real_escape_string($con, $_POST['DishID']);
$DishName = mysqli_real_escape_string($con, $_POST['DishName']);
$DishCatID = mysqli_real_escape_string($con, $_POST['DishCatID']);
$Serving = mysqli_real_escape_string($con, $_POST['Serving']);
$SRP = mysqli_real_escape_string($con, $_POST['SRP']);
$Method = mysqli_real_escape_string($con, $_POST['Method']);
$SourceID = mysqli_real_escape_string($con, $_POST['SourceID']);
$IngID = mysqli_real_escape_string($con, $_POST['IngID']);
$Volume = mysqli_real_escape_string($con, $_POST['Volume']);
$array = array('$DishID', '$IngID', '$Volume');
$sql="INSERT INTO Dishes (DishID, DishName, DishCatID, Serving, SRP, Method, SourceID)
VALUES ('$DishID', '$DishName', '$DishCatID', '$Serving', '$SRP', '$Method', '$SourceID')";
$sql2 = "INSERT INTO DishIng (DishID, IngID, Volume) VALUES ('$DishID', '$IngID', '$Volume')";
$it = new ArrayIterator ($array);
$cit = new CachingIterator ($it);
foreach ($cit as $value)
{
$sql2 .= "('".$cit->key()."','" .$cit->current()."')";
if($cit->hasNext())
{
$sql2 .= ",";
}
}
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
if (!mysqli_query($con,$sql2)) {
die('Error: ' . mysqli_error($con));
}
echo "records added";
require_once('db_disconnect.php');
php?>
目前上提交,它仅更新“菜”表,并给了我这个消息:“1个纪录addedError:您在您的SQL语法错误; ('0','$ DishID'),('1','$ IngID'),('2','$ Volume')附近使用正确的语法检查与您的MySQL服务器版本相对应的手册。 'at line 1'
变量不会在单引号内部扩展。所以'$ array'包含字符串'$ DishID',而不是该变量的值。你为什么要把这些值放在引号中? – Barmar 2014-09-23 07:49:35
您的表单中有多个字段具有相同的名称。只有其中一个将被提交。你应该给他们以'[]'结尾的名字,然后PHP将它们收集到一个数组中。 – Barmar 2014-09-23 07:51:09
我真的很努力做到这一点,正确的是我的foreach语句的基础,正如其他人正在采取的那样,而不是数组元素。你会如何建议这是最好的书面? – nbren007 2014-09-23 11:15:47