Ik ben bezig met een script waarmee gebruikers eenvoudig HTML formulieren kunnen maken, en ook kunnen aangeven welke items verplicht (mandatory) zijn. De items van elk form worden opgeslagen in een MySQL database. De code hieronder is onderdeel van deze functionaliteit:
Achtereenvolgens haal ik de items van form met id $fid op uit de database en stop deze objecten in een array $items. Vervolgens haal ik alle items door een loop en controleer ik of verplichte items wellicht niet zijn ingevuld (de betreffende variabele in $edit is dan leeg). Als het item wel ingevuld is, ken ik in regel 9 de gesubmitte waarde toe aan $item->value.
Als ik het form volledig invul, zou een print_r($items) dus een array met objecten moeten opleveren waar de property "value" een waarde heeft. Echter, "value" is altijd leeg. Als ik print_r($item) toevoeg onderaan de foreach loop (dus tussen regel 12 en 13), heeft elk object wel een waarde voor "value", bijvoorbeeld:
Echter, bij de print_r in regel 16 is value weer gewoon leeg:
Ik heb geen idee hoe dit kan. Wellicht is het niet echt netjes om objecten in een array te stoppen, maar toch wil ik het graag op deze manier. Immers, later in mijn code heb ik een functie die (nu althans) alleen objecten als input accepteert. Wie kan mij vertellen waarom de waarde van elke "value" weer uit het object verdwijnt?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| $result = db_query('SELECT * FROM {form_items} WHERE fid = %d', $fid); while ($item = db_fetch_object($result)) { $items[] = $item; } if ($_POST['action'] == 'Verzenden') { $edit = $_POST['edit']; foreach ($items as $item) { $item->value = $edit['submitted'][$item->name]; if (empty($edit['submitted'][$item->name]) && $item->mandatory) { form_set_error($item->name, "'$item->name' is een verplicht veld"); } } } print_r($items); |
Achtereenvolgens haal ik de items van form met id $fid op uit de database en stop deze objecten in een array $items. Vervolgens haal ik alle items door een loop en controleer ik of verplichte items wellicht niet zijn ingevuld (de betreffende variabele in $edit is dan leeg). Als het item wel ingevuld is, ken ik in regel 9 de gesubmitte waarde toe aan $item->value.
Als ik het form volledig invul, zou een print_r($items) dus een array met objecten moeten opleveren waar de property "value" een waarde heeft. Echter, "value" is altijd leeg. Als ik print_r($item) toevoeg onderaan de foreach loop (dus tussen regel 12 en 13), heeft elk object wel een waarde voor "value", bijvoorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
| stdClass Object ( [fid] => 17 [cid] => 6 [name] => Naam [description] => Vul uw voor en achternaam in [value] => Marieke [type] => textfield [options] => [multiple] => 0 [mandatory] => 1 ) |
Echter, bij de print_r in regel 16 is value weer gewoon leeg:
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
| Array ( [0] => stdClass Object ( [fid] => 17 [cid] => 6 [name] => Naam [description] => Vul uw voor en achternaam in [value] => [type] => textfield [options] => [multiple] => 0 [mandatory] => 1 ) [1] => stdClass Object ( [fid] => 17 [cid] => 9 [name] => Uw vraag [description] => Eventueel extra contactinformatie [value] => [type] => textarea [options] => [multiple] => 0 [mandatory] => 1 ) // etc... |
Ik heb geen idee hoe dit kan. Wellicht is het niet echt netjes om objecten in een array te stoppen, maar toch wil ik het graag op deze manier. Immers, later in mijn code heb ik een functie die (nu althans) alleen objecten als input accepteert. Wie kan mij vertellen waarom de waarde van elke "value" weer uit het object verdwijnt?
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."