Javascript 通过ajax将命名数组发送到PHP
我需要通过ajax调用向php提交一个动态创建的字段集,以便将数据插入数据库。该列表用于特定供应商的产品项目。我需要进行ajax调用,但不知道如何在数据字段中提交命名数组 我的HTML: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
<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>";
}
}