Binnen een pagina maak ik gebruik van een form met daarin een tabel met 5 kolommen en nu 25 regels. De kolommen bestaan uit 4 input-fields en een checkbox/toggle, en is (voor het topic vereenvoudigd) als volgt opgebouwd:
Waarden en checkbox-status ($status) worden uit een MySQL-tabel gehaald en weergegeven. Eerst gesorteerd op ingeschakelde checkbox zodat de actieve bovenaan staan, en vervolgens alfabetisch op registratienummer.
Het is mogelijk om regels toe te voegen en bestaande regels te wijzigen. Deze worden met een button opgeslagen en weggeschreven naar de database. Daarvoor gebruik ik de volgende code:
Echter, het wegschrijven gaat alleen goed met de tekstvelden. De waarde van een aangevinkte checkbox wordt niet weggeschreven op de juiste plek, maar het lijkt die waarde lukraak weg te schrijven bij andere ID's. Pas ik bijvoorbeeld 6 checkboxen aan, worden 6 willekeurig lijkende ID's aangepast in plaats van de ID's die bij die regel horen.
De enige structuur die ik heb kunnen vinden is dat als ik checkboxen inschakel, dit bij het gelijk aantal uitgeschakelde checkboxen die bovenaan in de tabel staan wordt weggeschreven.
Voorbeeld:
Zou ik in de deze tabel in regel #2, #5 en #7 tekst aanpassen en de checkbox van #5 en #6 aanvinken, weet ik dat de teksten die gekoppeld zijn bij die ID's goed worden aangepast. De waarden van de twee checkboxen worden weggeschreven in de ID's die gekoppeld zijn bij regels #3 en #4 (dus: de eerste twee uitgeschakelde in het formulier).
Het uitvinken van een checkbox doet ook iets soortgelijks, maar daarin kan ik niet simuleren wat en wanneer er nu precies gebeurd.
Het maakt daarbij ook niet uit of ik tijdens de query de check doe of de switch ingeschakelt is, vóór de query doe, of gewoon de $_POST['ActiveSwitch'][$i] in de query meeneem zoals ik met de andere velden doe. Ik ben door dit gedrag even de draad kwijt met waar ik het nu moet zoeken. Wie kan een zetje in de goede richting geven?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| <tr> <td> <input type="hidden" name="id[]" value="' . $row['id'] . '"> <input type="text" class="form-control" placeholder="Registratienummer" name="registratie[]" value="' . $row['registratie'] . '"> </td> <td> <input type="text" class="form-control" placeholder="Korte omschrijving" name="omschrijving_kort[]" value="' . $row['omschrijving_kort'] . '"> </td> <td> <input type="text" class="form-control" placeholder="Omschrijving" name="omschrijving[]" value="' . $row['omschrijving'] . '"> </td> <td> <input type="number" class="form-control" placeholder="" name="doel[]" value="' . $row['doel'] . '"> </td> <td> <div class="custom-control custom-switch mt-2"> <input type="checkbox" class="custom-control-input" name="ActiveSwitch[]" id="ActiveSwitch_' . $row['id'] . '" value="1" ' . $checked . '> <label class="custom-control-label" for="ActiveSwitch_' . $row['id'] . '"></label> </div> </td> </tr> |
Waarden en checkbox-status ($status) worden uit een MySQL-tabel gehaald en weergegeven. Eerst gesorteerd op ingeschakelde checkbox zodat de actieve bovenaan staan, en vervolgens alfabetisch op registratienummer.
Het is mogelijk om regels toe te voegen en bestaande regels te wijzigen. Deze worden met een button opgeslagen en weggeschreven naar de database. Daarvoor gebruik ik de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| if (isset($_POST['save_reg'])) { $count = count($_POST['id']); for($i=0;$i<$count;$i++){ $sql = "INSERT INTO reg_omschrijving (`id`, `registratie`, `omschrijving_kort`, `omschrijving`, `doel`, `is_actief`) VALUES ('" . $_POST['id'][$i] . "', '" . $_POST['registratie'][$i] . "', '" . $_POST['omschrijving_kort'][$i] . "', '" . $_POST['omschrijving'][$i] . "', '" . $_POST['doel'][$i] . "', '" . (isset($_POST['ActiveSwitch'][$i]) ? '1' : '0') . "') ON DUPLICATE KEY UPDATE `registratie`='" . $_POST['registratie'][$i] . "', `omschrijving_kort`='" . $_POST['omschrijving_kort'][$i] . "', `omschrijving`='" . $_POST['omschrijving'][$i] . "', `doel`='" . $_POST['doel'][$i] . "', `is_actief`='" . (isset($_POST['ActiveSwitch'][$i]) ? '1' : '0') . "' "; $stmt = $db->prepare($sql); $stmt->execute(); } } |
Echter, het wegschrijven gaat alleen goed met de tekstvelden. De waarde van een aangevinkte checkbox wordt niet weggeschreven op de juiste plek, maar het lijkt die waarde lukraak weg te schrijven bij andere ID's. Pas ik bijvoorbeeld 6 checkboxen aan, worden 6 willekeurig lijkende ID's aangepast in plaats van de ID's die bij die regel horen.
De enige structuur die ik heb kunnen vinden is dat als ik checkboxen inschakel, dit bij het gelijk aantal uitgeschakelde checkboxen die bovenaan in de tabel staan wordt weggeschreven.
Voorbeeld:
code:
1
2
3
4
5
6
7
| Omschrijving A | Checkbox ingeschakeld Omschrijving D | Checkbox ingeschakeld Omschrijving B | Checkbox uitgeschakeld Omschrijving C | Checkbox uitgeschakeld Omschrijving E | Checkbox uitgeschakeld Omschrijving F | Checkbox uitgeschakeld Omschrijving G | Checkbox uitgeschakeld |
Zou ik in de deze tabel in regel #2, #5 en #7 tekst aanpassen en de checkbox van #5 en #6 aanvinken, weet ik dat de teksten die gekoppeld zijn bij die ID's goed worden aangepast. De waarden van de twee checkboxen worden weggeschreven in de ID's die gekoppeld zijn bij regels #3 en #4 (dus: de eerste twee uitgeschakelde in het formulier).
Het uitvinken van een checkbox doet ook iets soortgelijks, maar daarin kan ik niet simuleren wat en wanneer er nu precies gebeurd.
Het maakt daarbij ook niet uit of ik tijdens de query de check doe of de switch ingeschakelt is, vóór de query doe, of gewoon de $_POST['ActiveSwitch'][$i] in de query meeneem zoals ik met de andere velden doe. Ik ben door dit gedrag even de draad kwijt met waar ik het nu moet zoeken. Wie kan een zetje in de goede richting geven?