PHP sessie doorsturen probleem?

Pagina: 1
Acties:
  • 677 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Na heel wat uren gezocht te hebben ben ik er nog steeds niet uit...

In mijn php webshop sla ik geselecteerde artikelen op in een sessie, welke ik vervolgens in de winkelwagen wil laten zien:

opslaan en doorsturen (submit.php):

PHP:
4
5
$_SESSION['cart'] = $productnummer.",".$maat.",".$hoeveelheid;
header("Location: winkelwagen.php");


weergeven (winkelwagen.php):

PHP:
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$cart = explode("|",$_SESSION['cart']);
foreach($cart as $products) {  
// Split 
* 
        $product[x] --> 
           x == 0 -> product id 
           x == 1 -> maat
           x == 2 -> hoeveelheid
      */ 
$product = explode(",",$products); 
        
dbConnect("webshop"); //juiste artikelgegevens ophalen uit db
$sql = "SELECT * 
FROM product 
WHERE productnr = '$product[0]'"; //dus product id uit array
$query = mysql_query($sql);
$pro_cart = mysql_fetch_array($query); 
echo $pro_cart['productnr'];  //etc.


Dit werkt op mijn lokale testomgeving perfect. Maar zodra ik mijn applicatie upload naar mijn hosting provider blijft mijn winkelwagen leeg??? Bij het debuggen ben ik erachter gekomen dat de sessie goed wordt aangemaakt en gevuld in submit.php, maar vanaf het moment dat de sessie wordt doorgestuurd naar winkelwagen.php (na header("Location: winkelwagen.php"); ) is deze weer leeg en wordt er dus niks weergegeven?

Ik heb al zitten zoeken in mijn php.ini lokaal en bij die van mijn hosting provider (omdat ik denk dat ik het in deze hoek moet zoeken aangezien het lokaal wel werkt en anders niet), maar kom niet direct verschillen tegen. Heb ook al P3P headers geprobeerd of geprobeerd om de session_id mee te sturen, maar dit mocht allemaal niet baten? Wie kan mij helpen?

Acties:
  • 0 Henk 'm!

  • SanderTje!
  • Registratie: Januari 2002
  • Niet online
Staat register_globals aan?

Kun je anders misschien een link posten naar de php.ini van je online webserver?

i7 10700, 32GB RAM, RTX 3080


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Heb je session_start wel gedaan? Gebruik je lokaal soms session.autostart? Maar is het niet makkelijker om dit al in een array op te slaan?

Zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
//opslaan
$data = array();
$data['productid'] = $productid;
$data['maat'] = $maat; 
$data['hoeveelheid'] = $hoeveelheid; 
$_SESSION['store_data'] = $data;

//weer oproepen
$data = $_SESSION['store_data']; 
echo $data['productid'];
echo $data['maat']; 
echo $data['hoeveelheid'];

[ Voor 17% gewijzigd door Noork op 09-02-2006 01:37 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Noork schreef op donderdag 09 februari 2006 @ 01:36:
Heb je session_start wel gedaan? Gebruik je lokaal soms session.autostart? Maar is het niet makkelijker om dit al in een array op te slaan?
Ik begin elke pagina met session_start() en ik gebruik geen session.autostart lokaal. Misschien makkelijker om dit al in een array te zetten (thanks voor de tip), maar zou voor dit probleem denk ik niks uitmaken...

Acties:
  • 0 Henk 'm!

  • StijNoS
  • Registratie: November 2000
  • Laatst online: 20-09 22:48
probeer eens voor je redirect een session_write_close();

dus dit:
PHP:
1
2
3
4
5
6
<? 
session_start();
$_SESSION['cart'] = $productnummer.",".$maat.",".$hoeveelheid; 
session_write_close(); 
header("Location: winkelwagen.php"); 
?>

??blabla??


Acties:
  • 0 Henk 'm!

  • MuddyMagical
  • Registratie: Januari 2001
  • Laatst online: 20:04
Wat zijn de versie nummers van je lokale testomgeving en je hoster? Misschien kan je hierdoor de oorzaak vinden.

* MuddyMagical heeft een keer 3 avonden lopen klieren met geneste queries in MySQL terwijl de hoster versie 4.0 draaide. Dat werkt dus niet... B)

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Probeer eens de sessie id's op beide pagina's te vergelijken:
PHP:
1
<? echo session_id(); ?>


En ik ga er vanuit dat de variabelen wel bestaan en er ook wat in staat. ;) Door even "echo $productnummer" te testen in submit.php

[ Voor 46% gewijzigd door Noork op 09-02-2006 23:24 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb bovenstaande posts nog niet geprobeerd (ga ik morgen doen). Maar heb in mijn live omgeving error reporting aangezet en dit resulteerde in de volgende melding:

Array to string conversion in winkelwagen.php on line 35.

Line 35 is:

$cart = explode("|",$_SESSION['cart']);

Weet iemand wat met 'array to string' bedoeld wordt en of dit de oorzaak kan zijn (is een notice en geen error)?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

In een omgeving waar register_globals op ON staat zijn $cart en $_SESSION['cart'] 1 en dezelfde variabele ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op vrijdag 10 februari 2006 @ 00:05:
In een omgeving waar register_globals op ON staat zijn $cart en $_SESSION['cart'] 1 en dezelfde variabele ;)
Thanks! Dit is idd de oorzaak! Alleen hoe kan ik dit het best oplossen zonder php.ini aan te passen (dus register_globals aan laten staan) aangezien ik niet denk dat mijn hosting provider de php.ini aan gaat passen...

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op vrijdag 10 februari 2006 @ 12:47:
[...]


Thanks! Dit is idd de oorzaak! Alleen hoe kan ik dit het best oplossen zonder php.ini aan te passen (dus register_globals aan laten staan) aangezien ik niet denk dat mijn hosting provider de php.ini aan gaat passen...
je zou kunnen kijken of je een mogelijkheid hebt om via een .htaccess het aan te passen:

code:
1
php_flag register_globals off

Acties:
  • 0 Henk 'm!

  • Mysteryman
  • Registratie: Februari 2001
  • Laatst online: 21-09 11:44

Mysteryman

kan jij wat ik kan...

of bovenin bij ieder document:

code:
1
2
3
4
<?
ini_set("register_globals", "0");

"jou code"

[ Voor 44% gewijzigd door Mysteryman op 10-02-2006 12:58 ]

Everybody happy??? I soon change that here we go...


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Mysteryman schreef op vrijdag 10 februari 2006 @ 12:57:
of bovenin bij ieder document:

code:
1
ini_set("register_globals", "0");
dat kan niet, want op dat moment zijn de variabelen al verwerkt ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Erkens schreef op vrijdag 10 februari 2006 @ 12:58:
[...]

dat kan niet, want op dat moment zijn de variabelen al verwerkt ;)
Dus? Dat is mijns inziens wel te overriden hoor...

Acties:
  • 0 Henk 'm!

  • ZroBioNe
  • Registratie: Augustus 2001
  • Niet online
Verwijderd schreef op vrijdag 10 februari 2006 @ 12:59:
[...]

Dus? Dat is mijns inziens wel te overriden hoor...
Je moet toch eerste
PHP:
1
session_start();

doen?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op vrijdag 10 februari 2006 @ 12:59:
[...]

Dus? Dat is mijns inziens wel te overriden hoor...
nee, met register_globals is het _onmogelijk_
en als je mij en de manual niet gelooft, waarom probeer je het niet ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Erkens schreef op vrijdag 10 februari 2006 @ 13:20:
[...]

nee, met register_globals is het _onmogelijk_
en als je mij en de manual niet gelooft, waarom probeer je het niet ;)
Owkee... Ik geloof je :) Ik geloofde het even niet, aangezien je bijv. memorylimit wel kan overriden.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste mensen thanks voor de reacts! Opgelost! Heb gewoon me variabele veranderd:

Oud:
$cart = explode("|",$_SESSION['cart']);

Nieuw:
$winkelwagen = explode("|",$_SESSION['cart']);

...en werkt perfect :P Ik ben weer blij! (buiten dat de register_globals nog aan staat, wat niet helemaal idiaal is natuurlijk :( )
Pagina: 1