Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过ajax将命名数组发送到PHP_Javascript_Php_Arrays_Ajax - Fatal编程技术网

Javascript 通过ajax将命名数组发送到PHP

Javascript 通过ajax将命名数组发送到PHP,javascript,php,arrays,ajax,Javascript,Php,Arrays,Ajax,我需要通过ajax调用向php提交一个动态创建的字段集,以便将数据插入数据库。该列表用于特定供应商的产品项目。我需要进行ajax调用,但不知道如何在数据字段中提交命名数组 我的HTML: <div class='col-md-2 '><input name="item_number[]" id="item_number" class="form-control" placeholder='item number' /></div> <div cl

我需要通过ajax调用向php提交一个动态创建的字段集,以便将数据插入数据库。该列表用于特定供应商的产品项目。我需要进行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>";
        }
    }
}
$supplier\u selection=$\u POST['supplier\u id'];
$item\u id=$\u POST['item\u id'];
$array_description=$_POST['description'];
$array_quantity=$_POST['quantity'];
$array_unit_price=$_POST['unit_price'];
$array_sale_price=$_POST['sale_price'];
foreach($key=>$value的项目标识){
$check_item_id=“从item_id=”的产品中选择item_id”“”$mysqli->real_escape_字符串($item_id[$key])。“'LIMIT 1”;
$resultset=$mysqli->query($check\u item\u id);
如果($resultset->num_rows==0){
//执行表的插入
$insert\u product=“插入‘产品’(‘id’、‘物料id’、‘供应商id’、‘说明’、‘数量’、‘采购价格’、‘零售价格’)”
“$mysqli->real_escape_string($array_description[$key])。”、“$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[$key])。”);
$insert\u item=$mysqli->query($insert\u product);
如果(!$insert_项目){
echo$mysqli->错误;
回声“;
回显“警报('插入错误!')”;
回声“;
}否则{
echo“成功插入“$mysqli->real_escape_字符串($item_id[$key])”;
回声“;
回显“警报(‘已成功添加项目’)”;
回声“;
}
}
}

我认为您可以使用jQuery和$.ajax,这样您就可以序列化所需的表单,它将以适当的格式收集表单中的所有数据:

$('#form_id').serialize()
您可以将它插入到数据参数中,然后调用$.ajax

$.ajax({
    url: '/your/url/here',
    data: $('#form_id').serialize()
});
在php代码中,在循环中进行DB查询是非常愚蠢的。 我看到您通过POST请求从HTML表单中获取数据,这样就不会有数百万项需要循环。 以下是您可以使用的效率更高的代码,比DB查询数量少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>";
    }
}

我认为您可以使用jQuery和$.ajax,这样您就可以序列化所需的表单,它将以适当的格式收集表单中的所有数据:

$('#form_id').serialize()
您可以将它插入到数据参数中,然后调用$.ajax

$.ajax({
    url: '/your/url/here',
    data: $('#form_id').serialize()
});
在php代码中,在循环中进行DB查询是非常愚蠢的。 我看到您通过POST请求从HTML表单中获取数据,这样就不会有数百万项需要循环。 以下是您可以使用的效率更高的代码,比DB查询数量少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>";
    }
}