probleme de panier

Eléphant du PHP | 294 Messages

06 nov. 2005, 13:45

Bonjour.
J'ai développé un systeme de panier en local, tout fonctionnait. Une fois installé sur le serveur j'ai un comportement bizarre comme si les variables de sessions s'effaçaient.
Lorsque j'ajoute un produit il vient bien dans le panier, ses coordonnées sont stockées dans une variable de session "liste", qui est un tableau.
Au premier article ajouté donc, tous s'affiche correctement, si je retour a la boutique pour ajouter un second article, ou meme si je clique sur "page precedente", et que je reviens au panier, plus rien ne s'affiche. le panier est vide, Il me faut fermer le navigateur pour recuperer a nouveau un panier fonctionnel - pour 1 produit.
Pourtant en local tout baigne...comprends pas...help

<?php require_once('../Connections/connexioncentrale_db.php'); ?>
<?php
session_start();
//init des variables
if (!isset($_SESSION['total'])) $_SESSION['total']=0;
if(!isset($_GET['ajoutPanier'])) $ajoutPanier="";//init de ajoutPanier si non déclaré
else  $ajoutPanier=$_GET['ajoutPanier']; 
if(!isset($_GET['modifPanier'])) $modifPanier="";//init de modifPanier si non déclaré
else $modifPanier=$_GET['modifPanier'];
if(!isset($_GET['suppPanier'])) $suppPanier="";//init de suppPanier si non déclaré
else $suppPanier=$_GET['suppPanier'];
if(!isset($_GET['enregistreCommande'])) $enregistreCommande="";//init de enregistreCommande si non déclaré
else $enregistreCommande=$_GET['enregistreCommande'];
if ((!isset($_SESSION['liste']))&&($ajoutPanier=="")) $liste[]=array("VIDE",1,0,0);//init de liste si VIDE
if (isset($_SESSION['liste'])) $liste=$_SESSION['liste'];//recup de la liste de la session
mysql_select_db($database_connexioncentrale_db, $connexioncentrale_db);
$query_rsMarque = "SELECT id, marque FROM marque ORDER BY marque ASC";
$rsMarque = mysql_query($query_rsMarque, $connexioncentrale_db) or die(mysql_error());
$row_rsMarque = mysql_fetch_assoc($rsMarque);
$totalRows_rsMarque = mysql_num_rows($rsMarque);
/**
* Vérifie la présence d'un article dans le panier
*/
$reference=$_GET['VARarticles'];
function verif_panier($ref_article)
{
    $present = false;
    if(is_array($_SESSION['liste'][0]))
    {
        if(array_search($ref_article,$_SESSION['liste'][0]) != false)
        {
            $present = true;
        }
    }
    return $present;
}
//----------------------------------------------------AJOUT PANIER cree liste
if ($ajoutPanier=="AJOUTER" && $present == false)
{ 
$reference=$_GET['VARarticles'];
$nb=1; //par défaut la quantité est = 1
$prixUnit=$_GET['prixUnit'];
$totalarticle=$nb*$prixUnit;
$liste[]=array($reference,$nb,$prixUnit,$totalarticle);
$_SESSION['liste'] = array();
$_SESSION['liste']=$liste;
}
//----------------------------------------------------MODIF PANIER
if ($modifPanier=="OK")
{
	 for ($i=0;$i<count($liste);$i++)
		{
		$nbi='nb'.$i;
		$liste[$i][1]=$_GET["$nbi"];//recup du nbr d'article dans la liste
		$liste[$i][3]=$liste[$i][1]*$liste[$i][2];//prixArticle=nbre*prixUnitaire
		}
	$_SESSION['liste']=$liste;//mAj de la liste
}
//----------------------------------------------------SUPP PANIER
if ($suppPanier=="SUPPRIMER")
{
	$article=$_GET['article'];
	for ($i=0;$i<count($liste);$i++)
		{
		if($article==$i)
			array_splice($liste,$i,1);
		//suppression de l'article
		}
	$_SESSION['liste']=$liste;//mAj de la liste
}
//----------------------------------------------------COMMANDER
if ($enregistreCommande=="COMMANDER")
{
	if(!isset($_GET['action'])) 
	$_SESSION['action']="ENREGISTRER";//mémorise l'action necessaire pour la page commande.
	header("Location: login.php");
}
?>

Mammouth du PHP | 19672 Messages

06 nov. 2005, 13:49

Ton session_start() doit être en tout premier lieu dans le code:
<?php
session_start();
require_once('../Connections/connexioncentrale_db.php');
//init des variables 
Essaye déjà cette modification et revérifie.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 294 Messages

06 nov. 2005, 14:30

merci
c'est fait hélas ça change rien

Eléphant du PHP | 63 Messages

06 nov. 2005, 19:18

Deux choses à vérifier chez ton hébergeur:
- si l'identifiant de session est bien passé automatiquement (affiche le résultat de session_id() sur quelques pages, normalement cela doit être le même à chaque fois). Si non, stocke-le dans un cookie pour réouvrir la session par la suite.
- s'il n'y a pas de manip particulière à faire pour utiliser les sessions (chez Free par exemple il faut créer un dossier sessions/ à la racine du compte). Mais cela est plutôt rare chez les hébergeurs payants.

Eléphant du PHP | 294 Messages

07 nov. 2005, 01:28

Je suis chez ovh. sinon j'ai essayé le truc de l'Id session, et l'identifiant rest bien le même de page en page. Par contre j'ai essayé en ligne e t en local de suivre le tableau -"liste", qui contient les données des articles. En fait, en local , le tableau se remplis normalement, un nouvel article a chaque ajout, alors que bizarrement, en ligne, le tableau se vide a l'ajout d'un nouvel article.