[PHP] SESSION array veranderd bij paginawisseling

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
Goeieavond medetweakers, ik heb een vaag probleem en vraag hierbij jullie hulp :)

Ik ben bezig met een website met arrays en er doet zich een raar probleem voor. Met een functie die ik zelf geschreven heb vul ik netjes een array.

Ik gebruik twee variabelen binnen een array. Het eerste moet een product voorstellen en deze is zo:
PHP:
1
$_SESSION["bestelling"][*variabele*]
De tweede geeft aan hoeveel er besteld zijn en ziet er ongeveer hetzelfde uit:
PHP:
1
$_SESSION["waardes"][*variabele*]

Hierbij verwijst *variabele* naar een produkt met bijbehorende aantal.

Nu is dit mijn probleem. Eerst word de array gevuld en dan word je doorgestuurd naar een pagina. Nu krijg ik aan het einde van de pagina waar de array gevuld word het volgende als ik
PHP:
1
print_r($_SESSION);
doe (voordat je middels een HEADER doorgestuurd word):
PHP:
1
2
Array ( [bestelling] => Array ( [0] => 1 [1] => 2 [2] => 9 ) 
        [aantal] => Array ( [0] => 1 [1] => 1 [2] => 1 ) )


Dit ging telkens fout en heb ik om te testen de volgende testpagina aangemaakt met alleen de volgende code, verder niets:
PHP:
1
2
SESSION_START();
print_r($_SESSION);


En als output krijg ik dan dit:
PHP:
1
2
Array ( [bestelling] => 1 [aantal] => [producten] => Array 
      ( [bestelling] => Array ( [0] => 1 [1] => 2 [2] => 9 ) ) [waardes] => )


Kortom, mijn array ziet er plotseling heel anders uit :(

Ik zit hier nu een paar uur aan te kloten en weet niet wat het is....

Wie helpt mij? _/-\o_
EDIT:
De pagina waar de array gevuld word, begint met
PHP:
1
2
session_start(); 
unset($_SESSION);
om te zorgen dat de variabele $_SESSION leeg is...

EDIT2:
Na even een tweede testpagina aangemaakt te hebben met een SESSION_DESTROY(); word het nog vager. Op de pagina waar de array's gevuld worden komt aan het einde nog steeds het goede rijtje, maar op de testpagina verschijnt nu alleen
PHP:
1
Array ( )
:?

[ Voor 47% gewijzigd door Morax op 18-01-2004 01:33 ]

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

  • Hark
  • Registratie: Februari 2001
  • Laatst online: 08-07 11:11
Waar komt het veld [producten] op de test pagina vandaan? Het woord producten komt helemaal niet voor in de sessie variabele op de eerste pagina. De sessie moet dus ergens veranderd worden tussen de eerste en de tweede printr. (php verzint echt niet zelf een veld met de naam 'producten'). Of de tweede printr print een hele andere sessie dan de eerste printr, maar dat lijkt me sterk aangezien je unset($_SESSION); gebruikt. Verwijder anders voor de zekerheid eens al je cookies. Dat na SESSION_DESTROY(); je sessie variabele leeg is (EDIT 2) lijkt me niet zo vreemd toch?

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Nadat je Hark's comments hebt uitgevoerd en waarschijnlijk je probleem wel opgelost zult hebben (kzie niet waar het zo snel anders aan kan liggen), kun je eens naar het volgende kijken.

Je gebruikt 2 arrays, terwijl dat eigenlijk niet nodig is. Ik neem aan dat je "bestelling" een productID is, of iets in die richting, je zou ook een array zo kunnen aanmaken:

$array["bestelling"]["aantal"]

tis maar een idee ;)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Of in deze vorm, dat is ook wel makkelijk en overzichtelijk:
$_SESSION['bestelling'][{bestellingID}] = {aantal};

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
Ten eerste wil ik zeggen dat ik 1 keer heel even een tweede testpagina aangeroepen hebt met daarin SESSION_DESTROY, daarna staat er op geen pagina meer SESSION_DESTROY en die tweede testpagina is verwijderd.
Als ik dan de pagina aanroep waar de array gevuld word, staat aan het einde weer gewoon het rijtje zoals hij moet zijn. Als ik hem dan doorstuur naar de testpagina waar alleen
PHP:
1
2
SESSION_START();
print_r($_SESSION);
staat, dan krijg ik op die pagina telkens als output
PHP:
1
Array ( )
terwijl aan het einde van de vorige pagina, de array gewoon was zoals hij moest zijn.

Overigens heb ik mijn arrays aangepast op de manier die Michali voorstelde, maar aan het einde van de pagina is hij precies gevuld zoals hij moet zijn :)

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

  • Hark
  • Registratie: Februari 2001
  • Laatst online: 08-07 11:11
Als de sessie nadat je hem hebt verwijderd weg blijft op de testpagina lijkt het me duidelijk dat je op de testpagina een sessie te pakken hebt die niet dezelfde is als degene die je op de eerste pagina maakt. Geef je de sessie op de eerste pagina een naam of zo? Of bekijk je de sessie op de twee pagina's met verschillende browsers? Klinkt misschien stom, maar ik zou echt niet weten wat het anders zou kunnen zijn.

Acties:
  • 0 Henk 'm!

  • Hark
  • Registratie: Februari 2001
  • Laatst online: 08-07 11:11
Vervang SESSION_START(); overigens door session_start(); Ik weet eigenlijk niet of dat uitmaakt, maar het is in elk geval netter.

Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
Nee, de pagina waarop de array gevuld word, word door middel van
PHP:
1
header("location:test.php");

doorgestuurd naar de testpagina.

De array word op de volgende manier gevuld:
PHP:
1
$_SESSION["bestelling"][$product_id] = $aantal;


Ik kom er echt niet uit :(

[ Voor 6% gewijzigd door Morax op 18-01-2004 18:11 ]

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Haal sowieso die unset op je $_SESSION es weg, dat lijkt me nogal een gevaarlijke constructie. Als je sessie leeggemaakt moet worden moet je maar session_destroy/session_unset gebruiken?

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Je gebruikt toch niet session_register nog ergens in je code?
If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister().
Dat wil namelijk nog wel eens tot vage problemen leiden. Kun je trouwens niet gewoon een normalere test gebruiken?

Zoiets ofzo:
PHP:
1
2
3
4
5
6
7
<? session_start();
print_r($_SESSION);
$_SESSION[b][0] = 'test0'
$_SESSION[b][1] = 'test1'
print_r($_SESSION);
?>
<a href="<?=$_SERVER['PHP_SELF']?>">SessieId: <?=session_id()?></a><br />

[ Voor 45% gewijzigd door Spider.007 op 18-01-2004 18:42 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
Nope, kijk naar mijn post hierboven:
De array word op de volgende manier gevuld:
PHP:
1
$_SESSION["bestelling"][$product_id] = $aantal;

What do you mean I have no life? I am a gamer, I got millions!

Pagina: 1