Checkbox[] in insert loop
Ik heb een script waarbij ik een gegevens loop uit de DB haal en in een een form stop.
In deze form heb ik een checkbox als ik deze aanvink is de value van deze $=1.
Maar als ik dit script uitvoer komen de waardes bij de eerste regels te staan.
Onderstaand de while loop:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php $afwerking_opties_set = find_all_afwerking_opties(); ?>
<?php while($afwerking_opties = mysqli_fetch_assoc($afwerking_opties_set)) { ?>
<tr>
<td><input class="checkbox" name="enabled[]" type="checkbox" value="1"></td>
<td><input type="hidden" name="quote_id[]" value="<?php echo $quote['id']; ?>"></td>
<td><input type="hidden" name="afwerking_id[]" value="<?php echo $afwerking_opties['id']; ?>"></td>
<td><?php echo $afwerking_opties['benaming']; ?></td>
<td><?php echo $afwerking_opties['prijs']; ?>.-</td>
</tr>
<?php } mysqli_free_result($afwerking_opties_set);
?>
<?php while($afwerking_opties = mysqli_fetch_assoc($afwerking_opties_set)) { ?>
<tr>
<td><input class="checkbox" name="enabled[]" type="checkbox" value="1"></td>
<td><input type="hidden" name="quote_id[]" value="<?php echo $quote['id']; ?>"></td>
<td><input type="hidden" name="afwerking_id[]" value="<?php echo $afwerking_opties['id']; ?>"></td>
<td><?php echo $afwerking_opties['benaming']; ?></td>
<td><?php echo $afwerking_opties['prijs']; ?>.-</td>
</tr>
<?php } mysqli_free_result($afwerking_opties_set);
?>
Onderstaand de uitvoer:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
if(is_post_request()) {
for($i=0;$i<count($_POST['afwerking_id']);$i++) {
$afwerking = [];
echo $afwerking['quote_id'] = $_POST['quote_id'][$i];
echo '<br>';
echo $afwerking['afwerking_id'] = $_POST['afwerking_id'][$i];
echo '<br>';
echo $afwerking['enabled'] = isset($_POST['enabled'][$i]) ? 1 : 0;
echo '<hr>';
//$afwerking['enabled'] = $_POST['enabled'][$i];
}
}
for($i=0;$i<count($_POST['afwerking_id']);$i++) {
$afwerking = [];
echo $afwerking['quote_id'] = $_POST['quote_id'][$i];
echo '<br>';
echo $afwerking['afwerking_id'] = $_POST['afwerking_id'][$i];
echo '<br>';
echo $afwerking['enabled'] = isset($_POST['enabled'][$i]) ? 1 : 0;
echo '<hr>';
//$afwerking['enabled'] = $_POST['enabled'][$i];
}
}
Gewijzigd op 03/01/2025 20:51:24 door Ruud Clauwers
Jouw uitvoer is geen uitvoer maar een script.
Inderdaad! je moet je uitvoer opslaan in bijvoorbeeld een array, en deze in je view/theme toepassen.
een checkbox wordt alleen meegestuurd in $_POST als deze ook aangevinkt is.
Stel je hebt 10 regels op je scherm staan, en je vinkt alleen de laatste 2 aan.
In $_POST zitten dan alleen $_POST['enabled'][0] en $_POST['enabled'][1]
Zonder een referentie naar welke regels dat waren.
Ik zou daarom kiezen voor een andere value dan 1 voor deze checkbox. ik denk $afwerking_opties['id']
Het probleem is namelijk dat bij het posten wel alle 10 de _POST['quote_id'] en ['afwerking_id'] binnen komen
afhankelijk van wat je wilt bereiken, zou je de lus
for($i=0;$i<count($_POST['afwerking_id']);$i++)
zo kunnen laten, en dan
echo $afwerking['enabled'] = in_array($_POST['afwerking_id'][$i], $_POST['enabled']) ? 1 : 0;
(daarbij kijk je dus of het huidige afwerking_id in de lus toevallig ook voorkomt in de (mogelijk kortere) lijst met
enablede id's)
of je loopt alleen door $_POST['enabled'] en te zien welke regels aangevinkt waren.