如何使用 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();
这是我的代码,当我回显它显示所有 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();