De waarde wordt nu pas weergegeven nadat de pagina vernieuwd wordt en dat is vervelend als je iets uitrekent en daarna de pagina moet vernieuwen om het resultaat te zien.
>> Heb ik in de index geplaatst en dan krijg ik de melding "nothing here yet. Als ik pagina vernieuw zie ik de juiste waarde.
Is het probleem nu opgelost dan?
Nee want ik zou graag zien dat de waarde uit zichzelf veranderd zodra de waarde in de dropdowns veranderen. Als ik de pagina vernieuw zie je de waarde wel maar ben je de rest kwijt.
Code is aangeleverd door Adoptive Solution en daar ben ik mee verder gaan proberen.
Je ziet op de test pagina dat de waarde van AJAX wel steeds vernieuwd maar de waarde in de sessie steeds 1 achter loopt.
Als eerste .. probeer je code beter te structureren. Stukken php-code tussen de html is niet overzichtelijk. Beter is het om de berekeningen in php bovenaan de pagina te maken en om dan in de html-code alleen een php-variabele te echo'en.
Dat gezegd hebbende ... het stukje waar het om gaat is volgens mij dit:
Op het moment dat je de pagina de allereerste keer inlaadt is de waarde/sessie nog niet gewijzigd en dus wordt de standaardwaarde 'niets' getoond. Als je dan de dropdown wijzigt, zul je tevens de waarde in die <td></td> moeten vervangen door de juiste waarde.
Als eerste .. probeer je code beter te structureren. Stukken php-code tussen de html is niet overzichtelijk. Beter is het om de berekeningen in php bovenaan de pagina te maken en om dan in de html-code alleen een php-variabele te echo'en.
Als ik het aan het werk krijg dan ga ik dat zeker aanpassen.
Ozzie PHP op 13/08/2020 16:11:16
Dat gezegd hebbende ... het stukje waar het om gaat is volgens mij dit:
Op het moment dat je de pagina de allereerste keer inlaadt is de waarde/sessie nog niet gewijzigd en dus wordt de standaardwaarde 'niets' getoond. Als je dan de dropdown wijzigt, zul je tevens de waarde in die <td></td> moeten vervangen door de juiste waarde.
Het gaat idd om dat stukje, maar het probleem is dat ik het dat niet voor elkaar krijg. Er moet dan iets komen die controleert of de dropdown veranderd.
Ik denk dat je best e.e.a. kunt combineren? Je kunt best een boodschap tonen en tegelijkertijd een nieuwe dropdown weergeven. JSON kan prima een array met al deze informatie-elementen teruggeven.
Ik zou de sessie voornamelijk gebruiken voor initialisatie, bijvoorbeeld voor het moment dat iemand besluit de pagina te verversen tijdens het selectieproces ofzo.
Omdat je gebruik maakt van AJAX-calls is het misschien handig dat je je formulieren ook op dezelfde manier initialiseert zodat je niet twee dingen (het initieel opbouwen van de pagina en het aanpassen van de dropdowns via AJAX-calls) op verschillende manieren probeert te doen, dus voorkom dat je verschillende routines hebt die in wezen hetzelfde doen.
singleSelectChangeValue() doet op dit moment ook niets omdat die variabelen alleen binnen de context van die functie bestaan?
Misschien is het het makkelijkste om dit stap voor stap uit te werken. Schrijf eerst code voor de eerste dropdown, dan voor de tweede. Zorg dat dit alles werkt, en kijk vervolgens terug hoe e.e.a. eventueel efficiënter aangepakt kan worden. Laat misschien in eerste instantie de sessie in het geheel achterwege, dit zorgt enkel voor extra complexiteit. Probeer ook vooral niet alles tegelijkertijd te doen maar compartimenteer dit in stappen, zodat je makkelijker het overzicht kunt bewaren. Ik heb namelijk de indruk dat vooral dit laatste een probleem is, dus maak het jezelf makkelijk door het op te delen in stukken en doe één ding tegelijkertijd :).
Ik denk dat je best e.e.a. kunt combineren? Je kunt best een boodschap tonen en tegelijkertijd een nieuwe dropdown weergeven. JSON kan prima een array met al deze informatie-elementen teruggeven.
Aangezien ik het niet voor elkaar krijg heb ik even naar jouw suggestie JSON gekeken, wat voorbeelden gevonden en wat getest.
1 voorbeeld heeft 3 dropdowns en die heb ik aangepast en dat werkt. Dit is hoe ik nu het json bestand heb. Is dat op een juiste wijze of kan het ook beter?
De waarden met de bedragen staan nu ook in een dropdown. Deze wil ik gewoon als tekst weergegeven. Daarvoor zal onderstaande aangepast moeten worden en moet ik de waarde van de besparing kunnen gebruiken om meerdere bij elkaar op te tellen. Kun je me daar mee op weg helpen?
Je hoeft de options niet helemaal uit te schrijven als JSON, ik bedoelde meer zoiets:
<?php
$return = []; // JSON response
$return['message'] = 'Hallo Pietje Puk';
ob_start(); // gebruik output buffering, scheelt je een hoop quotes enzo
$result = $con->query('...');
while ($row = $result->fetch_assoc()) {
// voor de goede orde zouden waarden van $row ook ge-escaped moeten worden met htmlspecialchars()
// indien deze in een HTML-context gebruikt worden zoals hieronder het geval is
?><option value="<?php echo $row['some_key']; ?>"><?php echo $row['some_value']; ?></option><?php
}
$return['options'] = ob_get_clean();
// bouw de response
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($return);
?>
Nu bevat de response twee elementen: message en options.