Als hobbyist vind ik het lekker om dágen te slijten met code kloppen om voor privé-doeleinden web-apps in elkaar te kunnen zetten.
Dat gaat me inmiddels goed af. Met alle documentatie via Google en andere fora kan ik de meeste problemen die ik tegenkom ook gewoon de baas. Van scratch wat beginnen te kloppen is niet mijn ding, maar ik kan wel een lap aan code lezen, begrijpen wat het doet, en bijvoorbeeld relevante regels pakken en ombouwen naar de situatie die ik zoek. Ik loop nu alleen tegen een probleem aan dat ik met deze manier van werken niet opgelost krijg, en dat heeft te maken met het schrijven naar de database met daarin een foreach-statement.
Ik heb een document waarop 30+ regels staan, iedere regel met 7 invoervelden. Om de oorzaak van het probleem te begrijpen heb ik nu die output beperkt tot alleen een output met de volgende drie (voor dit topic vergemakkelijkte) velden:
Deze lijst met velden wordt ook door middel van een foreach uit een database gehaald en foutloos weergegeven. Ik zie dus alle regels bestaande uit 2 zichtbare en 1 verborgen kolom, met daarin ook de juiste waarden. Het idee is nu dat ik waarden kan aanpassen en deze kan opslaan.
Het ophalen van de waarden lukt met twee vingers in de neus. Mijn logisch verstand zegt daarom dat met wat aanpassen, trials en errors het ook wel moet lukken om de basis van die query te gebruiken voor het wegschrijven van alle velden. Wat ik nu heb staan is het volgende:
De theorie is dat bij het klikken op een save-button de data moet worden opgeslagen. Deze werkwijze van gegevensopslag (dus: zonder een array) werkt overigens wanneer ik dit gebruik binnen formulieren met unieke names voor de velden. Waar het hier mis gaat is dat er wel iets leek te gebeuren, maar er niets in de database verandert. Nu blijkt later (lang leve het beperken van de zichtbare URL-lengte) dat de hele string mét gewijzigde data in de adresbalk staat:
Daaruit maak ik op dat in principe de query een beetje klopt. De data wordt tenslotte opgepakt en ergens uitgespuugd, maar niet op de juiste plek.
Niet gehinderd door gebrek aan kennis van het op deze manier wegschrijven weet ik even niet waar ik nu verder moet zoeken. Met name op Stackoverflow heb ik veel informatie kunnen halen, maar niet een oplossing voor dit specifieke probleem. De topics die ik vond gaan over het volledig niet weg kunnen schrijven. Ik ben ook bezig geweest met andere manieren van wegschrijven (zelfde principe, maar bijvoorbeeld andere volgorde of manieren van binden), maar die zorgen allemaal voor ditzelfde resultaat. Wat het vooral moeilijk maakt is dat de error reporting is ingeschakeld (E_ALL), maar er op dit punt helemaal géén errors verschijnen.
Is er iemand die me kan vertellen waarom dit verwerkt wordt zoals het nu gaat? Op welk punt moet ik me focussen om het op te lossen?
Dat gaat me inmiddels goed af. Met alle documentatie via Google en andere fora kan ik de meeste problemen die ik tegenkom ook gewoon de baas. Van scratch wat beginnen te kloppen is niet mijn ding, maar ik kan wel een lap aan code lezen, begrijpen wat het doet, en bijvoorbeeld relevante regels pakken en ombouwen naar de situatie die ik zoek. Ik loop nu alleen tegen een probleem aan dat ik met deze manier van werken niet opgelost krijg, en dat heeft te maken met het schrijven naar de database met daarin een foreach-statement.
Ik heb een document waarop 30+ regels staan, iedere regel met 7 invoervelden. Om de oorzaak van het probleem te begrijpen heb ik nu die output beperkt tot alleen een output met de volgende drie (voor dit topic vergemakkelijkte) velden:
code:
1
2
3
| <input type="hidden" name="id" value="$id"> <input type="text" class="form-control" name="invoerveld_a" value="$waarde_a"> <input type="text" class="form-control" name="invoerveld_b" value="$waarde_b"> |
Deze lijst met velden wordt ook door middel van een foreach uit een database gehaald en foutloos weergegeven. Ik zie dus alle regels bestaande uit 2 zichtbare en 1 verborgen kolom, met daarin ook de juiste waarden. Het idee is nu dat ik waarden kan aanpassen en deze kan opslaan.
Het ophalen van de waarden lukt met twee vingers in de neus. Mijn logisch verstand zegt daarom dat met wat aanpassen, trials en errors het ook wel moet lukken om de basis van die query te gebruiken voor het wegschrijven van alle velden. Wat ik nu heb staan is het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| if ($_POST['submit_form']) { $data = [ 'id' => $POST['id'], 'waarde_a' => htmlspecialchars($_POST['invoerveld_a'] ?? '', ENT_QUOTES), 'waarde_b' => htmlspecialchars($_POST['invoerveld_b'] ?? '', ENT_QUOTES), ]; $sql = "UPDATE table SET waarde_a=:waarde_a, waarde_b=:waarde_b WHERE id=:id"; foreach ($data as $key => $value) { $stmt = $pdo->prepare($sql); $stmt->execute($data); } } |
De theorie is dat bij het klikken op een save-button de data moet worden opgeslagen. Deze werkwijze van gegevensopslag (dus: zonder een array) werkt overigens wanneer ik dit gebruik binnen formulieren met unieke names voor de velden. Waar het hier mis gaat is dat er wel iets leek te gebeuren, maar er niets in de database verandert. Nu blijkt later (lang leve het beperken van de zichtbare URL-lengte) dat de hele string mét gewijzigde data in de adresbalk staat:
code:
1
2
3
| /document.php?submit_form=update &id=1&waarde_a=nieuwe_output_invoerveld_1a&waarde_b=nieuwe_output_invoerveld_1b &id=2&waarde_a=nieuwe_output_invoerveld_2a&waarde_b=nieuwe_output_invoerveld_2b |
Daaruit maak ik op dat in principe de query een beetje klopt. De data wordt tenslotte opgepakt en ergens uitgespuugd, maar niet op de juiste plek.
Niet gehinderd door gebrek aan kennis van het op deze manier wegschrijven weet ik even niet waar ik nu verder moet zoeken. Met name op Stackoverflow heb ik veel informatie kunnen halen, maar niet een oplossing voor dit specifieke probleem. De topics die ik vond gaan over het volledig niet weg kunnen schrijven. Ik ben ook bezig geweest met andere manieren van wegschrijven (zelfde principe, maar bijvoorbeeld andere volgorde of manieren van binden), maar die zorgen allemaal voor ditzelfde resultaat. Wat het vooral moeilijk maakt is dat de error reporting is ingeschakeld (E_ALL), maar er op dit punt helemaal géén errors verschijnen.
Is er iemand die me kan vertellen waarom dit verwerkt wordt zoals het nu gaat? Op welk punt moet ik me focussen om het op te lossen?