【问题标题】:MySQL PHP array insert, multiple tables, not workingMySQL PHP数组插入,多个表,不起作用
【发布时间】:2014-09-19 13:12:29
【问题描述】:

我正在尝试使用新条目更新菜肴表,并将其交叉引用到现有的配料表。对于添加的每道菜,用户需要分配现有成分和多行所需的体积。提交时,应将菜肴输入到“菜肴”表中,并将分配的成分输入到“菜肴”链接表中。

我的桌子是这样设置的:

表:“菜肴”列:DishID、DishName、Serves 等... 表:“DishIng”列:DishID、IngID、体积 表:“成分”列:IngID、IngName、Packsize 等...

HTML:

  • 菜号:
  • 姓名:
  • 分类:
  • 服务:
  • 建议零售价:
  • 方法:
  • 来源:

  • 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?>
    

    目前在提交时,它只更新“Dishes”表并给我这个消息:'1 record addedError: You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在 '('0','$DishID'),('1','$IngID'),('2','$Volume') 附近使用正确的语法'在第 1 行'

    【问题讨论】:

    • 原问题已被编辑。

    标签: php html mysql database forms


    【解决方案1】:

    您如何做到这一点的高水平(虽然有很多方法,但这只是直接 DB/PHP/HTML 的一种):

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

    一旦用户提交表单:

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

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

    如何在php中遍历SQL结果:Iterate through Mysql Rows in PHP

    如何在php中遍历Form字段:PHP loop through array of HTML textboxes

    因为您正在接收用户输入并将其粘贴到 MySQL 插入查询中,所以您还需要确保在提交查询之前对输入进行清理,这样您就可以避免一些作恶者提取一些 SQL 注入并杀死您的D B。

    最后:这是一个非常模糊的问题,所以我预计它会被否决,我的回答也非常模糊。我之所以写它,是因为它涉及到一个非常普遍的总体想法,如果您刚刚开始使用 Web 开发,则很难以简洁的方式提出问题。在写这篇文章时,你可能会被卡住好几次。尝试将您的问题缩小到一个问题并将该问题/问题带到stackoverflow。您也可以访问 Google,因为您需要在这里做的所有事情都已经被无数其他人写在论坛、博客、维基和问答网站上。

    【讨论】:

      猜你喜欢
      • 2016-10-19
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多