Data uit form repeater opslaan in mysql database met behulp van php
Ik heb een probleem bij het opslaan van data uit een form repeater (html). Ik gebruik een form repeater welke is geschreven met behulp van html en javascript. Normaal gesproken geef je input velden een name, en via een $_POST method haal ik de data vervolgens uit het formulier.
Echter, omdat het een form repeater betreft zal elke name dus vaker worden gebruikt. Ik heb diverse fora reeds afgezocht, en kan geen oplossing vinden voor het onttrekken van de ingevulde data uit het formulier. De enige uitgebreide informatie die ik kan vinden betreft ACF, welke is bedoeld voor Wordpress, maar dit gebruik ik niet.
Het formulier ziet er per rij als volgt uit (horizontaal dus):
- Naam, houdbaarheid, productsoort
Deze rij kan zoals gewenst worden verdubbeld via de knop 'rij toevoegen'. Het html script werkt, inclusief javascript.
Kunnen jullie mij helpen?
Alvast heel erg bedankt voor de reacties.
Groeten, Roel
Als ik zoek op Append Form JavaScript, dan kom ik een hoop oplossingen tegen.
- Ariën - op 25/08/2019 00:44:03:
Als ik zoek op Append Form JavaScript, dan kom ik een hoop oplossingen tegen.
Ariën, bedankt voor je reactie. Daar heb ik nog niet eerder op gezocht, mede doordat mijn kennis van javascript niet heel sterk is. Hierdoor snap ik ook niet goed hoe ik nu verder moet. Ik gebruik javascript in de code enkel om rijen toe te voegen, en weer te verwijderen indien overbodig.
Is mijn kwestie überhaupt met php op te lossen? Ik dacht zelf nog aan foreach, maar kom er maar niet uit.
Quote:
Echter, omdat het een form repeater betreft zal elke name dus vaker worden gebruikt.
HTML voorziet hierin door de ondersteuning van [ blokhaken ] achter veldnamen, ik neem aan dat je hier dan al gebruik van maakt? In wezen heb je daarmee in HTML dus een soort van array voor elke veldnaam. Het onderstaande is een compleet valide constructie:
Code (php)
1
2
3
4
5
2
3
4
5
...
<input type="text" name="naam[]" value="">
<input type="text" name="naam[]" value="">
<input type="text" name="naam[]" value="">
...
<input type="text" name="naam[]" value="">
<input type="text" name="naam[]" value="">
<input type="text" name="naam[]" value="">
...
Vervolgens kun je hier in PHP doorheen met een foreach:
Uiteraard wel even controleren of $_POST['naam'] bestaat en mogelijk dat dit een array is etc. in de validatie voor de verwerking van de data zelf.
NB je kunt $dummy ook weglaten als het volgnummer geen betekenis heeft.
Indien je hiermee eerder opgeslagen informatie (onder een index) wilt bijwerken dan kan dit ook, dit werkt nagenoeg op eenzelfde wijze, voorzie simpelweg het array van de index:
Code (php)
1
2
3
4
5
2
3
4
5
...
<input type="text" name="naam[1]" value="henk">
<input type="text" name="naam[5]" value="piet">
<input type="text" name="naam[12]" value="klaas">
...
<input type="text" name="naam[1]" value="henk">
<input type="text" name="naam[5]" value="piet">
<input type="text" name="naam[12]" value="klaas">
...
De verwerking gaat weer nagenoeg op dezelfde wijze:
Waarbij je nu $index kunt gebruiken als referentie voor het bijbehorende record.
EDIT: en je kunt dus $dummy en $index gebruiken om informatie uit verschillende arrays op hetzelfde volgnummer/dezelfde index bij elkaar te zoeken die bij elkaar hoort.
Gewijzigd op 25/08/2019 08:38:14 door Thomas van den Heuvel
Wil je 'on the fly' een onbepaald aantal velden toevoegen (en verwijderen)?
@Ariën, in principe is het formulier onbegrensd. Ik weet waarvoor ik het formulier maak, en na een eerste bulk invoer van ongeveer 10-20 items, zal het toevoegen van velden beperkt blijven tot 4 / 5 per keer in totaal. Heeft mijn antwoord op jouw vraag consequenties voor de uitwerking van het script?
Als je dit in Javascript oplost, is het simpeler, en verstuur je (normaal gesproken) alles aan het eind, nadat je eventueel je formuliervelden uitgebreid hebt. In de Javascript jQuery-library werkt het nog simpeler met de .append() functie.
Ik kan geen speciale reden verzinnen waarom het gebruik van (specifiek) [] voor problemen zou kunnen zorgen.
Naast het feit dat alles waarschijnlijk korter/simpeler gecodeerd kan worden als je een JavaScript-library zoals jQuery gebruikt zoals @Ariën voorstelt, is een ander bijkomend voordeel mogelijk nog belangrijker: dit soort libraries zorgen ook voor de overbrugging tussen potentiële (kleine) verschillen in JavaScript-implementaties tussen verschillende browsers, met andere woorden, deze garanderen een betere cross browser compatibiliteit dan wanneer je dit rechtstreeks in "native" JavaScript implementeert.