Alle formulier-velden doorlopen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kevin de Groot

Kevin de Groot

15/02/2013 09:05:30
Quote Anchor link
Hoi iedereen,

Ik ben bezig met een redelijk groot project waarbij ik veel (aardig grote) formulieren moet ontwikkelen. De gegevens van deze formulieren moeten uiteindelijk in de database komen te staan.

De database zit ongeveer zo in elkaar:

Tabel: formuliervelden
Kolommen: id, formulier_id, veldnaam

Tabel: formulierwaarden
Kolommen: id, formulierveld_id, waarde

In formuliervelden heb ik bijvoorbeeld twee rijen:
1 - 1 - 'Voornaam'
2 - 1 - 'Achternaam'

In formulierwaarden heb ik dan bijvoorbeeld:
1 - 1 - 'Kevin'
2 - 2 - 'de Groot'

De structuur klopt niet volledig, maar ik hoop dat het idee een beetje duidelijk is. De tabel formuliervelden houdt, zeg maar, de stamgegevens en formulierwaarden houdt de waarden per formulier.

Nu wil ik gewoon graag in HTML de formulieren maken en onderaan de formulieren een Javascript-code uitvoeren die door alle formuliervelden loopt. De namen van de formuliervelden moeten dan op het scherm geprint worden en hiermee moet dan de query zichtbaar worden. Dan kan ik die query kopiëren en in phpMyAdmin plakken.

Wat ik dusver heb:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<script type="text/javascript">

    var formulier_id = 1337;

    document.write('INSERT INTO formuliervelden (formulier_id, veldnaam) VALUES<br />');
    
    $('#formulier').find(':input').each(function(i) {
    
        document.write('('+ formulier_id +', \''+ this.name +'\'), <br />');
        
    });

</script>


Bovenstaande code gaat door alle elementen heen en dit gaat goed. Echter met radio- of checkbox-elementen gaat dit mis. Voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<input type="radio" name="geslacht" value="m" /> Man<br />
<input type="radio" name="geslacht" value="v" /> Vrouw<br />


Of met checkboxes (met geslacht is dit onlogisch, maar het gaat om het idee):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<input type="checkbox" name="geslacht" value="m" /> Man<br />
<input type="checkbox" name="geslacht" value="v" /> Vrouw<br />


Met de genoemde Javascript-code komt het veld "geslacht" dus tweemaal voor.

Mijn vraag: hoe kan ik dit het beste oplossen? Een array aanmaken o.i.d.? Ik moet in feite kunnen groeperen op element-naam.

Voorbeeld: http://kevindg.nl/formulier/

Note: in geval van checkboxes wordt het element een array en is het de bedoeling dat de waarden m.b.v. PHP-functie "implode()" kommagescheiden in de database komen te staan. In geval van radio-elementen is het gewoon de value die het element heeft.

Alvast bedankt voor de tijd en moeite.

Gr. Kevin

Toevoeging op 15/02/2013 11:20:37:

Het is gefixed:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Array.prototype.contains = function(val)
    {
        var i = this.length;
        
        while (i--)
        {
            if (this[i] === val)
            {
                return true;
            }
        }
    }

    var query         = 'INSERT INTO formuliervelden (formulier_id, veldnaam) VALUES\n';
    var elementen     = document.getElementById('formulier').elements;
    var aantal        = elementen.length;
    var behandeld     = new Array();

    for (var i = 0; i < aantal; i++)
    {
        if (elementen[i].name != '[CSRF-element]' && elementen[i].name != '[CSRF-element]')
        {
            if (behandeld.contains(elementen[i].name) == true)
            {
                continue;
            }
            
            query += '('+ formulier_id +', \''+ elementen[i].name +'\')';
            
            if (i < (aantal - 1))
            {
                query += ',\n';
            }
            else
            {
                query += ';';
            }
            
            behandeld[i] = elementen[i].name;
        }
    }
    
    document.write('<textarea style="display: block; border: 1px solid #000; padding: 10px; background-color: #f90; width: 1000px; height: 250px; margin: 0 auto;" onClick="javascript: this.select();">');
    document.write(query);
    document.write('</textarea>');
 
Er zijn nog geen reacties op dit bericht.



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.