MySQL PHP数组插入,多个表,不工作

MySQL PHP数组插入,多个表,不工作,php,html,mysql,database,forms,Php,Html,Mysql,Database,Forms,我正在尝试用一个新条目更新一张菜谱,并将其与现有的配料表进行交叉引用。对于添加的每道菜,用户需要在多行上指定现有配料和所需体积。提交时,应将菜肴输入“菜肴”表格,并将指定的配料输入“菜肴”链接表格 我的桌子是这样设置的: 表:“菜肴”列:DishID、DishName、services等。。。 表:“DishIng”列:DishID、IngID、Volume 表:“成分”列:IngID、IngName、Packsize等 HTML: 迪希德: 姓名: 分类: 服务: SRP: 方法: 资料来源:

我正在尝试用一个新条目更新一张菜谱,并将其与现有的配料表进行交叉引用。对于添加的每道菜,用户需要在多行上指定现有配料和所需体积。提交时,应将菜肴输入“菜肴”表格,并将指定的配料输入“菜肴”链接表格

我的桌子是这样设置的:

表:“菜肴”列:DishID、DishName、services等。。。 表:“DishIng”列:DishID、IngID、Volume 表:“成分”列:IngID、IngName、Packsize等

HTML:
  • 迪希德:
  • 姓名:
  • 分类:
  • 服务:
  • SRP:
  • 方法:
  • 资料来源:

  • 英吉德:
  • 音量:
  • <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>
    
  • IngID:
  • 卷:
  • 英吉德:
  • 卷:
  • 任何在HTML中动态添加一行成分的建议都是非常受欢迎的

    PHP:


    这是一个很好的方法(虽然有很多方法,但这只是一种直接使用DB/PHP/HTML的方法):

  • 您的php将创建一个表单来输入用户的dish字段
  • 然后,php将从该菜的配料表中提取所有配料
  • 您的php将遍历从该查询返回的结果,对于每个结果:
  • 为配料创建复选框类型输入,以及
  • 为成分和创建文本字段类型输入
  • 使用IngID创建一个隐藏字段
  • 用户提交表单后:

  • 您的php将根据提交的表单上的dish字段将插入到dish表中
  • 您的php将迭代表单提交中的“成分”字段,每个字段都将:
  • 确定是否选中了“成分”复选框。如果是,它将:
  • 使用隐藏的IngID字段和Volume字段插入碟形表
  • 本质上,有两个FOR循环。一个循环通过最初的成分列表来制作表单,另一个循环通过提交的表单。每个带有复选标记的配料都需要自己的SQL INSERT语句才能添加到配料表中

    如何在php中迭代SQL结果:

    如何在php中迭代表单字段:

    因为您正在接受用户输入并将其粘贴到MySQL insert查询中,所以您还需要确保在提交查询之前对输入进行清理,以避免一些恶棍拉一些SQL注入并杀死数据库


    最后:这是一个相当模糊的问题,所以我预计它将被否决,我的回答也相当模糊。我之所以写这篇文章,是因为它涉及到一个非常普遍的总体概念,如果您刚刚开始web开发,那么很难用简洁的方式提问。在写这篇文章时,你可能会被卡住好几次。试着把你的问题缩小到一个问题上,然后把这个问题带到stackoverflow。你也可以点击谷歌,因为你在这里需要做的一切都是由无数其他人在论坛、博客、维基和问答网站上写的

    原来的问题已被编辑。
    <?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?>