[PHP] Session variable wordt niet goed opgeslagen of zo

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Balachmar
  • Registratie: Mei 2002
  • Laatst online: 06-08 21:15

Balachmar

The truth is out there

Topicstarter
Ik heb de volgende code (ja uit een boek)

<?PHP

// start session
session_start();

//Initialise counter
if(!isset($Counter))
{
$Counter = 0;
}

//Show session-ID and counter
printf("Our session ID is: %s<br>", session_id());
print("The counter value is: $Counter");

// Raise counter
$Counter++;

// Register our session variable
session_register("Counter");

?>

Als ik dit draai onder PHP en IIS.
Doet ie iets toch niet goed.
De session ID wordt WEL goed weergegeven, maar de counter telt niet op als ik op refresh klik.

Weet iemand waar dat aan ligt? Ik denk zelf misschien aan permissions van users in een bepaalde directory, die wordt gebruikt om de sessie-gegevens in op te slaan. Maar daar heb ik de IUSR al aan toegevoegd. (met permissie: schrijven, lezen, wijzigen)

Systeempje; Ballaida of Avalon in GuildWars


Acties:
  • 0 Henk 'm!

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 16-08 06:44

CyberSnooP

^^^^ schrijft --->

Welke PHP-versie? Lees je de variabele wel goed uit je sessie? Moet je niet de $_SESSION superglobal-array gebruiken alsvolgt:
PHP:
1
$Counter = $_SESSION['Counter'];

of session_register(..) zetten voordat je $Counter weergeeft?

Je kunt [php] code-code-code [/php] gebruiken om mooie je code netjes weer te geven.

[ Voor 3% gewijzigd door CyberSnooP op 13-12-2002 23:29 ]

|_____vakje______|


Acties:
  • 0 Henk 'm!

  • eXtReMeBiE
  • Registratie: Februari 2002
  • Laatst online: 07-09 13:29
Idd, als hij $Counter moet uitlezen uit een sessie, moet je $_SESSION['Counter'] (superglobal, niet bruikbaar in oude versies van PHP) gebruiken, of, als je een oudere PHP versie hebt $HTTP_SESSION_VARS['Counter'].
Misschien heb je hier wat aan, en dan met name de 'Examples' (example #5 komt enigszins overeen met jouw voorbeeld). :)

Edit:
PHP:
1
2
3
4
5
6
7
8
9
10
Dit geldt ook voor cookies, bijvoorbeeld als je een cookie hebt gemaakt:
$HTTP_COOKIE_VARS['Counter']

En forms:
$HTTP_GET_VARS['blaat'] bij een form waarbij de action 'GET' is, en
$HTTP_POST_VARS['blaat'] bij een form waarbij de action 'POST' is.

Met de superglobals, respectievelijk
$_GET['blaat'] en
$_POST['blaat']

Meer info over Superglobals en misschien dat je aan dit artikel nog wat hebt :)

[ Voor 59% gewijzigd door eXtReMeBiE op 13-12-2002 23:57 ]


Acties:
  • 0 Henk 'm!

  • Balachmar
  • Registratie: Mei 2002
  • Laatst online: 06-08 21:15

Balachmar

The truth is out there

Topicstarter
ok, ik heb example 5 gewoon exact gecopieerd.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<?php
if (!session_is_registered('count')) {
    session_register('count');
    $count = 1;
}
else {
    $count++;
}
?>

Hello visitor, you have seen this page <?php echo $count; ?> times.<p>

To continue, <A HREF="nextpage.php?<?php echo SID?>">click here</A>

dat was dus dit
maar dan geeft ie in Iexplorer weer:

Notice: Undefined variable: count in C:\Inetpub\Scripts\session4.php on line 7
Hello visitor, you have seen this page 1 times.
To continue, click here

Beetje wazig.
Trouwens ik heb net de nieuwste PHP versie gedownload en geinstalleerd, omdat ik dacht dat het daaraan lag.
Ik heb nu dus nog steeds een beetje het idee, dat ie geen toegang heeft tot de plaats waar die variables worden weggeschreven, maar daarover heb ik nog niets gehoord...
Ik vond het trouwens ook wel zo overzichtelijk zo een PHP box, ik wist alleen nog niet dat dat kon...

Systeempje; Ballaida of Avalon in GuildWars


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 18-09 16:24

mulder

ik spuug op het trottoir

Vertaal de fout, wat staat er dan? Je doet $count++... tel 1 bij niks op

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Balachmar
  • Registratie: Mei 2002
  • Laatst online: 06-08 21:15

Balachmar

The truth is out there

Topicstarter
Als het goed is zorgt deze code er toch voor, dat als die sessievariabele nog niet aanwezig is, dat die dan op 1 wordt gesteld, maar als die al wel gedeclareerd is, dat er dan 1 bij opgeteld wordt.

Tenminste dat is de bedoeling, hoe moet je dat dan schrijven in PHP?

[ Voor 16% gewijzigd door Balachmar op 14-12-2002 10:40 ]

Systeempje; Ballaida of Avalon in GuildWars


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 18-09 16:24

mulder

ik spuug op het trottoir

Volgens mij staat er:
als de SESSIE variable 'count' niet is geregistreerd maak de SESSIE variable count aan, anders bij de unassigned LOCAL variable 'count 1 op.

Maar nu begin ik zelf te twijfelen... het blijft nl PHP, ben daarin beetje n00b... Hmmzz. Moet je niet gewoon eerst session_start() doen? Bovendien zou ik een session variable gewoon aanspreken met $_SESSION, voor de leesbaarheid.

[ Voor 4% gewijzigd door mulder op 14-12-2002 11:06 ]

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • iznogood
  • Registratie: September 2001
  • Niet online
Jou webserver draait zeker onder windows.. ik heb hetzelfde probleem. Als jou webserver onder linux draait zal het wel werken. Ik werk nu gewoon met cookies ipv sessions.

Just as Good


Acties:
  • 0 Henk 'm!

  • Balachmar
  • Registratie: Mei 2002
  • Laatst online: 06-08 21:15

Balachmar

The truth is out there

Topicstarter
ja, bovenaan staat als het goed is dat ik met IIS werk.
Maar het moet toch ook gewoon met sessions kunnen, ook al draai ik IIS.
Ik weet vrijwel zeker dat daar toch gewoon een oplossing voor moet zijn.

[ Voor 58% gewijzigd door Balachmar op 14-12-2002 11:21 ]

Systeempje; Ballaida of Avalon in GuildWars


Acties:
  • 0 Henk 'm!

  • iznogood
  • Registratie: September 2001
  • Niet online
Phoenixx2K schreef op 14 December 2002 @ 11:18:
ja, bovenaan staat als het goed is dat ik met IIS werk
Ow .. over het hoofd gezien ... Ik had ongeveer dezelfde problemen, maar dan met apache onder winxp.

Just as Good


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 18-09 16:24

mulder

ik spuug op het trottoir

iznogood schreef op 14 December 2002 @ 11:08:
Jou webserver draait zeker onder windows.. ik heb hetzelfde probleem. Als jou webserver onder linux draait zal het wel werken. Ik werk nu gewoon met cookies ipv sessions.
Dat is natuurlijk gelul van een dronken aardbei, ik werk hier ook met sessions, PHP, gewoon onder Windows.

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Lijkt me weer zo'n register_globals probleem.. (en een probleem van een sterk verouderd PHP-boek blijkbaar ;))

Gebruik de SESSION superglobals, werkt ook nog eens veel makkelijker.

gewoon

PHP:
1
2
3
4
5
6
session_start();
if (isset($_SESSION['count'])) {
    $_SESSION['count'] ++;
} else {
    $_SESSION['count'] = 1;
}


oid.

Acties:
  • 0 Henk 'm!

  • iznogood
  • Registratie: September 2001
  • Niet online
Dat is natuurlijk gelul van een dronken aardbei, ik werk hier ook met sessions, PHP, gewoon onder Windows.
Beetje overdreven om zo te reageren ... maar iig in die waan zat ik .. zal er toch wel wat anders aan de hand zijn :) de apache config en php.ini lijken allebei in orde. En ik had ook letterlijk wat overgenomen uit het ( waarschijnlijk verouderde ) boek. Ik zal het bovenstaande ook eens uit gaan proberen. ;)

[ Voor 8% gewijzigd door iznogood op 14-12-2002 11:32 . Reden: uplightning ]

Just as Good


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 18-09 16:24

mulder

ik spuug op het trottoir

lighten up dude ;)

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Balachmar
  • Registratie: Mei 2002
  • Laatst online: 06-08 21:15

Balachmar

The truth is out there

Topicstarter
Bedankt Bosmonster, jij had helemaal gelijk! _/-\o_

met de volgende code doet ie het uitstekend :+

PHP:
1
2
3
4
5
6
7
8
9
10
<?
session_start(); 
if (isset($_SESSION['count'])) { 
    $_SESSION['count'] ++; 
} else { 
    $_SESSION['count'] = 1; 
}
$Counter = $_SESSION['count'];
print("The counter value is: $Counter");
?> 


Misschien ook leuk voor jou, iznogood :P

Systeempje; Ballaida of Avalon in GuildWars

Pagina: 1