【问题标题】:send named arrays to PHP via ajax通过 ajax 将命名数组发送到 PHP
【发布时间】:2018-03-18 22:00:45
【问题描述】:

我需要通过 ajax 调用向 php 提交一个动态创建的字段集,以将数据插入 DB。该列表适用于特定供应商的产品项目。我需要进行 ajax 调用,但不知道如何在数据字段中提交命名数组。

我的 HTML:

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

如何获取发布到我的 PHP 文件的值集,然后通过 for 循环插入它们

我的 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'];

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

【问题讨论】:

    标签: javascript php arrays ajax


    【解决方案1】:

    我认为你使用 jQuery 和 $.ajax,所以你可以序列化你需要的表单,它会以正确的格式从表单中收集所有数据:

    $('#form_id').serialize()
    

    您可以将它插入到 $.ajax 调用中的数据参数中

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

    在 php 代码中,在循环中进行数据库查询是非常愚蠢的。 我看到您通过 POST 请求从 HTML 表单中获取数据,因此不会有数百万个项目需要循环。 这是您可以使用的更高效的代码,数据库查询量减少了 2 倍:

    <?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>";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-06-17
      • 2019-06-22
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多