[php] raar verschijnsel met sessies

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb iets wat ik niet helemaal snap en niet bij php net kan terugvinden

er zijn een aantal pagina's waarbij ik de data graag in een sessie wil op slaan zodat ik het pas aan het einde in een database gooi.
Omdat te realiseren, heb ik op iedere pagina buttons gemaakt die doormiddel van een javascriptje doorgeven van welke pagina de code komt en waar ze heen willen. (alles is index.php, maar dmv includes zien ze telkens iets anders)
Dat werkt in princiepe goed, alleen nu gaat er iets raars fout bij de sessies

Ik bepaal van welke pagina ze komen en stop die waarde (een numerieke) in de variabele $from
Vervolgens zeg ik
PHP:
1
$_SESSION[$from] = $_POST;


Om het geheel te testen print_r ik de $_SESSION en $_POST telkens en daar zie ik dat het volgende gebeurt: Stel ik kom van pagina1 dan is er een array [1] in session die de waardes uit die post bevat. Ben ik op pagina2 en ik post het formulier weer, waarbij ik naar 3 ga, dan raak ik [1] kwijt en komt [2] er voor in de plaats. De overige waardes/arrays in m'n sessie blijven allemeaal wel bestaan. Het lijkt er dus op dat ie 'm vervangt omdat de key in princiepe iedere keer $from is. Is dat een bug, of normaal gedrag? Ik weet niet zo goed hoe ik het anders moet doen

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Session is al een array die assiciatief wordt gevuld. Waneer jij 'm ook nog eens gaat vullen met indices kan het best zijn dat bepaalde dingen worden overschreven. Misschien is het makkelijker om er een array 'tussen te zetten'.

Dan krijg je iets als:
PHP:
1
2
3
4
if (!isArray($_SESSION['formdata'])){
  $_SESSION['formdata']=Array();
}
$_SESSION['formdata'][$from]=$_POST;


Als het dan nog neit werkt, zou het kunnen liggen aan de 'scope' van $_POST. Misschien wordt alleen een verwijzing opgeslagen en het doel hiervan hoeft niet meer te bestaan op de volgende pagina.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dankje, het werkt inderdaad door die ['formdata'] er tussen te zetten.

maar, is dit nou een bug? of doe ik gewoon iets wat niet hoort en is het normaal gedrag?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Het op 2 verschillende manieren adresseren van een array levert ongedefinieerd gedrag op (wat blijkt). Het kan best zijn dat hierdoor bestaande gegevens overschreven worden wat weer verklaard waarom bepaalde gegevens weg waren. Waarschijnlijk had het ook geholpen waneer je ipv $_SESSION[$from] $_SESSION['hoi'.$from] had gebruikt. Misschien zelfs het concateneren met een lege string om aan te geven dat het getal geen integer was en dus sowieso als accosiatiefe adresereing gold had ook al geholpen. Personlijk vond ik mijn eerder aangedragen oplossing het netst (als je met arrays werkt dan, met classes had het nog netter gekunt ;) )

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • PrinsEdje80
  • Registratie: Oktober 2001
  • Laatst online: 15-07 09:34

PrinsEdje80

Holographic, not grated...

Blijf je nu niet zitten met het feit, als je weer een post gedaan hebt, dat het gedeelte vervalt in de sessie? Of dat je nonsense in je sessie krijgt?
Ik bedoel dat je misschien ook niet beter als volgt kunt werken:
PHP:
1
2
3
isset($_POST) {
$_SESSION['blaat'][$from] = $_POST;
}

?

[ Voor 39% gewijzigd door PrinsEdje80 op 13-01-2003 10:26 ]

Used to be Down Under... Foto gallery


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee hij doet het nu uitstekend.
als ik op een pagina kom waar ze al geweest zijn, wordt die entry in de sessie mooi overschreven met de nieuwe waardes uit de post, wat precies de bedoeling is. er treden verder geen rare dingen meer op.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PrinsEdje80 schreef op 13 January 2003 @ 10:24:
Blijf je nu niet zitten met het feit, als je weer een post gedaan hebt, dat het gedeelte vervalt in de sessie? Of dat je nonsense in je sessie krijgt?
Ik bedoel dat je misschien ook niet beter als volgt kunt werken:
PHP:
1
2
3
isset($_POST) {
$_SESSION['blaat'][$from] = $_POST;
}

?
dat isset($_POST) gebruik ik dus niet, want die bestaat altijd. ook als ie leeg is
ik doe gewoon if ($_POST). die is namelijk niet waar als ie leeg is
Pagina: 1