In my code there’s a dedicated remove button for the javascript generated form, when it is clicked, it should not be display on the database. For example, I create 3 extra form (js form), form 1(original), form 2, 3 and 4 (js form). In my code, when I click remove button for form 2, in the database, 3 rows are displayed in which form 1 and 3 values are displayed correctly, but form 2 is blank and form 4 is not registered, what could be the problem and how to fix it? It works fine when for example you remove form 4 (last form), form 1,2,3 are displayed correctly
Here is my code
<main>
<div class="page-header">
<div>
<h1>Create Order</h1>
</div>
<a href="#" class="add-order-button" onclick="createOrderForm()">+ Add Another Order</a>
</div>
<form action="php/order_create.php" method="post">
<div id="order-container">
<div class="order-form">
<h3>Order 1</h3>
<div class="form-row">
<label for="item-name-1">Item Name:</label>
<select id="item-name-1" name="item-name-1">
<?php include 'php/order_read.php'; ?>
</select>
</div>
<div class="form-row">
<label for="qty-1">Qty:</label>
<input type="text" id="qty-1" name="qty-1">
</div>
<div class="form-row">
<label for="supplier-name-1">Supplier Name:</label>
<input type="text" id="supplier-name-1" name="supplier-name-1">
</div>
<div class="form-row">
<label for="supplier-contact-1">Supplier Contact:</label>
<input type="text" id="supplier-contact-1" name="supplier-contact-1" pattern="[0-9]+" title="Only numbers allowed">
</div>
<div class="form-row">
<label for="supplier-address-1">Supplier Address:</label>
<input type="text" id="supplier-address-1" name="supplier-address-1">
</div>
<button class="remove-button" onclick="removeOrderForm(1)">Remove</button>
</div>
<input type="hidden" id="order-count" name="order-count" value="1">
<button type="submit" class="order-add-button">Submit</button>
</div>
</form>
</main>
<script>
var orderCount = 1;
function createOrderForm() {
orderCount++;
var container = document.getElementById('order-container');
var form = document.createElement('div');
form.classList.add('order-form');
form.id = `order-form-${orderCount}`;
form.innerHTML = `
<h3>Order ${orderCount}</h3>
<div class="form-row">
<label for="item-name-${orderCount}">Item Name:</label>
<select id="item-name-${orderCount}" name="item-name-${orderCount}">
<?php include 'php/order_read.php'; ?>
</select>
</div>
<div class="form-row">
<label for="qty-${orderCount}">Qty:</label>
<input type="text" id="qty-${orderCount}" name="qty-${orderCount}">
</div>
<div class="form-row">
<label for="supplier-name-${orderCount}">Supplier Name:</label>
<input type="text" id="supplier-name-${orderCount}" name="supplier-name-${orderCount}">
</div>
<div class="form-row">
<label for="supplier-contact-${orderCount}">Supplier Contact:</label>
<input type="text" id="supplier-contact-${orderCount}" name="supplier-contact-${orderCount}" pattern="[0-9]+" title="Only numbers allowed">
</div>
<div class="form-row">
<label for="supplier-address-${orderCount}">Supplier Address:</label>
<input type="text" id="supplier-address-${orderCount}" name="supplier-address-${orderCount}">
</div>
<button class="remove-button" onclick="removeOrderForm(${orderCount})">Remove</button>
`;
container.insertBefore(form, container.lastElementChild.previousElementSibling);
document.getElementById('order-count').value = orderCount;
}
function removeOrderForm(orderId) {
var form = document.getElementById(`order-form-${orderId}`);
// Disable the input fields of the removed order
var inputs = form.getElementsByTagName('input');
for (var i = 0; i < inputs.length; i++) {
inputs[i].disabled = true;
}
var selects = form.getElementsByTagName('select');
for (var i = 0; i < selects.length; i++) {
selects[i].disabled = true;
}
// Remove the remove button
var removeButton = form.getElementsByClassName('remove-button')[0];
removeButton.parentNode.removeChild(removeButton);
orderCount--;
document.getElementById('order-count').value = orderCount;
}
</script>
here is for the CREATE operation script
<?php
// Database connection
$dbHost = "localhost";
$dbUsername = "root";
$dbPassword = "";
$dbName = "main";
$conn = mysqli_connect($dbHost, $dbUsername, $dbPassword, $dbName);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Check if the form is submitted
if ($_SERVER["REQUEST_METHOD"] === "POST") {
// Generate the Batch ID
$batchID = generateBatchID();
// Get the form data for each order
for ($i = 1; $i <= $_POST["order-count"]; $i++) {
// Check if the order form is disabled (removed)
$orderFormId = "order-form-$i";
$disabledFieldName = $orderFormId . "-disabled";
if (!isset($_POST[$disabledFieldName])) {
$itemName = $_POST["item-name-$i"];
$qty = $_POST["qty-$i"];
$supplierName = $_POST["supplier-name-$i"];
$supplierContact = $_POST["supplier-contact-$i"];
$supplierAddress = $_POST["supplier-address-$i"];
// Prepare the SQL statement
$sql = "INSERT INTO purchase (`Item Name`, `Qty`, `Supplier Name`, `Supplier Contact`, `Supplier Address`, `Batch ID`)
VALUES ('$itemName', '$qty', '$supplierName', '$supplierContact', '$supplierAddress', '$batchID')";
// Execute the SQL statement
if (!mysqli_query($conn, $sql)) {
echo "Error: " . mysqli_error($conn);
exit(); // Terminate the script if an error occurs
}
}
}
// Redirect back to createorder.php with success status
header("Location: ../purchase.php");
exit(); // Terminate the script after redirection
}
// Close the database connection
mysqli_close($conn);
/**
* Generate a random Batch ID.
* This function generates a random 6-digit number as the Batch ID.
*/
function generateBatchID()
{
return rand(100000, 999999);
}
?>