im trying to insert only populated ID fields to MySQL, meaning if two out of three are populated, only two to be inserted. I got blind with many code lines, and can’t see where Im making a mistake.
Logic is that I’ll search for the serial number, once selected it will populate row ID from the serial number into the ID field.
I want to pass ID field value to the database. However, below code is submitting all ID fields even the empty ones (where serial number is not selected), and I dont need to pass records for not populated ID field.
Where am I making a mistake?
Thanks
$idCount = count($_POST['assetsn_id']);
echo $idCount;
for($i=0; $i < $idCount; ++$i) {
$assetsn_id = $_POST['assetsn_id'][$i];
$assetsn_location_address = $_POST['assetsn_location_address'];
$assetsn_location_rack = $_POST['assetsn_location_rack'];
$assetsn_location_shelf = $_POST['assetsn_location_shelf'];
$assetsn_location_bin = $_POST['assetsn_location_bin'];
$assetsn_location_createdby = $_SESSION['user']['id'];
$assetsn_location_userlogid = $_SESSION['user']['userlogid'];
$sql = "INSERT INTO asset_serial_locations SET assetsn_id=?, assetsn_location_address=?, assetsn_location_rack=?, assetsn_location_shelf=?, assetsn_location_bin=?, assetsn_location_createdby=?, assetsn_location_userlogid=?";
$result = modifyRecord($sql, 'sssssss', [$assetsn_id, $assetsn_location_address, $assetsn_location_rack, $assetsn_location_shelf, $assetsn_location_bin, $assetsn_location_createdby, $assetsn_location_userlogid]);
if ($result) {
$_SESSION['success_msg'] = "Location updated successfully!";
header("location: " . BASE_URL . "workshop/location/");
exit(0);
} else {
$_SESSION['error_msg'] = "Something went wrong. Could not update locations.".'<br />'.mysqli_error($conn);
}
}
Serial number #1
<input class="form-control form-control-lg" type="search" name="" autocomplete="off" placeholder="search for serial number..." />
<input class="form-control form-control-lg" type="text" name="assetsn_id[]" autocomplete="off" placeholder="ID" /><br /><br />
Serial number #2
<input class="form-control form-control-lg" type="search" name="" autocomplete="off" placeholder="search for serial number..." />
<input class="form-control form-control-lg" type="text" name="assetsn_id[]" autocomplete="off" placeholder="ID" /><br /><br />
Serial number #3
<input class="form-control form-control-lg" type="search" name="" autocomplete="off" placeholder="search for serial number..." />
<input class="form-control form-control-lg" type="text" name="assetsn_id[]" autocomplete="off" placeholder="ID" />
>Solution :
Use array_filter to remove nulls values from an array :
$_POST['assetsn_id'] = array_filter($_POST['assetsn_id']);
$idCount = count($_POST['assetsn_id']);
echo $idCount;
for($i=0; $i < $idCount; ++$i) {
....
}
Here what array_filter can remove :
$a = array(0, '0', NULL, FALSE, '', array());
var_dump(array_filter($a));
// array()