Data uit form repeater opslaan in mysql database met behulp van php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roel vanDaele

Roel vanDaele

25/08/2019 00:36:03
Quote Anchor link
Hallo allemaal,

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
 
PHP hulp

PHP hulp

20/04/2024 03:43:13
 
- Ariën  -
Beheerder

- Ariën -

25/08/2019 00:44:03
Quote Anchor link
Als ik zoek op Append Form JavaScript, dan kom ik een hoop oplossingen tegen.
 
Roel vanDaele

Roel vanDaele

25/08/2019 00:50:35
Quote Anchor link
- 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.
 
Thomas van den Heuvel

Thomas van den Heuvel

25/08/2019 08:34:41
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
...
<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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach ($_POST['naam'] as $dummy => $value) {
    // ...
}
?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
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">
...

De verwerking gaat weer nagenoeg op dezelfde wijze:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach ($_POST['naam'] as $index => $value) {
    // ...
}
?>

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
 
- Ariën  -
Beheerder

- Ariën -

25/08/2019 10:03:13
Quote Anchor link
Wil je 'on the fly' een onbepaald aantal velden toevoegen (en verwijderen)?
 
Roel vanDaele

Roel vanDaele

25/08/2019 10:11:52
Quote Anchor link
@Thomas, bedankt voor je reactie! Ik ben momenteel niet in de gelegenheid om het te testen, dit zal ik vanavond doen. Wat ik je wel alvast kan zeggen is dat ik inderdaad aan de gang was gegaan met name[] en foreach. Alleen waar ik bij de name[] tegenaan loop is dat de werking van javascript stopt op het moment dat ik [] aan de names toevoeg. Weet jij hoe dit kan komen?

@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?
 
- Ariën  -
Beheerder

- Ariën -

25/08/2019 10:26:29
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

25/08/2019 15:23:01
Quote Anchor link
Uiteraard kun je dit uitbreiden/interactief/tiever maken met JavaScript, dit doet niet af aan de hierboven voorgestelde aanpak, je breidt het enkel verder uit met een "JavaScript dimensie".

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.