2015-04-27 20 views
6

Mam dwie tabele o nazwach op_group i options. Te dwie tabele są wypełniane wartościami tablicy. Na przykład chcę wstawić szczegóły pizzy do moich tabel.Jak wstawić dane tablicy do tabeli mysql

to wyglądać tak:

  1. Ser pizza i kiełbasa pizzy dostanie wstawiony do tabeli op_group.
  2. Pozostałe dane zostaną wstawione do tabeli options. Opcje te należy wstawić w oparciu o odpowiedni klucz obcy op_group id.

Menu Details

To co próbowałem. Wszystkie szczegóły są wstawiane, ale nie dla odpowiednich 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()); 
} 

Ten kod daje spowodować jak ten stół

Result

opcji włożonej danych wygląda następująco options table

jak rozwiązać ten problem?

+0

możesz użyć PHP serialize() do przechowywania tablic wartości do bazy danych i po jej odtworzeniu. LUB zrób json_encode() i json_decode() do przechowywania w bazie danych i pobierania również. – Shelim

+0

$ query6 = "SELECT * FROM op_group ORDER BY opg_id DESC LIMIT 1"; To jest problem, co robisz, to wybranie z powrotem wszystkich wpisów w op_group, a następnie dla każdego op_group wstawiasz wszystkie opcje bez sprawdzania, czy należy do pizzy serowej czy pizzy z kiełbasą –

+0

@AchalSaraiya to wybierz tylko wstawione opg_id. ($ opg_id = $ row6 ['opg_id'];). theese przykład echo 221 i 222. jak sprawdzić opcje dla odpowiedniej grupy opcji? – Tje123

Odpowiedz

1

Powodem, dla którego widzisz możliwość powielenia opcji dla każdej grupy opcji jest to, że twoja $queryValue2 jest powtarzana wielokrotnie dla każdej grupy opcji wewnątrz twojej najbardziej zewnętrznej pętli for($i = 0; $i < $itemCountz; $i++).

W obecnej postaci obecny sposób porządkowania danych wejściowych $_POST jest dość niechlujny (podobnie jak zduplikowane atrybuty wiersza). Zasugeruję, aby pogrupować swoje pola wprowadzania HTML przez każdą grupę opcji. Można spróbować czegoś takiego:

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

zauważyć, jak ja użyć atrybutu HTML name do grupy opcje żywności przez żywność. Następnie, jeśli przesłać ten formularz, widać, że tablica $_POST wydaje się wyglądać tak:

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") 
     ) 
    ) 
) 

Teraz możesz uporządkować swoje kody backend PHP z mniej więcej tak:

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 
    } 
    } 
} 

także , możesz użyć numeru mysqli.insert-id, aby uzyskać identyfikator wiersza ostatniego wstawionego wiersza. Wtedy możesz pozbyć się tej głupiej $query6 i jej pętli while.

Oczywiście, nie zapomnij odłączyć swoich wejść $_POST przed ich użyciem!

Robię się trochę zmęczony, jeśli są błędy, naprawię je jutro. Mam nadzieję, że to pomoże!

Powiązane problemy