Helaas ben ik weer terug, met nogsteeds hetzelfde probleem als voorheen... (klik)
Wat is het probleem? Ik heb een php script gemaakt die een htlm pagina output met invulvelden waarmee mensen zich in kunnen schrijven voor een wedstrijd. Deze input moet vervolgens gecheckt worden op leeg gelaten velden en velden die numeriek moeten zijn e.d. Tot daar gaat alles goed. Zolang iemand in 1 keer alle info goed invult dan gaat er ook niks fout en krijgt die persoon een overzich van de net ingevulde gegevens te zien en de mogelijkheid om deze te bevestigen waarna de aanmdeling afgerond wordt. Het gaat dan om deze pagina.
Waar het wel fout gaat is als de input niet meteen goed is. Het formulier moet dan opnieuw weergegeven worden met alle ingevoerde gegevens erin en een foutmelding bij het veld of de velden die verkeerd waren ingevoerd zodat men dit kan verbeteren. Bij de meeste invulvelden gaat dit ook gewoon goed overigens. Pas als er echt meerdere velden niet ingevuld worden gaan er gegarandeerd problemen optreden: Het 'correctieformulier' wordt dan maar gedeeltelijk weergegeven waardoor het niet verder gebruikt kan worden (er ontbreken velden en o.a. de submit knop). Als ik slechts 1 veld per keer leeg laat en dus een error laat geven dan wordt alleen bij de leeggelaten velden 'city', personal best STA (zowel minuten als seconden) en Announcement DYN/DNF een onvolledig formulier weergegeven.
Het vreemde is wel dat er dan niet direct onder de velden die een fout geven afgebroken wordt maar pas een stuk verderop...
Waar ik zelf al aan gedacht heb:
- geheugenprobleem: dit is m.i. niet zo, als ik namelijk erg veel data output (zoals postdata ofzo) dan gaat hij soms ineens ook weer meer van het script weergeven.
- Alles is netjes met aanhalingstekens e.d. omgeven. (tip uit vorige topic, was niet helemaal netjes gedaan nog)
- het verwijderen van de echo tussen de <?php en ?> tags waardoor er alleen een leeg stukje staat zorgt ervoor dat het hele script doorlopen wordt.
- het verwijderen van het hele stukje php laat wel het hele script doorlopen
- wanneer ik echo(functie) vervang door letterlijk echo("bla"); dan gaat het ook goed
- aan de executiontime ligt het ook niet (die staat op oneindig nu, tip uit vorige topic. Dit was echter nooit een issue omdat de executiontime < 1s bedraagt.)
- het stukje waar hij vastloopt precies hetzelfde maken als een stukje waar hij niet vastloopt heeft geen effect.
Zoals in mijn vorige topic te lezen was had ik veel last van php notices na het aanzetten van E_ALL in de error reporting. Deze zijn inmiddels allemaal weggewerkt en ik krijg ook geen enkele foutmelding als mijn script vastloopt. Tijdens het maken van de output voor het 'verbeterformulier' gebruik ik plain html met daartussen stukjes php die functies aanroepen. In deze stukjes php geeft het script er de brui aan. Hieronder een voorbeeld van hoe de functies in kwestie eruit zien en hoe deze aangeroepen worden:
Op de stukjes php met de "view_input" functie loopt het script niet vast, wel op de stukjes met de "checked" en "view_error" functies. Deze functies worden voordat het script vastloopt echter al vele malen gebruikt zonder problemen te geven. Het lijkt bovendien echt aan de plek in de code te liggen aangezien het probleem blijft bestaan als ik het stukje gelijk maak aan een stukje er net boven. Ik zie echter niet in waarom dit stukje nu ineens wel een fout zou geven. Wat het geheel helemaal bizar maakt is dat php er nergens over klaagt...
Samengevat: Ik kan de vinger niet op de zere plek leggen, het script loopt vast zonder foutmelding in code die identiek is aan andere code waar wel gewoon goed mee omgegaan wordt. Mijn vraag nu is dan ook of jullie een idee hebben waar het aan zou kunnen liggen. Overigens: tussen het vorige topic en dit topic zijn de aangeroepen functies van opbouw veranderd en nog steeds blijft het probleem bestaan.
Wat is het probleem? Ik heb een php script gemaakt die een htlm pagina output met invulvelden waarmee mensen zich in kunnen schrijven voor een wedstrijd. Deze input moet vervolgens gecheckt worden op leeg gelaten velden en velden die numeriek moeten zijn e.d. Tot daar gaat alles goed. Zolang iemand in 1 keer alle info goed invult dan gaat er ook niks fout en krijgt die persoon een overzich van de net ingevulde gegevens te zien en de mogelijkheid om deze te bevestigen waarna de aanmdeling afgerond wordt. Het gaat dan om deze pagina.
Waar het wel fout gaat is als de input niet meteen goed is. Het formulier moet dan opnieuw weergegeven worden met alle ingevoerde gegevens erin en een foutmelding bij het veld of de velden die verkeerd waren ingevoerd zodat men dit kan verbeteren. Bij de meeste invulvelden gaat dit ook gewoon goed overigens. Pas als er echt meerdere velden niet ingevuld worden gaan er gegarandeerd problemen optreden: Het 'correctieformulier' wordt dan maar gedeeltelijk weergegeven waardoor het niet verder gebruikt kan worden (er ontbreken velden en o.a. de submit knop). Als ik slechts 1 veld per keer leeg laat en dus een error laat geven dan wordt alleen bij de leeggelaten velden 'city', personal best STA (zowel minuten als seconden) en Announcement DYN/DNF een onvolledig formulier weergegeven.
Het vreemde is wel dat er dan niet direct onder de velden die een fout geven afgebroken wordt maar pas een stuk verderop...
Waar ik zelf al aan gedacht heb:
- geheugenprobleem: dit is m.i. niet zo, als ik namelijk erg veel data output (zoals postdata ofzo) dan gaat hij soms ineens ook weer meer van het script weergeven.
- Alles is netjes met aanhalingstekens e.d. omgeven. (tip uit vorige topic, was niet helemaal netjes gedaan nog)
- het verwijderen van de echo tussen de <?php en ?> tags waardoor er alleen een leeg stukje staat zorgt ervoor dat het hele script doorlopen wordt.
- het verwijderen van het hele stukje php laat wel het hele script doorlopen
- wanneer ik echo(functie) vervang door letterlijk echo("bla"); dan gaat het ook goed
- aan de executiontime ligt het ook niet (die staat op oneindig nu, tip uit vorige topic. Dit was echter nooit een issue omdat de executiontime < 1s bedraagt.)
- het stukje waar hij vastloopt precies hetzelfde maken als een stukje waar hij niet vastloopt heeft geen effect.
Zoals in mijn vorige topic te lezen was had ik veel last van php notices na het aanzetten van E_ALL in de error reporting. Deze zijn inmiddels allemaal weggewerkt en ik krijg ook geen enkele foutmelding als mijn script vastloopt. Tijdens het maken van de output voor het 'verbeterformulier' gebruik ik plain html met daartussen stukjes php die functies aanroepen. In deze stukjes php geeft het script er de brui aan. Hieronder een voorbeeld van hoe de functies in kwestie eruit zien en hoe deze aangeroepen worden:
PHP:
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
| <?php function checked($input1, $request, $index) { if (isset ($request[$index]) && $input1 == $request[$index]) $return = "CHECKED"; else $return = ""; return $return; } function view_error($error, $indexes) // functie definieren om uniforme errormessages te genereren { foreach ($indexes as $index) { if (isset($error[$index]) && strlen($error[$index]) > 0) { $output = (!isset($output)) ? '</tr><tr><td class="error"><td class="error">' : $output.''; $output .= '<b> Notice: </b>' . $error[$index] . '<br />'; } } if (isset($output)) return $output . '</td>'; } ?> <tr> <td class="head">Announcement STA </td> <td class="form"> <input size="1" type="text" value=<?php echo (view_input($_REQUEST, "ap_sta_m"));?> name="ap_sta_m" maxlength="2">:<input size="1" type="text" value=<?php echo (view_input($_REQUEST, "ap_sta_s"));?> name="ap_sta_s" maxlength="2"> (mm:ss) </td> <?php echo(view_error($error, array("ap_sta", "ap_sta_num")));?> </tr> <tr> <td class="head">DYN or DNF? </td> <td class="form"> <input style="border: 0px;" type="radio" value="dyn" name="dyndnf" <?php echo(checked("dyn", $_REQUEST, "dyndnf"));?>> Dynamic (with fins)<br /> <input style="border: 0px;" type="radio" value="dnf" name="dyndnf" <?php echo(checked("dnf", $_REQUEST, "dyndnf"));?>> Dynamic no fins </td> <?php echo(view_error($error, array("dyndnf")));?> </tr> |
Op de stukjes php met de "view_input" functie loopt het script niet vast, wel op de stukjes met de "checked" en "view_error" functies. Deze functies worden voordat het script vastloopt echter al vele malen gebruikt zonder problemen te geven. Het lijkt bovendien echt aan de plek in de code te liggen aangezien het probleem blijft bestaan als ik het stukje gelijk maak aan een stukje er net boven. Ik zie echter niet in waarom dit stukje nu ineens wel een fout zou geven. Wat het geheel helemaal bizar maakt is dat php er nergens over klaagt...
Samengevat: Ik kan de vinger niet op de zere plek leggen, het script loopt vast zonder foutmelding in code die identiek is aan andere code waar wel gewoon goed mee omgegaan wordt. Mijn vraag nu is dan ook of jullie een idee hebben waar het aan zou kunnen liggen. Overigens: tussen het vorige topic en dit topic zijn de aangeroepen functies van opbouw veranderd en nog steeds blijft het probleem bestaan.
Gemberthee: water met een smaakje.