Page 1 sur 1

Supprimer variable dans une session

Posté : 13 nov. 2006, 18:25
par Valawa
Bonjour,

Je viens de créer un caddie pour un site, afin d'y stocker des informations de commande.

Quand j'ajouter des produits, voici le code :
if(!isset($_SESSION['panier'])) 
{ 
    $_SESSION['panier'] = array(); 
    $_SESSION['panier']['ref'] = array(); 
    $_SESSION['panier']['id_produit'] = array(); 
    $_SESSION['panier']['qte'] = array(); 
    $_SESSION['panier']['taille'] = array(); 
    $_SESSION['panier']['couleur'] = array(); 
    $_SESSION['panier']['prix'] = array(); 
} 

/* Ici, on sait que le panier existe, donc on ajoute l'article dedans. */ 
$count = count($_SESSION['panier']['id_produit']); 
$select['ref']=$count+1;

array_push($_SESSION['panier']['ref'],$select['ref']); 
array_push($_SESSION['panier']['id_produit'],$select['id_produit']); 
array_push($_SESSION['panier']['qte'],$select['qte']); 
array_push($_SESSION['panier']['taille'],$select['taille']); 
array_push($_SESSION['panier']['couleur'],$select['couleur']); 
array_push($_SESSION['panier']['prix'],$select['prix']); 
Je peux afficher sans problème mon caddie :
<table>
  <tr bgcolor="#400A00">
    <td height="25"><strong>Produit</strong></td>
    <td height="25"><strong>Taille</strong></td>
    <td height="25"><strong>Couleur</strong></td>
    <td height="25"><strong>Qt&eacute;</strong></td>
    <td height="25"><strong>P.U.</strong></td>
    <td height="25"><strong>Total</strong></td>
    <td align="center"><strong>Enlever</strong></td>
  </tr>
<?
if (isset($_SESSION['panier']))
{
	$total_final=0;
	
	reset($_SESSION['panier']);
	
	$count = count($_SESSION['panier']['id_produit']); 
	for($i=0;$i<$count;$i++) 
	{
		$ref = $_SESSION['panier']['ref'][$i];
		$id_produit = $_SESSION['panier']['id_produit'][$i];
		$qte = $_SESSION['panier']['qte'][$i];
		$taille = $_SESSION['panier']['taille'][$i];
		$couleur = $_SESSION['panier']['couleur'][$i];
		$prix = $_SESSION['panier']['prix'][$i];
		$total_ligne = $qte*$prix;
		
		if ($taille=="0")
		{ $taille = "UNIQUE"; }
		
		$req1=mysql_query("SELECT * FROM b_prod where id_produit=$id_produit");
		while ($row1=mysql_fetch_array($req1))
		{ $produit=$row1["produit"]; }
		
		echo '<tr>';
		echo '<td>'.$produit.'</td>';
		echo '<td>'.$taille.'</td>';
		echo '<td>'.$couleur.'</td>';
		echo '<td>'.$qte.'</td>';
		echo '<td>'.$prix.' €</td>';
		echo '<td>'.$total_ligne.' €</td>';
		echo '<td><a href="panier-supprimer.php?id='.$ref.'">Enlever</a></td>';
		echo '</tr>';
		
		$total_final=$total_final+$total_ligne;
	}

  echo '<tr>';
  echo ' <td colspan="4" align="right"></td><td><b>TOTAL</b></td>';
  echo '<td>'.$total_final.' €</td>';
  echo '</tr>';

}
else
{
	echo '<tr><td colspan="7" height="100" align="center"> - Votre panier est vide - </td></tr>';
}

?>
</table>
Mais maintenant, je suis embêté, car je ne sais pas comment supprimer un produit de mon caddie par exemple.

J'ai bien essayé de faire :
unset($_SESSION['panier']['ref'])
mais j'ai l'impression qu'il ne suprimer que la référence et pas les indications liées à la taille, couleur...

Bref, comment je fais pour supprimer "l'intégralité" de ma ligne dans mon tableau de session ?

Je sais, certains vont hurler, mais j'ai une contrainte de temps et je ne m'en sors pas.

Merci par avance !

Posté : 13 nov. 2006, 18:32
par Cyrano
Un tuto sur les paniers où tu vas trouver la réponse : ICI, regarde la partie "Supprimer un article"

Posté : 13 nov. 2006, 18:36
par Valawa
Merci, c'est ce que je cherchais.

Posté : 13 nov. 2006, 18:37
par Cyrano
Tu nous diras si on peut mettre le sujet [Résolu], comme invité tu ne peux pas le faire toi-même, tu devrais t'inscrire, ça coute rien et tu pourras le faire toi-même par la suite.

Posté : 13 nov. 2006, 18:38
par Ryle
C'est assez récurrent de voir cette façon de gérer un panier, je ne sais pas si ça vient d'un tuto particulier, mais selon moi c'est peu pratique risqué de séparer les données id, qté et autre dans des tableaux qui n'ont rien avoir en se basant uniquement sur l'ordre des données pour les ré-associer - on l'espère - correctement...

En gros, chacun de tes articles se trouve discéminé dans les différents tableau à la même position. Si tu veux en supprimer un, il te faut donc déterminer sa position (supposons le 3ème) et effacer dans chaque tableau l'élément qui correspond :
$i = 2; // position 3 en partant de 0

unset($_SESSION['panier']['ref'][$i]); 
unset($_SESSION['panier']['id_produit'][$i]); 
unset($_SESSION['panier']['qte'][$i]); 
...
Il serait à mon avis bien plus judicieux d'utiliser l'id_produit ou la référence comme index et de créer un tableau associatif pour chaque article distinct
$_SESSION['panier'][$idProduit] = array ($ref, $qte, ...);
Il suffirait alors pour mettre à jour ou supprimer un article de connaitre son id, et de ne faire qu'un unset() sur celui-ci


Edit : Groumpf... grillé (et bien) pour la réponse, mais je maintient que ce principe est loin d'être judicieux :)

Re: Supprimer variable dans une session

Posté : 13 nov. 2006, 18:44
par Hermès
Par rapport à ce tuto justement, pourquoi n'y a-t-il pas cette méthode toute simple du unset() ?

Edit : j'ai rien dit, c'est en fait la méthode utilisée par la technique de Ripat dans le tuto.

Posté : 13 nov. 2006, 19:23
par Cyrano
:mrgreen: