Hallo,

Ik heb 2 pagina's waarbij een waarde die op de ene wordt berekend weergegeven moet worden op de andere pagina.

Als ik het test met een vaste waarde dan werkt het prima.

pagina 1:

<?php
// Start the session
session_start();

$_SESSION['woord'] = "hallo";
?>


pagina 2:

<?php
session_start();
echo "Het woord is: " . $_SESSION['woord'] . ".";
?>


Nu probeer ik het met het onderstaande te doen in de 1e pagina


<?php
session_start();
$default_besparing = 0.00;
$besparing_dakisolatie = 0.00;

$row = $besparing->fetch_row();
$besparing_ses = $row[0];
$besparing_dakisolatie = number_format($default_besparing + $besparing_ses, 2, ",", ".");
$_SESSION['besparen'] = $besparing_dakisolatie;
?>


Op de 2e pagina heb ik dan

<?php
session_start();
echo $_SESSION['besparen'];
?>


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.

Iemand een idee wat ik fout doe?

Alvast bedankt.
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
Roy Bulten op 11/08/2020 01:51:03
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.
Thomas van den Heuvel op 11/08/2020 15:51:51

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?



Ik heb geen frames en ik zie ook geen spelfouten in de code.

Als ik Print_r ($_SESSION); doe dan krijg ik eerst Array() te zien, vernieuw ik de pagina dan zie ik

Array ( [$indexwaardeisolatietest] => 2.11 [besparen] => 793,00 )


[$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...
Mijn reactie nog gelezen?
Uhm, heb je dat letterlijk geknipt en geplakt van je scherm, want er staat:
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.
- Ariën - op 11/08/2020 21:50:56

Mijn reactie nog gelezen?

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 een script #2:
<?php
session_start();
$_SESSION['test'] = 'whatever';
?>

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.
Thomas van den Heuvel op 12/08/2020 11:07:02

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.
Roy Bulten op 12/08/2020 20:47:40
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:
<?php
error_reporting(E_ALL);
ini_set('display_startup_errors', true);
ini_set('display_errors', 'stdout');
?>


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.
Thomas van den Heuvel op 12/08/2020 22:32:18

Zie mijn vorige reactie; controleer op het bestaan van de variabele mbv isset().


if (isset($_SESSION['besparen'])) {
echo $_SESSION['besparen'];
} else {
echo 'nothing here yet';
}

Heb ik in de index geplaatst en dan krijg ik de melding "nothing here yet. Als ik pagina vernieuw zie ik de juiste waarde.

Thomas van den Heuvel op 12/08/2020 22:32:18

Heb je trouwens gecontroleerd of je geen last hebt van caching in je browser? Zorg dat deze tijdens ontwikkeling uit staat.


Heb ik uitstaan in de chrome developer console, maar moet nog wel steeds de cache verwijderen.

Thomas van den Heuvel op 12/08/2020 22:32:18

En zet het melden + weergeven van foutmeldingen aan mbv bovenaan je code:
<?php
error_reporting(E_ALL);
ini_set('display_startup_errors', true);
ini_set('display_errors', 'stdout');
?>




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.

Reageren