如何将数组数据插入mysql表

时间:2015-04-27 05:00:52

标签: php mysql

我有两个名为op_groupoptions的表。这两个表由数组值填充。例如,我想在我的表中插入披萨细节。

看起来像这样:

  1. 奶酪披萨和香肠披萨将插入op_group表。
  2. 其他数据将插入options表格。应根据相关的外键op_group id。
  3. 插入这些选项

    Menu Details

    这是我尝试过的。已插入所有详细信息,但未插入相关的op_group

    $opg_name=$_POST['opg_name'];
    $price=$_POST['price'];
    
    $itemCountz = count($opg_name);
    $itemValues=0;
    $queryValue1 = "";
    
    for($i=0; $i<$itemCountz; $i++) {
      $itemValues++;
      if($queryValue1!="") {
        $queryValue1 .= ",";
      }
      $queryValue1 = "INSERT INTO op_group  
                      (opg_id,ml_id,cat_id,res_id,res_name,op_grp)                 
                     VALUES(NULL,'".$ml_id."','".$cat_id."','".$res_id."','".$res_name."','".$_POST["opg_name"][$i]."')";
    
      $result1= mysql_query($queryValue1)or die(mysql_error());                                 
    
      $query6= "SELECT  * FROM op_group ORDER BY opg_id DESC LIMIT 1" ;
      $result6= mysql_query($query6);
    
      while($row6 = mysql_fetch_assoc($result6)){
        $opg_id=$row6['opg_id'];
      }
    
      $itemCount2 = count($price);
      $itemValues1 = 0;
    
      $queryValue2 = "";
      for($j=0;$j<$itemCount2;$j++) {
        if(!empty($_POST["op_name"][$j])||!empty($_POST["price"][$j])) {
          $itemValues1++;
          if($queryValue2!="") {
            $queryValue2 .= ",";
          }
    
          $queryValue2 = "INSERT INTO options (op_id,opg_id,ml_id,cat_id,res_id,res_name,opt,price) VALUES (NULL,'".$opg_id."','".$ml_id."','".$cat_id."','".$res_id."','".$res_name."','".$_POST["op_name"][$j]."','".$_POST["price"][$j]."')";
        }           
      }
    
      $result2=mysql_query($queryValue2)or die(mysql_error());
    }
    

    此代码给出了这样的结果

    Result

    选项表插入的数据如下所示 options table

    如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您看到每个选项组重复选项的原因是因为您的$queryValue2循环内的每个选项组都在重复执行for($i = 0; $i < $itemCountz; $i++)

目前,您当前组织$_POST输入的方式非常混乱(您的重复行属性也是如此)。我建议您按每个选项组对HTML输入字段进行分组。你可以尝试这样的事情:

<div>
  <input type="text" id="first_order" name="orders[0][name]" /><br />
  <input type="text" name="orders[0][options][0][price]" /><br />
  <input type="text" name="orders[0][options][0][size]" /><br />   
  <input type="text" name="orders[0][options][1][price]" /><br />
  <input type="text" name="orders[0][options][1][size]" /><br /> 
</div>

<div>
  <input type="text" id="second_order" name="orders[1][name]" /><br />
  <input type="text" name="orders[1][options][0][price]" /><br />
  <input type="text" name="orders[1][options][0][size]" /><br />   
  <input type="text" name="orders[1][options][1][price]" /><br />
  <input type="text" name="orders[1][options][1][size]" /><br /> 
</div>

请注意我如何使用HTML name属性按食物分组食物选项。然后,如果您提交此表单,您会看到$_POST数组看起来像这样:

Array
(
    [orders] => Array
    (
        [0] => Array
        (
            [name] => "Cheese Pizza"
            [options] => [0] => Array([size] => "8'" 
                                      [price] => "12")
                         [1] => Array([size] => "12'" 
                                      [price] => "14")
        )

        [1] => Array
        (
            [name] => "Sausage Pizza"
            [options] => [0] => Array([size] => "8'" 
                                      [price] => "13")
                         [1] => Array([size] => "12'" 
                                      [price] => "16")
        )
    )
)

现在,您可以使用以下内容整理后端PHP代码:

foreach ($_POST['orders'] as $orders) {

  // .. some codes

  foreach($orders as $order) {
    // .. add codes to insert into op_groups where $order['name'] will give you the pizza name

    foreach($order['options'] as $details) {
      // .. add codes to insert into options where $details['size'] and $details['price'] will give you the corresponding values
    }
  }
}

此外,您可以使用mysqli.insert-id获取最后插入行的行ID。然后你可以摆脱那个愚蠢的$query6及其while循环。

当然,在使用之前不要忘记对$_POST输入进行消毒!

我有点累了,如果有错误,明天我会解决它们。希望它有所帮助!