Retirer produit panier

Eléphanteau du PHP | 10 Messages

21 mars 2012, 18:04

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
 

?>


Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 mars 2012, 18:57

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);

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 10 Messages

21 mars 2012, 19:08

Je ne vois vraiment pas où mettre le unset ni comment vérifier l'existence du produit Peux-tu m'aider ?

ViPHP
ViPHP | 2577 Messages

21 mars 2012, 21:48

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

Eléphanteau du PHP | 10 Messages

21 mars 2012, 23:40

Justement je ne sais pas où placer ce unset ^^

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 mars 2012, 23:53

Pour le test empty

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

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 10 Messages

22 mars 2012, 15:39

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]);

}
?>

Eléphant du PHP | 250 Messages

22 mars 2012, 17:02

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
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

ViPHP
AB
ViPHP | 5818 Messages

22 mars 2012, 17:46

<?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.

Eléphant du PHP | 250 Messages

22 mars 2012, 17:52

ooooooooooups. :mrgreen: désolé et effectivement
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Eléphanteau du PHP | 10 Messages

22 mars 2012, 18:44

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]);


?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 mars 2012, 18:54

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 ....


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 10 Messages

22 mars 2012, 18:58

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]);


?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 mars 2012, 19:03

Ton dernier vide est "bon".

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

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 10 Messages

22 mars 2012, 19:06

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