Page 1 sur 2

Retirer produit panier

Posté : 21 mars 2012, 18:04
par wii!!
Bonjour, je suis en train de programmer un panier en PHP mais j'ai un problème. A côté de chaque produit, il y a un bouton 'supprimer' mais dès que je clique sur ce bouton, ça me supprime tous les produits et pas un seul.


Voici mon code affichage_panier.php:
<?php 
session_start();

include ('header2.php');

include ('connexion.php');


echo ' <table>  
          <tr>
		     <td>Nom du Produit</td><td>Prix unitaire</td><td>Quantite</td><td>Prix Total</td>
	      </tr>';



foreach ($_SESSION['caddie'] as $idProduit => $quantite) {

$rq="SELECT * FROM magazine WHERE ref_produit='".$idProduit."'";

$res=mysql_query($rq)or die("erreur dans la requete" );

$ligne=mysql_fetch_array($res);

$nom=$ligne['titre'];

$prix_unitaire=$ligne['prix'];

$prix_total=$prix_unitaire*$quantite;

$caddie += $prix_total;
$ref = $ligne["ref_produit"];


echo '   <tr>
		   <td>'.$nom.'</td>
		   <td>'.$prix_unitaire.'</td>
		   <td>'.$quantite.'</td>
		   <td>'.$prix_total.'</td>
		   <td><a href="retrait_caddie.php?retrait='.$ref.'"><img src="http://d2.e-loader.net/UqCtB5kKzI.gif" /></a></td>
         </tr>';
	   



}

echo'   <tr>
		   <td>total commande = '.$caddie.'  </td>
        </tr>
	</table>';	
			
		

?>

ET MON CODE retrait_caddie.php:
<?php
session_start();                          //demarrage de la session
 

$ref = $_GET['retrait'];                //reference du produit a retirer
 

$array = $_SESSION['caddie']; //attribue le tableau a $array
 

$key = array_search($ref, $array); //recherche la raference et attribue son rang dans le tableau a $key
 

array_splice($_SESSION['caddie'], $key, 1); //fonction PHP qui retire l'element situe au rang enregistre dans $key
 

?>


Re: Retirer produit panier

Posté : 21 mars 2012, 18:57
par moogli
Salut,

Tu te prend la tête pour une utilisé unset
<?php
unset($_SESSION[$_GET['ref']]);
?>
Bon faut ajouter la vérification de l'existence du produit dans le panier ;)

Pour ce qui est de ta requête d'affichage je t'invite à utiliser la clause in de SQL et la fonction impose de php (après une array_keys pour récupérer les références.
select truc, machin from table where ref in(1, 432, 876, etc etc);

@+

Re: Retirer produit panier

Posté : 21 mars 2012, 19:08
par wii!!
Je ne vois vraiment pas où mettre le unset ni comment vérifier l'existence du produit Peux-tu m'aider ?

Re: Retirer produit panier

Posté : 21 mars 2012, 21:48
par Mazarini
D'après la doc php :
Notez que les clés numériques de input ne sont pas préservées.
Tu perds donc tes identifiants produits.

Il faudrait faire unset($_session['caddie'][$ref]);
Comme indiqué par Moogli pour supprimer $ref du caddie

Re: Retirer produit panier

Posté : 21 mars 2012, 23:40
par wii!!
Justement je ne sais pas où placer ce unset ^^

Re: Retirer produit panier

Posté : 21 mars 2012, 23:53
par moogli
Pour le test empty

pour le unset ben à la place de tout le reste dans le fichier mentionné dans ton 1er post :mrgreen:

@+

Re: Retirer produit panier

Posté : 22 mars 2012, 15:39
par wii!!
Voilà ce que j'ai mis mais on m'affiche 'erreur'. J'ai aussi essayé sans les accolades du unset mais c'est la même chose

<?php
session_start()
if(empty($_SESSION['$ref']))
  {
   echo 'erreur';
   }

else   
{

unset($_session['caddie'][$ref]);

}
?>

Re: Retirer produit panier

Posté : 22 mars 2012, 17:02
par Boro64
Bonjour
Ne serait ce pas plutôt:
<?php if(!empty($_SESSION['caddie']['$ref']))?>



Si non, je ne saurais trop te conseiller l'excellent tuto de Cyrano

Re: Retirer produit panier

Posté : 22 mars 2012, 17:46
par AB
<?php if(!empty($_SESSION['caddie']['$ref']))?>
Si tu veux que la variable $ref soit interprétée il faut faire $_SESSION['caddie']["$ref"] ou $_SESSION['caddie'][$ref]. Avec des simples quotes $ref n'est pas interprétée.

Re: Retirer produit panier

Posté : 22 mars 2012, 17:52
par Boro64
ooooooooooups. :mrgreen: désolé et effectivement

Re: Retirer produit panier

Posté : 22 mars 2012, 18:44
par wii!!
Avec ça, on m'affiche toujours 'erreur'. :?
<?php

session_start();

include ('connexion.php');


if(!empty($_SESSION['caddie'][$ref]))
  {
   echo 'erreur';
   }

else   


unset($_session['caddie'][$ref]);


?>

Re: Retirer produit panier

Posté : 22 mars 2012, 18:54
par moogli
Tu n'a pas compris le fonctionnement de la fonction empty. Regarde bien la doc les mots sont importants.

Cette fonction retourne Vrai quand la variable n'existe pas ou est considérées vide (null, false, zéro etc).
Toi tu y ajoute l'opérateur ! qui indique la négation.

Ton code affiche donc erreur lorsque $_SESSION['caddie'][$ref] existe ....


@+

Re: Retirer produit panier

Posté : 22 mars 2012, 18:58
par wii!!
Tu n'a pas compris le fonctionnement de la fonction empty. Regarde bien la doc les mots sont importants.

Cette fonction retourne Vrai quand la variable n'existe pas ou est considérées vide (null, false, zéro etc).
Toi tu y ajoute l'opérateur ! qui indique la négation.

Ton code affiche donc erreur lorsque $_SESSION['caddie'][$ref] existe ....


@+
Même sans le '!' ça ne marche pas, je ne trouve pas l'erreur :
<?php

session_start();

include ('connexion_clem.php');


if(empty($_SESSION['caddie'][$ref]))
  {
   echo 'erreur';
   }

else   


unset($_session['caddie'][$ref]);


?>

Re: Retirer produit panier

Posté : 22 mars 2012, 19:03
par moogli
Ton dernier vide est "bon".

Ajouté un var_dump($_SESSION); après le session_start() pour voir ce qu'il y a en session.

@+

Re: Retirer produit panier

Posté : 22 mars 2012, 19:06
par wii!!
Ton dernier vide est "bon".

Ajouté un var_dump($_SESSION); après le session_start() pour voir ce qu'il y a en session.

@+
On m'affiche ça:

array(1) { ["caddie"]=> array(3) { [3]=> int(6) [5]=> int(3) [4]=> int(1) } } erreur