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.
een tip los van je probleem: gebruik number_format() alleen in een regel waar je "echo" gebruikt.
Als er nu 2.99 uit je waarde komt, dan stop jij "2,99" in je session.
Zou je dat ergens anders willen gebruiken om bijvoorbeeld de dakisolatie bij de muurisolatie (3,99) op te tellen, dan blijk dat samen 5 op te leveren en waarschijnlijk verwacht jij dan 6,98
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.
Dit zou niets uit moeten maken, dus waarschijnlijk gaat er iets anders fout.
Maak je gebruik van frames?
Misschien zit er een spellingsfout ergens? Dump de gehele inhoud van $_SESSION eens?
Het lijkt mij ook een goed ontwerpprincipe om weergave van een pagina en verwerking van een formulier in twee afzonderlijke acties te stoppen, en in het laatste geval dien je direct een refresh te doen naar een weergavepagina zodat je niet blijft hangen op een "verwerkpagina". Oftewel volg het POST/redirect/GET patroon.
En als je direct/interactief het resultaat nodig hebt gebruik dan AJAX, je kunt dan in de achtergrond in een script dingen uitrekenen en direct retourneren, en tevens in een sessie opslaan voor later gebruik.
Maar voordat je dit doet lijkt het mij belangrijk om uit te zoeken wat er misgaat.
[$indexwaardeisolatietest] was ik mee aan het testen of deze wel werkt, maar ook niet. Dus van index naar isolatie_calc.php gaat goed, maar de andere kant op niet. Staar me er nu een beetje blind op, zie gewoon niet wat er mis gaat. Erg frustrerend...
Heb ze allemaal gelezen en op internet gezocht en dingen geprobeerd. Waardeer ook alle hulp van jullie kant. Maar begrijp sommige zaken niet. Ik ben meer van het grafische werk en probeer met te verbreden door dit zulk dingen zelf te proberen. Op isolatie_calc en op isolatie wordt het id met een $_POST binnen gehaald.
if( $_POST['id'] )
{
$id = $_POST['id'];
........
Kom er nog niet uit wat er dan nog meer gedaan moet worden met $_POST. Als ik de waardes direct in een $_SESSION zet of met een $_POST erin zet, de uitkomst is hetzelfde voor wat ik zie.
[size=xsmall]Toevoeging op 11/08/2020 22:19:42:[/size]
Thomas van den Heuvel op 11/08/2020 22:12:32
Uhm, heb je dat letterlijk geknipt en geplakt van je scherm, want er staat:
[quote="Roy Bulten op 11/08/2020 21:49:09"]Array ( [[color=#ff0000]$[/color]indexwaardeisolatietest] => 2.11 [besparen] => 793,00 )
Een sessie zou alleen indexen of (sub)arrays moeten bevatten lijkt mij.
[/quote]
Dat is een spelfout :)
Maar ik heb het in de code wel zonder de $.
Ik heb nog eens nagedacht over het oorspronkelijke bericht, en of ik moet verkeerd begrijpen waar er onduidelijkheid over is, maar volgens mij gaat er in eerste instantie niets mis.
De enige kanttekening die ik kan maken is dat je eigenlijk eerst zou moeten controleren of variabelen bestaan voordat je ze probeert te gebruiken.
$_SESSION en alle andere PHP-variabelen bestaan alleen aan de webserverkant. Het geproduceerde (HTML-)document is enkel de output hiervan, een webbrowser heeft hier geen weet van. Dit document is ook een momentopname van de toestand van de variabelen op de webserver op dat moment.
Dus als je een script #1 zou hebben:
<?php
session_start();
if (isset($_SESSION['test'])) {
echo $_SESSION['test'];
} else {
echo 'nothing here yet';
}
?>
En je opent script #1 in browsertab A dan zie je hierin 'nothing here yet'.
Open je vervolgens in browsertab B script #2 dan bevat $_SESSION['test'] nu de waarde 'whatever'.
Maar als je dan terugschakelt naar tab A dan is de tekst op je scherm niet ineens veranderd naar 'whatever'. Hiertoe zou je de pagina moeten verversen om script #1 opnieuw uit te voeren zodat de nieuwe uitvoer geproduceerd wordt.
Vergelijk dit met een analoge brievenbus. De enige manier om na te gaan of deze post bevat is de brievenbus controleren. Als een extern proces vervolgens post aflevert zal de brievenbus je hier niet automagisch van op de hoogte stellen. Je zult daartoe de brievenbus opnieuw moeten inspecteren.
Zo ook in jouw code; de enige manier om te controleren of er iets is veranderd is... door te controleren of er iets is veranderd. Tenzij je van push notifications gebruik maakt ofzo, maar dat lijkt mij niet echt van toepassing op dit vraagstuk. De normale richting is "pull", oftewel je trekt zelf alle informatie binnen, niemand anders zal je hier automatisch over informeren.
Zo ook in jouw code; de enige manier om te controleren of er iets is veranderd is... door te controleren of er iets is veranderd.
Ik begrijp wel wat je bedoelt, maar ik krijg het niet vertaald naar code. Kun je iets meer zeggen over hoe ik het kan controleren? Als ik een startpunt heb dan kom ik misschien zelf verder.
Zie nu ook de volgende melding op de index pagina:
Notice: Undefined index: besparen
Dat heeft met de $_SESSION["besparen"]; te maken.
Dat is alleen de 1e keer als je de pagina opent. Als je een waarde kiest en dan de pagina vernieuwd dan zie je gewoon de waarde.
Zie nu ook de volgende melding op de index pagina:
Notice: Undefined index: besparen
Dat heeft met de $_SESSION["besparen"]; te maken.
Dat is alleen de 1e keer als je de pagina opent. Als je een waarde kiest en dan de pagina vernieuwd dan zie je gewoon de waarde.
Zie mijn vorige reactie; controleer op het bestaan van de variabele mbv isset().
Heb je trouwens gecontroleerd of je geen last hebt van caching in je browser? Zorg dat deze tijdens ontwikkeling uit staat.
En zet het melden + weergeven van foutmeldingen aan mbv bovenaan je code:
Nadat een variabele in een sessie is gezet zou deze direct hierna beschikbaar moeten zijn. Zie nog steeds niet echt waar dit voor problemen zou zorgen en dit zou gewoon moeten werken.
Heb ik in alle 3 de pagina's geplaatst, krijg geen foutmelding te zien behalve dan die ik al noemde bij het 1e openen van de pagina of na het verwijderen van de cache.