Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/11/2010, 22h43   #1
Membre à l'essai
 
Inscription : mars 2009
Messages : 170
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 170
Points : 20
Points : 20
Par défaut Impossible d'afficher le contenu de mon panier et supprimer des éléme

Bonjour,

je commence le "panier" via les SESSIONS.

J'ai fais pour commencer un exemple assez simple. J'arrive à ajouter des éléments, à vider l'entièreté de mon panier. Par contre j'ai un problème pour afficher le contenu. Il m'affiche "Array" au lieu de l'intitulé de chaque produits. J'ai également un problème qui est sans doute lié à cela c'est que je n'arrive pas à supprimer un élément.

Voici mon code, si quelqu'un à une idée.

D'avance merci

Mes fonctions

Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 
<?php
/* ------------------------ */
/* Déclaration de Fonctions */
/* 		  Pour panier		*/
/* ------------------------ */
 
/* => Fonction ajout d'un produit <= */
function ajout($produit)
	{
	$new_prod['produit']=$_GET['pro_nom'];
		$new_prix['prix']=$_GET['prix'];
		echo '<p>Produit <u>'.$new_prod['produit'].'</u> a été ajouté</p>';
		array_push($_SESSION['panier']['produit'],$new_prod);
		array_push($_SESSION['panier']['prix'],$new_prix);
	}
 
/* => Vider le panier <= */
function vider()
	{
	echo '<p>Le panier est vidé</p>';
		unset($_SESSION['panier']);
	}
 
 
/* => Calcul contenu du panier <= */
function total_panier()
	{
	 if(!empty($_SESSION['panier']['produit']))
	 {
		$panier=count($_SESSION['panier']['produit']);
		return $panier;
	 }
	 else
	 {
	 $panier=0;
	 return $panier;
	 }
	}
 
 
/* => Affichage du panier <= */
function affiche_panier()
	{
	echo '<table id="tableau" border="1" width="500px" height="300px">';
        echo '<thead>';
           echo '<tr>';
               echo '<th scope="col" id="">Produits</th>';
               echo '<th scope="col" id="">Prix</th>';
               echo '<th scope="col" id="">Choix</th>';
            echo '</tr>';
       echo '</thead>';
        echo '<tbody>';
$panier=count($_SESSION['panier']['produit']);
for ($i=0; $i<$panier; $i++)
	{
 	 		echo '<tr>';
 
                echo '<td>'.$_SESSION['panier']['produit'][$i].'</td>';
                echo '<td>'.$_SESSION['panier']['prix'][$i].'</td>';
                echo '<td><a href="'.$_SERVER['PHP_SELF'].'?choix=supprimer&amp;produit='.$_SESSION['panier']['produit'][$i].'">Supprimer cet article</a></td>';
            echo '</tr>';
	}
        echo '</tbody>';
  echo '</table>';	
 
	}	
?>

Ma page ou je vois mes produits et ou je peux en ajouter ou vider mon panier.

Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
 
<?php
 
session_start(); 
 
/*On vérifie si le panier existe*/
if(!isset($_SESSION['panier']))
	{
	/* Initialisation du panier */ 
	$_SESSION['panier'] 			= array();
 
	/*Subdivision du panier*/
	$_SESSION['panier']['produit']	= array();
	$_SESSION['panier']['prix']		= array();
	}
 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
    <title>Document sans nom</title>
</head>
 
<body>
    <p>Liste de nos produits</p>
<?php
 
include('connex.inc.php');
        $idcom=connex('panierdim', 'myparam');
        mysql_query("SET NAMES utf8"); /*TRES IMPORTANT -> permet d'éviter les problèmes d'affichage d'accents*/
include('function.inc.php');
?>
 
<?php
/* En Cas d'ajout d'article */
/* ------------------------ */
 
	if (isset($_GET['pro_nom']))
		{
		$produit=$_GET['pro_nom'];
		ajout($produit);
		}
 
/*     Vider le panier      */
/* ------------------------ */
 
	if (isset($_GET['choix'])=="vider")
		{
		vider();
		}		
?>
<?php
echo '<p>Votre panier contient actuellement '.total_panier().' articles</p>';
$panier=total_panier();
/* Requete à la base */
$request_products=mysql_query("SELECT pro.pro_id, pro.pro_nom, pro.prix
							   FROM t_produits_pro pro ORDER BY pro.pro_nom ASC") or die ("Sélection de la base impossible");
 
/* Tableau de produits + prix */							   
   echo '<table id="tableau" border="1" width="500px" height="300px">';
        echo '<thead>';
           echo '<tr>';
               echo '<th scope="col" id="">Produits</th>';
               echo '<th scope="col" id="">Prix</th>';
               echo '<th scope="col" id="">Choix</th>';
            echo '</tr>';
       echo '</thead>';
        echo '<tbody>';
	while ($donnees_products=mysql_fetch_array($request_products))
		{
	 		echo '<tr>';
                echo '<td>'.$donnees_products['pro_nom'].'</td>';
                echo '<td>'.$donnees_products['prix'].'</td>';
                echo '<td><a href="'.$_SERVER['PHP_SELF'].'?pro_nom='.$donnees_products['pro_nom'].'&amp;prix='.$donnees_products['prix'].'" id="ajout" ">Ajouter au panier</a></td>';
            echo '</tr>';
		}
?>
              </tbody>
    	</table>
<!--FIN DE TABLEAU-->
<p><a href="<?php echo $_SERVER['PHP_SELF']; ?>?choix=vider">Vider mon panier</a></p>
<!--  <p><a href="index.php?choix=vider">Vider mon panier</a></p>    -->
 
 <p><a href="panier.php">Terminer mes achats et consulter mon panier</a></p>   
<?php
if(!empty($_SESSION['panier']) AND $panier!=0)
	{echo '<pre>'; var_dump($_SESSION['panier']); echo '</pre>';
	echo '<br/>';
	print_r($_SESSION['panier']);
	}
?>
 
</body>
</html>

Et enfin ma page panier qui devrait afficher l'intitulé de chacun des produits mis dans le panier. Le nombre d'éléments est lui bon.
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 
 
<?php
session_start(); 
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Document sans nom</title>
</head>
 
<body>
 
<?php
include('function.inc.php');
 
if(!empty($_SESSION['panier']['produit']))
	{
	$panier=count($_SESSION['panier']['produit']);
	var_dump($_SESSION['panier']['produit']);
	}
	else
	{
	$panier='0';
	}
echo '<p>Contenu de votre commande : ' .$panier.' articles </p>';
/* affiche_panier(); */
echo '<table id="tableau" border="1" width="500px" height="300px">';
        echo '<thead>';
           echo '<tr>';
               echo '<th scope="col" id="">Produits</th>';
               echo '<th scope="col" id="">Prix</th>';
               echo '<th scope="col" id="">Choix</th>';
 
            echo '</tr>';
       echo '</thead>';
        echo '<tbody>';
 
for ($i=0; $i<$panier; $i++)
	{
 	 		echo '<tr>';
 	 			$produit=$_SESSION['panier']['produit'][$i];
 	 			$prix=$_SESSION['panier']['prix'][$i];
                echo '<td>'.$_SESSION['panier']['produit'][$i].'</td>';
                echo '<td>'.$_SESSION['panier']['prix'][$i].'</td>';
                echo '<td><a href="'.$_SERVER['PHP_SELF'].'?choix=supprimer&amp;produit='.$_SESSION['panier']['produit'].'">Supprimer cet article</a></td>';
            echo '</tr>';
	}
        echo '</tbody>';
  echo '</table>';	
 
/* ------------------------------- */	
/* En Cas de suppression d'article */
/* ------------------------------- */	
if (isset($_GET['choix'])=="supprimer")
	{
	$suppression=false;
	$suppr_produit=$_GET['produit'];
	echo '<p>Le produit '.$suppr_produit.' a été supprimé</p>';
 
	/* Stock contenu du panier sans celui à supprimer */
	$panier_tmp=array("produit"=>array(), "prix"=>array());
 
	/* Comptage des articles du panier */
	$nb_produits=count($_SESSION['panier']['produit']);
	for($i=0; $i<$nb_produits; $i++)
		{
		if($_SESSION['panier']['produit'][$i]!=$suppr_produit)
			{
			array_push( $panier_tmp['produit'], $_SESSION['panier']['produit'][$i]);
			array_push( $panier_tmp['prix'], $_SESSION['panier']['prix'][$i]);
			}
		}
	/* Le transfert est terminé on réinitialise le panier */
	$_SESSION['panier']=$panier_tmp;
	/* Suppression du panier temporaire */
	unset($panier_tmp);
	$suppression=true;
	return $suppression;
	echo '<p><a href="index.php">Continuer mes achats</a></p>';
	}	
echo '<p><a href="index.php">Continuer mes achats</a></p>';
?>
 
</body>
</html>
paintbox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 09h23   #2
Membre régulier
 
Inscription : octobre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : octobre 2010
Messages : 101
Points : 71
Points : 71
pour moi ton problème vient de la :

Code :
1
2
3
4
5
6
7
8
function ajout($produit)
{
        $new_prod['produit']=$_GET['pro_nom'];
	$new_prix['prix']=$_GET['prix'];
	echo '<p>Produit <u>'.$new_prod['produit'].'</u> a été ajouté</p>';
	array_push($_SESSION['panier']['produit'],$new_prod);
	array_push($_SESSION['panier']['prix'],$new_prix);
}
deja tu passe $produit en paramètre et tu ne t'en sers pas ... et ensuite tu ajoute dans ta session $new_prod[] qui est un tableau ( d'ou ton souci ).

essaye déjà de faire ça :

Code :
1
2
3
4
5
6
7
8
function ajout($nom_produit,$prix)
{
        $new_prod = $nom_produit;
	$new_prix = $prix;
	echo '<p>Produit <u>'.$new_prod.'</u> a été ajouté</p>';
	array_push($_SESSION['panier']['produit'],$new_prod);
	array_push($_SESSION['panier']['prix'],$new_prix);
}
après peut être que le array_push() pose également un problème mais essaye déjà et redit moi.
proxichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 09h36   #3
Membre à l'essai
 
Inscription : mars 2009
Messages : 170
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 170
Points : 20
Points : 20
Hello proxichou,

merci pour ta réponse. Oui effectivement c'était cela mon erreur.

L'affichage est à présent correcte.

Par contre la suppression ne se fait toujours pas. Serait-ce le même problème?
paintbox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 09h45   #4
Membre régulier
 
Inscription : octobre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : octobre 2010
Messages : 101
Points : 71
Points : 71
Code :
echo '<td><a href="'.$_SERVER['PHP_SELF'].'?choix=supprimer&amp;produit='.$_SESSION['panier']['produit'].'">Supprimer cet article</a></td>';
tu ne passes pas le bon produit dans ta variable 'produit' dans l'url :

Code :
echo '<td><a href="'.$_SERVER['PHP_SELF'].'?choix=supprimer&amp;produit='.$produit.'">Supprimer cet article</a></td>';
dis moi si c'est bon.
proxichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 09h52   #5
Membre à l'essai
 
Inscription : mars 2009
Messages : 170
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 170
Points : 20
Points : 20
Cela fonctionne effectivement, mais sur me page panier, j'affiche le contenu de mon panier et lorsque je supprime un élément le tableau ne se met pas directement à jour alors que la page est sensée se rafraîchir?
paintbox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 10h18   #6
Membre régulier
 
Inscription : octobre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : octobre 2010
Messages : 101
Points : 71
Points : 71
comme tu l'as fais, il n'y a pas de rafraichissement ... ou du moins je ne le vois pas.

a quoi te sert ton:

Code :
1
2
3
$suppression = false;
$suppression = true;
return $suppression;
?

je ne comprend pas ce que tu veux faire avec cela, tu n'es pas dans une fonction donc le 'return' me semble bizarre.
proxichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 10h20   #7
Membre régulier
 
Inscription : octobre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : octobre 2010
Messages : 101
Points : 71
Points : 71
quand tu fais un 'F5' sur ta page ou tu affiches le contenu du panier, le produit a t-il bien été supprimé ?
proxichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 10h21   #8
Membre à l'essai
 
Inscription : mars 2009
Messages : 170
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 170
Points : 20
Points : 20
Oui effectivement le return ne sert à rien. Je me suis en fait basé sur un tuto qui comprenait des fonctions.

Comment puis-je mettre à jour automatiquement mon tableau ?
paintbox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 10h33   #9
Membre régulier
 
Inscription : octobre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : octobre 2010
Messages : 101
Points : 71
Points : 71
quand tu rafraichis ta page, la suppression a bien été faites ou pas ? si oui c'est que ton tableau est bien a jour, dans ce cas il suffit de faire un refresh sur ta page ( je te dirais comment faire ). si non, c'est que ton code n'est pas bon et que ta suppression ne se fait pas.
proxichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 10h43   #10
Membre à l'essai
 
Inscription : mars 2009
Messages : 170
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 170
Points : 20
Points : 20
La suppression se fait bien mais avec un enregistrement de retard càd que lorsque je clique sur supprimer, j'ai bien le message "produit supprimé" mais mon compteur et mon tableau ne se refraichissent que lors du clique suivant.
Donc un clique de retard à chaque fois
paintbox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 11h01   #11
Membre régulier
 
Inscription : octobre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : octobre 2010
Messages : 101
Points : 71
Points : 71
c'est normal puisque tu ne rafraichis pas ta page après la suppression, donc au clic suivant -> tu appels une autre pages donc rafraichissement donc tu ne vois qu'a ce moment les modifications précédentes.

remplace ton code:

Code :
1
2
3
4
5
/* Suppression du panier temporaire */
unset($panier_tmp);
$suppression=true;
return $suppression;
echo '<p><a href="index.php">Continuer mes achats</a></p>';
par celui la:

Code :
1
2
3
/* Suppression du panier temporaire */
unset($panier_tmp);
<meta http-equiv="refresh" content="2;URL=<?php echo $_SERVER['PHP_SELF'] ?>">
la balise <meta> va rafraichir ta page avec un délai de 2 avec comme url de retour $_SERVER['PHP_SELF'], a toi de modifier l'url si celle-ci ne te convient pas.
proxichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 11h11   #12
Membre à l'essai
 
Inscription : mars 2009
Messages : 170
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 170
Points : 20
Points : 20
Cela fonction effectivement mais ma page se recharge en boucle. IL n'y a pas une autre solution pour que mon tableau soir à jour sans recharger la page en boucle?
paintbox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 11h43   #13
Membre régulier
 
Inscription : octobre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : octobre 2010
Messages : 101
Points : 71
Points : 71
tu as bien mis le refresh dans:

Code :
1
2
3
4
5
6
7
if (isset($_GET['choix'])=="supprimer")
{
 .....
 /* Suppression du panier temporaire */
unset($panier_tmp);
<meta http-equiv="refresh" content="2;URL=<?php echo $_SERVER['PHP_SELF'] ?>">
}
?

il faut bien le mettre dans ta condition sinon en effet il va se recharger a chaque fois.

si tu l'as bien fait c'est qu'il doit y avoir "?choix=supprimer" dans l'url.

dans ce cas a toi de modifier le $_SERVER['PHP_SELF'] pour ne plus avoir "?choix=supprimer" dans l'url de rechargement.
proxichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 12h19   #14
Membre à l'essai
 
Inscription : mars 2009
Messages : 170
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 170
Points : 20
Points : 20
Effectivement je l'avais mal placé. Cela fonctionne à présent.
Par contre j'ai une autre question. Si je quitte ma page et que j'en réouvre une nouvelle, il a conservé le contenu de mon panier malgré tout. Comment puis-je faire pour qu'une fois qu'on quitte la page (fermer) le contenu se vide?
paintbox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 14h25   #15
Membre régulier
 
Inscription : octobre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : octobre 2010
Messages : 101
Points : 71
Points : 71
il faut vider les sessions.

essaye de mettre cela au tout début de ta page avant session_start()

Code :
1
2
3
 
session_cache_expire();
session_start();
proxichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 14h42   #16
Membre à l'essai
 
Inscription : mars 2009
Messages : 170
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 170
Points : 20
Points : 20
Ca ne marche pas j'ai ceci en message d'erreur "Notice : A session had already been started - ignoring session_start() "
paintbox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 15h03   #17
Membre régulier
 
Inscription : octobre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : octobre 2010
Messages : 101
Points : 71
Points : 71
ah oui autant pour moi, inverse l'ordre des fonction ^^

Code :
1
2
session_start();
session_cache_expire();
proxichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 15h09   #18
Membre à l'essai
 
Inscription : mars 2009
Messages : 170
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 170
Points : 20
Points : 20
Cela ne change rien, il conserve les produits de la session précédente.
paintbox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 15h17   #19
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
Bonjour,

pour supprimer la session, peut être faire un

Code :
unset($_SESSION['panier']);
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 15h21   #20
Membre à l'essai
 
Inscription : mars 2009
Messages : 170
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 170
Points : 20
Points : 20
Bonjour syl2095,

ou dois-je placer le unset?
paintbox est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h13.


 
 
 
 
Partenaires

Hébergement Web