I want to fetch array data from “orders” Table WHERE order_id =2 and insert into “inventory_log” Table. but my code is only inserting the last row
orders TABLE
order_id product_id quantity
2 1 9
2 3 2
3 6 3
3 5 2
2 7 1
I want this:
inventory_log TABLE
id product_id quantity
1 1 9
2 3 2
3 7 1
Find my code below:
<?php
define('DB_SERVER','localhost');
define('DB_USER','root');
define('DB_PASS' ,'');
define('DB_NAME', 'store');
$con = mysqli_connect(DB_SERVER,DB_USER,DB_PASS,DB_NAME);
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// Insert into inventory_log TABLE
if(isset($_POST['Submit']))
{
$productID=$_POST['product_id'];
$IssueQty=$_POST['quantity'];
$inventory=mysqli_query($con,"insert into inventory_log(productID, IssueQty) values('$productID', '$IssueQty')");
echo '<script>alert("Sucessful")</script>';
}
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title></title>
</head>
<body>
<form method="post" name="submit">
<table border="1">
<thead>
<tr>
<th>Product ID</th>
<th>Quantity</th>
</tr>
</thead>
<tbody>
<?php
// Get order items from orders TABLE
$result = $con->query("SELECT order_id, product_id, quantity
FROM orders
WHERE order_id = 2");
if($result->num_rows > 0){
while($item = $result->fetch_assoc()){
$product_id = $item["product_id"];
$quantity = $item["quantity"];
?>
<tr>
<td><input type="text" name="product_id" value="<?php echo $product_id; ?>"></td>
<td><input type="text" name="quantity" value="<?php echo $quantity; ?>"></td>
</tr>
<?php } } ?>
</tbody>
</table>
<button type="submit" name="Submit" class="btn btn-success btn-sm">Submit</button>
<form>
</body>
</html>
Advertisement
Answer
It is only inserting one row because you are only posting 1 product_id and 1 quantity
your posted data in php now looks like :
$_POST = [
'product_id' => 1,
'quantity' => 9
]
If you want to send the entire list through a post you will need to use the array syntax in your input name .
Something like
<td><input type="text" name="product[<?= htmlentities($product_id)?>][product_id]" value="<?= htmlentities($product_id); ?>"></td>
<td><input type="text" name="product[<?= htmlentities($product_id)?>][quantity]" value="<?= htmlentities($quantity); ?>"></td>
in your php script this will result in a POST with an array value
$_POST = [
product => [
1 => [
'product_id' => 1,
'quantity' => 9
] ,
2 => [
'product_id' => 2,
'quantity' => 19
] ,
..
]
]
which you can iterate with an foreach()
if( isset( $_POST['product'])) {
foreach( $_POST['product'] as $product) {
$productID=$product['product_id'];
$IssueQty=$product['quantity'];
// your sql insert here!. please use sql escaping on your user input!
}
}
However. With your script you keep inserting ALL rows you already have. I dont know if this is just as try/example but i assume you just want to insert new rows. How its setup now you keep inserting all rows you already have ( even without deleting the old ones)