Rechercher : dans
Par :

[PHP - SESSION] Tableau en session / PANIER

Dernière réponse le 21 jui 2007 à 14:46:46 kij_82, le 20 jui 2007 à 21:16:19 
 Signaler ce message aux modérateurs

Bonsoir,

Je m'adresse à vous car j'ai un gros problème sur un site.
Dans un de mes scripts PHP je manipule un tableau stocké en session afin d'y ajouter / retirer des éléments.

Voici le code permettant d'ajouter un élément s'il n'est pas présent encore dans ce tableau :


$offerList = null;

// --- Retrieve list of offers already in session
if ( isset($_SESSION['offerList']) && !empty($_SESSION['offerList']) ){
	$offerList = $_SESSION['offerList'];
}

// --- Check if current offer is not already in session
$found = false;
$i = 0;
$sizeList = sizeof($offerList);

while ( $found == false && $i < $sizeList ){
	if ( $offerList[$i] == $no_asp )
		$found = true;
	// --- Increase counter
	$i++;
}

// --- If no_asp found, advise the user
if ( $found == true ){
	echo "alert('L\'offre est deja dans votre panier.');";
	exit;
}
else {
	
	//echo "alert('Ajout de l offre ".$no_asp." a la place ".sizeof($offerList)."');";

	// --- Add current offer to current session
	$offerList[sizeof($offerList)] = $no_asp;
	$_SESSION['offerList'] = $offerList;

	echo "alert('Votre offre est dans le panier');";
	
}


En local (j'utilise EasyPhp), tout se passe bien pour ce script comme les autres, mais lorsque je met mes script sur un serveur (ce n'est pas le mien donc je ne connais pas trop la config, j'ai demandé aux admins du site de me la donner), j'ai l'erreur suivante qui se produit :

Lorsque je clic sur mon lien, le script ci-dessus est appelé afin d'ajouter une référence dans le tableau en session. L'ajout est correctement effectué la premiere fois, seulement si je reclic sur le meme lien, alors qu'en local le script détecte bien que l'offre est déjà présente en session, ici rien n'y fait. De meme si je tente d'ajouter d'autres offres --> OK mais au lieu d'avoir toutes mes offres sélectionnées, je n'ai a chaque fois que la dernière sélectionnée.

Bref, j'ai l'impression que le tableau est mal géré dans la session, et que ce dernier n'est justement pas géré en tant que tableau mais simplement comme une chaine de caractère (écrasée à chaque fois donc).

Quelqun saurait-il d'ou cela peut venir ? Je n'ai vraiment aucune idée pour le moment et ca fait un certain que je patauge ^^

Un grand merci à celui qui me tirera de ce mauvais pas :)
~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~
Configuration: Windows XP
Firefox 2.0.0.5

Meilleures réponses pour « [PHP SESSION] Tableau en session / PANIER » dans :
[PHP] Notice: Undefined index: VoirSi vous utilisez les tableaux $_POST ou $_GET pour récupérer les variables de vos formulaires ou autres, il se peut que vous tombiez sur cette erreur: Notice: Undefined index 'champs du tableau' in 'chemin du fichier php en cours d'execution' on line...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
PHP - Les variables d'environnement VoirNotion de variable d'environnement Les variables d'environnement sont, comme leur nom l'indique, des données stockées dans des variables permettant au programme d'avoir des informations sur son environnement. L'environnement, dans le cas du script...

1

renolipus, le 20 jui 2007 à 22:36:40
  • +1

Je comprend pas trop la logique de ton code, surtout pourquoi tu parcours tout le tableau pour voir si une valeur y est présente.

Cette modification ne ferait pas ce que tu veux ?

if ( !empty($_SESSION['offerList']) )
{
   if( in_array($no_asp, $_SESSION['offerList'] )
   {
      echo "alert('L\'offre est deja dans votre panier.');";
   }
   else
   {
   	$_SESSION['offerList'][] = $no_asp;
   	echo "alert('Votre offre est dans le panier');";
   }
}

Répondre à renolipus

2

kij_82, le 21 jui 2007 à 12:00:16

Ca fait un moment que j'ai pas fais de PHP de la sorte, donc j'ai oublié pas mal de chose ^^

Je ne connaissais pas la fonction in_array, tres pratique, un grand merci pour le coup de pouce :)

(Ca fonctionne impec)

Pour le coup, j'ai la même erreur pour ce qui est de la suppression d'un élément du tableau en session, voici mon code :


$offerList = array();

// --- Retrieve list of offers already in session
if ( isset($_SESSION['offerList']) && !empty($_SESSION['offerList']) ){
	$offerList = $_SESSION['offerList'];
}

// --- Check if current offer is not already in session
$found = false;
$i = 0;
$sizeList = sizeof($offerList);
$newList = null;

for ( $i=0; $i<$sizeList; $i++ ){
	if ( $offerList[$i] != $no_asp ){
		$newList[sizeof($newList)] = $offerList[$i];
	}
}

// --- Replace in session last list by the new one
$_SESSION['offerList'] = $newList;



J'imagine qu'il y a une fonction analogue à in_array pour supprimer un élément du tableau ?

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

3

kij_82, le 21 jui 2007 à 12:26:54

J'ai tenté de remplacer mon code par celui-ci :

if ( !empty($_SESSION['offerList']) ){

	for ( $i=0; $i<sizeof($_SESSION['offerList']); $i++ ){
		if ( $_SESSION['offerList'][$i] == $no_asp ){
			unset($_SESSION['offerList'][$i]);
			break;
		}
	}
}


Mais j'ai l'impression que la fonction "unset" ne supprimer pas correctement la valeur, mais la remplacer par une valeur "batarde". Car lorsque je parcours mon tableau pour l'afficher, j'ai une erreur d'offset sur l'ancien indice ou se situait l'offre que j'ai supprimé.

Quelqun saurait-il me dire comment supprimer correctement une valeur d'un tableau ?

~ N'oubliez pas la balise "Résolu" lorsque votre problème est... résolu :) ~

Répondre à kij_82

4

 renolipus, le 21 jui 2007 à 14:46:46
  • +1

Je ne sais pas trop ce que tu veux faire, je pense que ce doit-être ça, mais pas sûr.

if ( !empty($_SESSION['offerList']) )
{
      if( in_array($no_asp, $_SESSION['offerList']) ) 
      {
          $index = array_search($no_asp, $_SESSION['offerList']);
          unset($_SESSION['offerList'][$index]);
      }
}
Egalement, foreach est plus pratique qu'un simple for ou while pour parcourir tous les éléments d'un tableau ;)

Répondre à renolipus
Collection CommentÇaMarche.net