php session werkt niet correct op 2e pagina

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior DevOps-ontwikkelaar eIDAS

Functie­omschrijving Burgers en bedrijven veilig en betrouwbaar digitaal toegang geven tot diensten en producten van het ministerie van Economische Zaken en Klimaat. Als senior DevOps-ontwikkelaar bouw je daar letterlijk aan mee. En dat doe je bij DICTU: een van de grootste en meest vooruitstrevende ICT-dienstverleners van de Rijksoverheid. Jij werkt mee aan de doorontwikkeling van eIDAS, dat staat voor Electronic IDentification Authentication and trust Services. Deze koppeling maakt de grensoverschrijdende authenticatie op overheidswebsites binnen de Europese Unie mogelijk. Het ministerie van Economische Zaken en Klimaat heeft één moderne toegangspoort voor zijn diensten en inspecties. Enkele daarvan zijn dankzij eIDAS inmiddels

Bekijk vacature »

Pagina: 1 2 3 volgende »

Roy B

Roy B

11/08/2020 01:51:03
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
// Start the session
session_start();

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


pagina 2:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
session_start();
echo "Het woord is: " . $_SESSION['woord'] . ".";
?>


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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?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.
Gewijzigd op 11/08/2020 01:51:47 door Roy B
 
PHP hulp

PHP hulp

26/10/2020 20:08:44
 
- Ariën -
Beheerder

- Ariën -

11/08/2020 02:01:04
Quote Anchor link
Je kan toch onder aan je derde script die sessie gewoon echo'en?
 
Roy B

Roy B

11/08/2020 09:33:10
Quote Anchor link
Als ik het onder het derde script zet dan zie ik de waarde.
Maar ik wil het op een andere pagina ook zien.

Ik heb een index.php en daar heb ik een tabel waar ik deze waarde in weer wil geven.
Deze waarde komt van een ander php bestand. De waarde heb ik verder ook nog nodig om een totaal bedrag uit te rekenen.

Op deze testsite kun je het zelf zien.
http://www.eenwebsitemetwordpress.nl/wp-content/themes/breno-child/besparingscalculator

De waarden onder de tabel worden met ajax weergegeven. Deze code heeft een andere forumgebruiker voor me gemaakt. Daar zie je wat het moet zijn. Misschien dat het ook het ajax resultaat gefilterd kan worden, maar van ajax heb ik helemaal geen verstand :(
 
- Ariën -
Beheerder

- Ariën -

11/08/2020 09:51:09
Quote Anchor link
Je wilt dus de waarde die uit de calculator komt in een sessie opslaan?
 
Roy B

Roy B

11/08/2020 09:55:46
Quote Anchor link
Ja met het 3e script. (of iets anders als dat beter is)
Deze sessie wil ik gebruiken om het bedrag dat je spaart weer te geven in de tabel.
Er komen nog meer rijen in de tabel met andere isolatie opties en dan wil ik met sessies de bedragen die gespaard worden weergeven en dan onderaan de tabel optellen om zo het totaal weer te geven.

Weet niet of dit de beste oplossing is, maar kwam op internet steeds weer op sessies uit.
 
- Ariën -
Beheerder

- Ariën -

11/08/2020 10:41:00
Quote Anchor link
Je kan de waarde die uit de berekening komt via een AJAX-request naar een PHP script sturen, die het vervolgens in een sessie plaatst.
 
Roy B

Roy B

11/08/2020 11:09:34
Quote Anchor link
Ok, ik snap wat je bedoelt. Denk alleen niet dat ik het voor elkaar ga krijgen met AJAX maar ga een poging doen. Zal eens googlen op AJAX request.
 
- Ariën -
Beheerder

- Ariën -

11/08/2020 11:58:25
Quote Anchor link
Een AJAX-request met de jQuery-library werkt behoorlijk eenvoudig:

https://www.w3schools.com/jquery/jquery_ajax_get_post.asp
 
Adoptive Solution

Adoptive Solution

11/08/2020 12:08:53
Quote Anchor link
De pagina gebruikt dezelfde code die ik hier heb gedumpt. (Hint. Kijk in de broncode)

https://www.phphulp.nl/php/forum/topic/2e-dropdown-vullen-op-basis-van-de-1e-dropdown/103650/#750562

Het enige wat moet gebeuren is in bestand isolatie_calc.php bovenaan een session_start() toe te voegen en verderop $_SESSION['besparen'] . Of wat er verder moet worden onthouden.
 
Roy B

Roy B

11/08/2020 12:35:54
Quote Anchor link
Adoptive Solution op 11/08/2020 12:08:53:
De pagina gebruikt dezelfde code die ik hier heb gedumpt. (Hint. Kijk in de broncode)

https://www.phphulp.nl/php/forum/topic/2e-dropdown-vullen-op-basis-van-de-1e-dropdown/103650/#750562

Het enige wat moet gebeuren is in bestand isolatie_calc.php bovenaan een session_start() toe te voegen en verderop $_SESSION['besparen'] . Of wat er verder moet worden onthouden.


Dat heb ik ook op dit moment.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?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;
?>


maar als ik dan op de index pagina de sessie start en een echo doe dan wordt de waarde alleen weergegeven als ik de pagina vernieuw.

In jouw code wordt met AJAX alles weergegeven met <p id="resultaat"></p>.
Dit zijn op dit moment 3 waarden die er dan weergegeven worden. Kan ik die ook apart van elkaar uitlezen/gebruiken? Want dan zou het ook op die manier kunnen.
 
- Ariën -
Beheerder

- Ariën -

11/08/2020 13:01:08
Quote Anchor link
Ik zie dat je met de calculator de waardes inderdaad via POST naar een PHP-script (isolatie.php en isolatie_calc.php) stuurt. De waardes uit je $_POST moet je wel uiteraard opslaan in je sessie, en ik zie dat je niks met $_POST doet in je script.
Gewijzigd op 11/08/2020 13:01:36 door - Ariën -
 
Ivo P

Ivo P

11/08/2020 14:57:46
Quote Anchor link
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
 
Thomas van den Heuvel

Thomas van den Heuvel

11/08/2020 15:51:51
Quote Anchor link
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.
 
Roy B

Roy B

11/08/2020 21:49:09
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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...
 
- Ariën -
Beheerder

- Ariën -

11/08/2020 21:50:56
Quote Anchor link
Mijn reactie nog gelezen?
 
Thomas van den Heuvel

Thomas van den Heuvel

11/08/2020 22:12:32
Quote Anchor link
Uhm, heb je dat letterlijk geknipt en geplakt van je scherm, want er staat:
Roy Bulten op 11/08/2020 21:49:09:
Array ( [$indexwaardeisolatietest] => 2.11 [besparen] => 793,00 )

Een sessie zou alleen indexen of (sub)arrays moeten bevatten lijkt mij.
Gewijzigd op 11/08/2020 22:13:45 door Thomas van den Heuvel
 
Roy B

Roy B

11/08/2020 22:15:59
Quote Anchor link
- 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.

Toevoeging op 11/08/2020 22:19:42:

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:
Roy Bulten op 11/08/2020 21:49:09:
Array ( [$indexwaardeisolatietest] => 2.11 [besparen] => 793,00 )

Een sessie zou alleen indexen of (sub)arrays moeten bevatten lijkt mij.


Dat is een spelfout :)
Maar ik heb het in de code wel zonder de $.
 
Thomas van den Heuvel

Thomas van den Heuvel

12/08/2020 11:07:02
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
session_start();
if (isset($_SESSION['test'])) {
    echo $_SESSION['test'];
}
else {
    echo 'nothing here yet';
}

?>

En een script #2:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?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.
Gewijzigd op 12/08/2020 11:12:39 door Thomas van den Heuvel
 
Roy B

Roy B

12/08/2020 20:47:40
Quote Anchor link
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.
Gewijzigd op 12/08/2020 22:14:47 door Roy B
 
Thomas van den Heuvel

Thomas van den Heuvel

12/08/2020 22:32:18
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?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.
 
Roy B

Roy B

12/08/2020 23:14:01
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?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.
Gewijzigd op 12/08/2020 23:31:46 door Roy B
 

Pagina: 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.