MySQL PHP数组插入,多个表,无法正常工作

时间:2014-09-19 13:12:29

标签: php html mysql database forms

我试图用新条目更新菜肴表并将其交叉引用到现有的成分表中。对于添加的每个菜肴,用户需要分配多行所需的现有成分和体积。提交后,应将菜肴放入表格中。菜单&#​​39;并且指定的成分应该输入到“洗涤剂”中。链表。

我的表格设置如下:

表:"菜肴"专栏:DishID,DishName,Serves等... 表:" DishIng"列:DishID,IngID,卷 表:"成分"列:IngID,IngName,Packsize等...

HTML:               

  • DishID:
  •     
  • 姓名:
  •     
  • Catagory:
  •     
  • 服务:
  •     
  • SRP:
  •     
  • 方法:
  •     
  • 资料来源:
  •     
        
  • IngID:
  •     
  • 卷:
  • <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?>
    

    目前正在提交,它只会更新“菜肴”。表并给我这条消息:&#39; 1记录已添加错误:您的SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,以便在#&quot;(&#39; 0&#39;,&#39; $ DishID&#39;)附近使用正确的语法,(&#39; 1&#39; ;,&#39; $ IngID&#39),(&#39; 2&#39;&#39; $卷&#39;)&#39;在第1行&#39;

    1 个答案:

    答案 0 :(得分:1)

    您如何做到这一点的高级别(尽管有很多方法,这只是一个直接的DB / PHP / HTML):

    1. 您的php将创建一个表单,用于输入用户的菜肴字段。
    2. 然后你的php将从该菜的成分表中提取所有成分
    3. 您的php将遍历该查询返回的结果,并且每个结果都将:
    4. 为配料创建复选框类型输入,
    5. 为成分创建文本字段类型输入。
    6. 使用IngID
    7. 创建隐藏字段

      用户提交表单后:

      1. 您的php会根据提交的表单上的菜字段插入菜盘。
      2. 您的php将遍历表单提交中的成分字段,每个字段将:
      3. 确定是否选中了该成分复选框。如果是的话:
      4. 使用Hidden IngID字段和Volume字段
      5. 插入DishIng表

        基本上,有两个FOR循环。一个遍历最初的成分列表以制作表单,另一个循环遍历提交的表单。带有复选标记的每种成分都需要将自己的SQL INSERT语句添加到DishIng表中。

        如何在php中迭代SQL结果:Iterate through Mysql Rows in PHP

        如何遍历php中的表单字段:PHP loop through array of HTML textboxes

        因为您正在接受用户输入并将其粘贴到MySQL插入查询中,所以您还需要确保在提交查询之前清理输入,这样可以避免某些恶意攻击者拉出一些SQL注入并杀死您的D B。

        最后:这是一个非常含糊的问题,所以我预计它会被投票,我的反应也很模糊。我之所以写它只是因为它触及了一个非常普遍的整体想法,如果你刚刚开始进行Web开发,就很难以简洁的方式提问。在写这篇文章时你可能会被困几次。尝试将您的问题缩小到一个问题,并将该问题/问题转移到stackoverflow。你也可以点击Google,因为你需要在这里做的所有事情都是由其他人在论坛,博客,维基和Q&amp; A网站上撰写的。