2015-04-27 3 views
6

У меня есть две таблицы с именем op_group и options. Эти две таблицы заполняются значениями массива. Например, я хочу вставить детали пиццы в свои таблицы.Как вставить данные массива в таблицу mysql

Это выглядит следующим образом:

  1. сыра пицца и Колбаса пицца будет вставляются в op_group таблицу.
  2. Другие данные будут вставлены в таблицу options. Эти параметры должны быть вставлены на основе соответствующего внешнего ключа op_group id.

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

как решить эту проблему?

+0

вы можете использовать PHP serialize() массив для хранения значений массива в базе данных и после получения unserialize. ИЛИ делать с json_encode() и json_decode() для хранения в базе данных и получения. – Shelim

+0

$ query6 = "SELECT * FROM op_group ORDER BY opg_id DESC LIMIT 1"; Проблема заключается в том, что вы выбираете назад все записи в op_group, а затем для каждой группы op_group вы вставляете все параметры, не проверяя, принадлежит ли она к пицце для сыра или к пицце Sausage. –

+0

@AchalSaraiya она выбирает только вставленную opg_id. ($ opg_id = $ row6 ['opg_id'];). Например, это echo 221 и 222. Как я могу проверить параметры для соответствующей группы параметров? – Tje123

ответ

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, чтобы получить идентификатор строки последней вставленной строки. Тогда вы можете избавиться от этого глупого $query6 и его петли while.

Конечно, не забудьте дезинфицировать свои входы $_POST перед их использованием!

Я немного устал, если есть ошибки, я исправлю их завтра. Надеюсь, поможет!

Смежные вопросы