2017-10-07 7 views
1

DBにデータを挿入するためにphpへのajax呼び出しを介して動的に作成されたフィールドセットを提出する必要があります。このリストは、特定のサプライヤの製品アイテム用です。私はajax呼び出しを行う必要がありますが、データフィールドに名前付き配列を提出する方法を知らない。名前付き配列をajax経由でPHPに送る

マイHTML:

$supplier_selection = $_POST['supplier_id']; 
$item_id = $_POST['item_id']; 
$array_description = $_POST['description']; 
$array_quantity = $_POST['quantity']; 
$array_unit_price = $_POST['unit_price']; 
$array_sale_price = $_POST['sale_price']; 

    foreach ($item_id as $key => $value) { 
    $check_item_id = "SELECT item_id from products where item_id='" . $mysqli->real_escape_string($item_id [$key]) . "'LIMIT 1"; 
    $resultset = $mysqli->query($check_item_id); 
    if ($resultset->num_rows == 0) { 
     //perform insert to table 
     $insert_product = "INSERT INTO `products` (`id`, `item_id`, `supplier_id`, `description`, `quantity`, `purchase_price`, `retail_price`) " 
       . "VALUES (NULL, '" . $mysqli->real_escape_string(item_id) . "','$supplier_selection', '" . $mysqli->real_escape_string($array_description[$key]) . "', '" . $mysqli->real_escape_string($array_quantity[$key]) . "', '" . $mysqli->real_escape_string($array_unit_price[$key]) . "', '" . $mysqli->real_escape_string($array_sale_price[$key]) . "')"; 
     $insert_item = $mysqli->query($insert_product); 

     if (!$insert_item) { 
      echo $mysqli->error; 
      echo "<script>"; 
      echo "alert('Error inserting!')"; 
      echo "</script>"; 

     } else { 
      echo "successfully inserted" . $mysqli->real_escape_string($item_id[$key]) . ""; 
      echo "<script>"; 
      echo "alert('Items Added successfully')"; 
      echo "</script>"; 
     } 
    } 
} 
:私のPHPファイルは以下の通りですどのように私は私のPHPファイルに投稿された値セットを取得することができ、その後、forループ

を経由して、それらを挿入

<div class='col-md-2 '><input name="item_number[]" id="item_number" class="form-control" placeholder='item number' /></div> 
    <div class='col-md-4 '><input name="description[]" id="description" class="form-control" placeholder='description' /></div> 
    <div class='col-md-1 '><input name="quantity[]" id="quantity" class="form-control" placeholder='Quantity' /></div> 
    <div class='col-md-2 '><input name="unit_price[]" id="unit_price" class="form-control" placeholder='Unit Price' /></div> 
    <div class='col-md-2 '><input name="sales_price[]" id="sales_price" class="form-control" placeholder='Sales Price' /></div> 
    <div><button name="add_item" id="add_item" class="btn btn-primary">+</button></div> 

答えて

0

jQueryと$ .ajaxを使用すると、必要なフォームをシリアル化するだけで、フォームからすべてのデータを適切な形式で収集できます:

$('#form_id').serialize() 

あなたは$アヤックスループ内でDBクエリを作ることは非常に愚かであるPHPコードで呼び出し

$.ajax({ 
    url: '/your/url/here', 
    data: $('#form_id').serialize() 
}); 

へのデータのparamに挿入することができます。 POSTリクエストによってHTMLフォームからデータを取得しているので、ループする項目が何百万もあることはありません。 より効率的なコードを使用することができます。ちょっとだけDBクエリの2分の1を節約します:

<?php 
$supplier_selection = $_POST[ 'supplier_id' ]; 
$item_id = $_POST[ 'item_id' ]; 
$array_description = $_POST[ 'description' ]; 
$array_quantity = $_POST[ 'quantity' ]; 
$array_unit_price = $_POST[ 'unit_price' ]; 
$array_sale_price = $_POST[ 'sale_price' ]; 
//get all item IDs received 
$all_keys = array_keys($item_id); 
//get all items in DB with item_id in received array 
$not_to_insert_sql = "SELECT item_id from products where item_id IN (" . implode(',', $all_keys) . ")"; 
$not_to_insert = $mysqli->query($not_to_insert_sql); 
//need to get only IDs 
for ($i = 0, $c = count($not_to_insert); $i < $c; ++$i) { 
    $not_to_insert[] = $not_to_insert[ $i ][ 'item_id' ]; 
} 
//let's get difference between what's in the array and what is already in DB 
$to_insert = array_diff($all_keys, $not_to_insert); 
// let's loop only what we need to insert 
for ($i = 0, $c = count($to_insert); $i < $c; ++$i) { 
    //perform insert to table 
    $insert_product = "INSERT INTO `products` (`id`, `item_id`, `supplier_id`, `description`, `quantity`, `purchase_price`, `retail_price`) " 
     . "VALUES (NULL, '" . $mysqli->real_escape_string(item_id) . "','$supplier_selection', '" . $mysqli->real_escape_string($array_description[ $key ]) . "', '" . $mysqli->real_escape_string($array_quantity[ $key ]) . "', '" . $mysqli->real_escape_string($array_unit_price[ $key ]) . "', '" . $mysqli->real_escape_string($array_sale_price[ $key ]) . "')"; 
    $insert_item = $mysqli->query($insert_product); 

    if (! $insert_item) { 
     echo $mysqli->error; 
     echo "<script>"; 
     echo "alert('Error inserting!')"; 
     echo "</script>"; 

    } 
    else { 
     echo "successfully inserted" . $mysqli->real_escape_string($item_id[ $key ]) . ""; 
     echo "<script>"; 
     echo "alert('Items Added successfully')"; 
     echo "</script>"; 
    } 
} 
関連する問題