[PHP] Probleem met sessie variabele

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • prutsger
  • Registratie: Oktober 2001
  • Laatst online: 11-06 14:59
Ik zal vast wel iets simpels over het hoofd zien, maar ik loop nu tegen een heel raar probleem aan waar ik na 3 dagen prutsen geen oplossing voor vind (lees: de search en google brachten geen oplossing).

Ik heb een index.php waarin de gekozen pagina wordt geinclude. Ik wil graag op een makkelijke manier een javascript alert naar de gebruiker kunnen sturen, dus ik heb de volgende code onderaan de index.php, net boven de </body> toegevoegd zodat eerst de gevraagde pagina wordt geladen en dan de alert verschijnt:

PHP:
1
2
3
4
5
6
7
8
if ( isset ( $_SESSION['ses_MESSAGE'] ) AND !$_SESSION['ses_MESSAGE'] == "" ) {
  echo "<script type=\"text/javascript\">\n";
  echo "  alert ( '" . $_SESSION['ses_MESSAGE'] . "' );\n";
  echo "</script>\n";

  $_SESSION['ses_MESSAGE'] = "";
  unset ( $_SESSION['ses_MESSAGE'] );
}


De laatste twee regels moeten dus de sessie variabele weer weggooien anders krijg je elke keer de alert te zien.

Wanneer ik de melding wil geven:

PHP:
1
2
3
4
if ( blnIsValidEmail ( $strEmail ) ) {
  $_SESSION['ses_MESSAGE'] = $strEmail . " is toegevoegd!";
  Redirect ( $strUrl );
}


Nu wordt de alert alleen getoond als ik de regels
PHP:
1
2
$_SESSION['ses_MESSAGE'] = "";
unset ( $_SESSION['ses_MESSAGE'] );

uitcomment. De constructie werkt dus prima, maar dan krijg ik dus bij elke volgende pagina waar ik heen ga weer die message te zien die ik al lang gezien heb :) Maar als ik ze laat staan (1 van beide is uiteraard voldoende) wordt kennelijk de variabele geleegd voordat de code erboven wordt uitgevoerd :?

Ik zie het ff niet meer, jullie wel?

Acties:
  • 0 Henk 'm!

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn ella 👌

Nadat je het bericht hebt verzonden gewoon even unsetten. Niet zo moeilijk lijkt me.
Wat je nu doet is het bericht eerst overschrijven met niets en dan unsetten.

don't be afraid of machines, be afraid of the people who build and train them.


  • prutsger
  • Registratie: Oktober 2001
  • Laatst online: 11-06 14:59
Dat doe ik nu toch?

Ik zal het nog even duidelijk neerzetten want ik kan me voorstellen dat mijn verhaal niet helemaal helder is.

Index.php (is altijd de geopende pagina):
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
session_start();

<html>
  <head>...knip...</head>
  <body>
    //...knip... opbouw van de pagina

    //via allerlei includes
    if ( blnIsValidEmail ( $strEmail ) ) {
      $_SESSION['ses_MESSAGE'] = $strEmail . " is toegevoegd!";
      Redirect ( $strUrl );
    }

    //...knip... rest van de pagina hier

    if ( isset ( $_SESSION['ses_MESSAGE'] ) ) {
      echo "<script type=\"text/javascript\">\n";
      echo "  alert ( '" . $_SESSION['ses_MESSAGE'] . "' );\n";
      echo "</script>\n";
                 
      unset ( $_SESSION['ses_MESSAGE'] );
    }
  </body>
</html>


De $_SESSION['ses_MESSAGE'] wordt dus gevuld met de boodschap, en index.php wordt opnieuw geladen (nu dankzij includes zonder dat stukje waar de $_SESSION['ses_MESSAGE'] gevuld wordt)

Onderaan is $_SESSION['ses_MESSAGE'] nog steeds gevuld. De javascript alert wordt alleen getoond als ik de regel 'unset ( $_SESSION['ses_MESSAGE'] );' weghaal. Terwijl de variabele dus pas wordt unset na het parsen van het stukje javascript.

Als ik die regel dus weglaat, en de gebruiker navigeert naar een andere pagina (=andere include in main div) wordt dus die melding weer getoond terwijl die niet meer van toepassing is.

Ik hoop dat het zo iets duidelijker is.

[Edit @ DemonTPx: de session_start() staat bovenin de index.php.]

[ Voor 1% gewijzigd door prutsger op 13-09-2006 09:59 . Reden: session.start(); ]


  • DemonTPx
  • Registratie: December 2002
  • Laatst online: 09-04 10:49
Euhw... klein vraagje:
waar is de session_start() ??

of word die automatisch gestart?

  • WormLord
  • Registratie: September 2003
  • Laatst online: 10-05 11:00

WormLord

Devver

Ik zou na die redirect op regel 9 eens een exit() toevoegen. Nu word namelijk bij de redirect nog de rest van de pagina uitgevoerd, inclusief het unsettten van de message in de session.

  • prutsger
  • Registratie: Oktober 2001
  • Laatst online: 11-06 14:59
WormLord schreef op woensdag 13 september 2006 @ 09:59:
Ik zou na die redirect op regel 9 eens een exit() toevoegen. Nu word namelijk bij de redirect nog de rest van de pagina uitgevoerd, inclusief het unsettten van de message in de session.
Yep, dat doet t hem. Ik dacht dat zo'n redirect direct uitgevoerd wordt. In die functie wordt eerst met headers geprobeerd en als die al verstuurd zijn wordt js gebruikt. In dit geval is er al output gegenereerd en wordt dus js gebruikt. Dus die wordt pas uitgevoerd nadat alle php is geparsed, inclusief het unsetten van de sessie variabele!

Thanks, nu kan ik vanaf waar ik maar wil in de site de variabele vullen en dat wordt dan 1x getoond!
Pagina: 1