如何使用 PHP 从数组中插入多个 POST 值

How to insert mulitple POST value from array using PHP

这是我的代码,当我回显它显示所有 POST 数组时,但是当 mysqli_query 操作 运行 它只插入最后一个值。如何在查询中插入所有数据?谁能帮帮我...

$ser = $_POST['serial'];
foreach ($ser as $seria) {
    echo $serial = $seria;
}

$re = $_POST['ref_no'];
foreach ($re as $refe) {
    echo $ref = $refe;
}

$des = $_POST['desc'];  
foreach ($des as $desce) {
    echo $desc = $desce;
}

$uni = $_POST['unitss'];
foreach ($uni as $units) {
    echo $unit = $units;
}

$qt = $_POST['qty'];
foreach ($qt as $qtys) {
    echo $qty = $qtys;
}

$pric = $_POST['price'];
foreach ($pric as $prices) {
    echo $price = $prices;
}

$amoun = $_POST['amount'];
foreach ($amoun as $amounts) {
    echo $amount = $amounts;
}

mysqli_query($con, "INSERT into purchase_order (po_id, po_no, serial_no, ref_no, description, unit, qty, price, amount, status) VALUES ('', '".$po_nom."', '".$mr_no."', '".$serial."', '".$ref."', '".$desc."', '".$unit."', '".$qty."', '".$price."', '".$amount."', 'Pending')");

试试这个

$serial = $_POST['serial'];
$ref = $_POST['ref_no'];
$desc = $_POST['desc'];  
$unit = $_POST['unitss'];
$qty = $_POST['qty'];
$price = $_POST['price'];
$amount = $_POST['amount'];

mysqli_query($con, "INSERT into purchase_order (po_id, po_no, serial_no, ref_no, description, unit, qty, price, amount, status) VALUES ('', '".$po_nom."', '".$mr_no."', '".$serial."', '".$ref."', '".$desc."', '".$unit."', '".$qty."', '".$price."', '".$amount."', 'Pending')");

这里有一个相当大的假设,即所有数组都具有相同的大小:

$sql='';
$n=len($_POST['serial']);
for ($i=0;$i<$n;$i++) {
    $amount = $_POST['amount'][$i];
    $price = $_POST['price'][$i];
    $qty=$_POST['qty'][$i];
    $unit=$_POST['unitss'][$i];
    $desc=$_POST['desc'][$i];
    $ref=$_POST['ref_no'][$i];
    $serial=$_POST['serial'][$i];
    $sql_part="INSERT into purchase_order (po_id, po_no, serial_no, ref_no, description, unit, qty, price, amount, status) VALUES ('', '".$po_nom."', '".$mr_no."', '".$serial."', '".$ref."', '".$desc."', '".$unit."', '".$qty."', '".$price."', '".$amount."', 'Pending')";
    $sql=$sql.';'.$sql_part;
}
mysqli_query($con, $sql);

另外请注意,由于 SQL injections

,直接从 $_POST 变量将数据插入数据库并不是一个好习惯

试试这个

$ser = $_POST['serial'];
foreach($ser as $keys=>$vals){
mysqli_query($con, "INSERT into purchase_order (po_id, serial_no, ref_no, description, unit, qty, price, amount, status) VALUES ('', '".$vals."', '".$_POST['ref'][$keys]."', '".$_POST['desc'][$keys]."', '".$_POST['unitss'][$keys]."', '".$_POST['qty'][$keys]."', '".$_POST['price'][$keys]."', '".$_POST['amount'][$keys]."', 'Pending')");
}

或者你也可以这样做

$ser = $_POST['serial'];
foreach($ser as $keys=>$vals){
$values_array[]="('', '".$vals."', '".$_POST['ref'][$keys]."', '".$_POST['desc'][$keys]."', '".$_POST['unitss'][$keys]."', '".$_POST['qty'][$keys]."', '".$_POST['price'][$keys]."', '".$_POST['amount'][$keys]."', 'Pending')";

}
$values=implode(",",$values_array);
mysqli_query($con, "INSERT into purchase_order (po_id, serial_no, ref_no, description, unit, qty, price, amount, status) VALUES ".$values." ");

您的回声显示所有值的原因是它们每个都在您正在 运行 遍历数组的循环中。你正在做的是在每次循环时覆盖循环内每个变量的值,回显它,然后用数组中的下一个值再次覆盖它。

如果所有数组的大小都相同,您将只能做您想做的事情,然后您需要在循环内而不是在循环之后构建查询字符串。

我不熟悉 mysqli,所以我会给你一个使用 PDO 的例子(这是未经测试的,并不意味着只是插入你的代码,它只是为了让逻辑和过程更清晰) :

$con= new PDO("mysql:host=<host>;dbname=<dbName>", "dbUsr", "dbPwd");
$sql = "INSERT INTO purchase_order (po_id, po_no, serial_no, ref_no, description, unit, qty, price, amount, status) VALUES";
$masterArray = [];
for($i = 0; $i < count($_POST['serial']); $i++){
  $masterArray[] = array('serial=>$_POST['serial'], 'ref_no'=>$_POST['ref_no'], 'desc'=>$_POST['desc'], 'unitss'=>$_POST['unitss'], 'qty'=>$_POST['qty'], 'price'=>$_POST['price'], 'amount'=>$_POST['amount'])
  $sql .= "(?,?,?,?,?,?,?,?,?,"Pending") ";
}
$stmt = $con->prepare($sql);
$marker = 1;
foreach($masterArray as $idx=>$row){
  foreach($row as $title=>$value){
    $stmt->bindParam($marker, $value)
    $marker++;
  }
}
$stmt->execute();