[PHP] pb de array pour un caddie virtuel

ok voici les pages
chez moi cela fonctionne parfaitement
le code est en brut j’ai pas trop eu le temps de tout optimiser (cookie1.php) :slight_smile:
a toi de modifier le script en fonction de tes besoins

page articles.php
[cpp]

<?php
//On recupere l’Id de chaque produit
$queryID=mysql_query(“select id, cat, ref, prix from galerie where Id=’”.$AfficheGalerie[‘id’]."’");
$InfoProd=mysql_fetch_array($queryID);
?>





Quantit&eacute; :


1
2
3
4
5
6
7
8
9



[/cpp]

page caddie1.php
[cpp]

<?php session_start(); if(isset($_GET['type'])){ $tmp = $_GET['type']; }else{ $tmp = ''; } switch ($tmp){ case "ajout" : //on parcours toute la sessions a la recherche de la ligne contenant l'id produit existant for ($i=0 ; $i < count($_SESSION['achats']) ; $i++) { if ($_SESSION['achats'][$i]['id'] == $_POST["id"] ) { array_splice($_SESSION['achats'], $i, 1); //suppresion du tableau contenant les ancienne valeur } } $_SESSION['achats'][] = array ("id" => $_POST['id'], "qte" => $_POST['quantite']); header('location:../index.php?MenuNumero=5&'.strip_tags(SID)); exit(); break; case "modif" : //on parcours toute la sessions a la recherche de la ligne contenant l'id produit existant for ($i=0 ; $i < count($_SESSION['achats']) ; $i++) { if ($_SESSION['achats'][$i]['id'] == $_GET["id"] ) { array_splice($_SESSION['achats'], $i, 1); //suppresion du tableau contenant les ancienne valeur } } //ajout des nouvelle qte pour l'id $_SESSION['achats'][] = array ("id" => $_GET['id'], "qte" => $_GET['quantite']); header('location:../index.php?MenuNumero=5&'.strip_tags(SID)); exit(); break; case "suppr" : //on parcours toute la sessions a la recherche de la ligne contenant l'id produit existant for ($i=0 ; $i < count($_SESSION['achats']) ; $i++) { if ($_SESSION['achats'][$i]['id'] == $_GET["id"] ) { array_splice($_SESSION['achats'], $i, 1); //suppresion du tableau contenant les ancienne valeur } } header('location:../index.php?MenuNumero=5&'.strip_tags(SID)); exit(); break; case "vider" : //exemple de vider le panier $_SESSION['achats'] = array(); header('location:../index.php?MenuNumero=5&'.strip_tags(SID)); exit(); break; default : header('location:../index.php') ; exit(); break; } ?>[/cpp]

page basket.php

[cpp]

<?php //on regarde si le panier est rempli if(count($_SESSION['achats'])==0){ echo '';

}else{
for ($i=0; $i < count($_SESSION[‘achats’]); $i++){
$id_produit = $_SESSION[‘achats’][$i][‘id’];
$qte = $_SESSION[‘achats’][$i][‘qte’];
//affichag de ton caddie :
//requete sql pour recueperer le reference par rapport a l’id
$res=mysql_query(“select id, cat, ref, prix from galerie where id=’”.$id_produit."’");
if($enr=mysql_fetch_array($res)){
$ref = $enr[“ref”];
$prix = $enr[“prix”];
}
//calcul du total
$total_art = $prix*$qte;
$total_panier += $total_art;
$total_art = number_format($total_art, 2, ‘.’, ’ ');

	//affichage du resultat
?>	
	<tr>
		<td width="100"><?php echo $ref; ?></td>
		<td width="100"><?php include("include/select.php");?></td>
		<td width="100"><?php echo $prix; ?></td>
		<td width="150"><?php echo $total_art; ?></td>
		<td width="50"><a href="include/caddie1.php?type=suppr&amp;amp;id=<?php echo $id_produit;?>&amp;amp;<?php echo strip_tags(SID);?>">suppr[/url]</td>
	</tr>
<?php
}
	$total_panier = number_format($total_panier, 2, '.', ' ');
?>
	</tr>
		<td colspan="5">&amp;nbsp;</td>
	</tr>	
	<tr>
		<td colspan="3">Total panier :</td>
		<td width="150"><?php echo $total_panier;?></td>
		<td width="50">&amp;nbsp;</td>
</tr>
<?php } ?>
R&eacute;f&eacute;rence quantité prix unitaire total Suppr
&nbsp;
Votre panier est vide

[/cpp]

page select.php

[cpp]

<?php //creation du selecteur //creation du select $liste = ''; $liste .=''; $liste .=''.$qte.''; for ($k = 1 ; $k < 10 ; $k++ ){ // dans ton cas je met 9 a la qte max $liste .= ''.$k.'';//j'appelle la page caddie pour le traitement de la session apres a toi d'adapter a ton code } $liste .=''; $liste .=''; echo $liste; ?>

[/cpp]

edit : j’ai change la page caddie1.php car elle contenait une erreur de calcul pour la modif

j’ai mis le code caddie detaille au maximum pour que tu puisse comprendre le cheminement et le fonctionnement dans cette methode
on peut encore optimiser plus la page cookie1.php
j’ai un site qui tourne avec cette methode et un autre avec une classe caddie plus complete (la page caddie.php ne prend que 3 lignes pour l’ajout/suppr/modif/vider)
quand tu modif une qte deja enregistre,on supprime de la session le tableau enregistre pour le remplace par un nouveau contenant les nouvelle valeurs
tu peut directement modifier les valeur du tableau sans passer par array_splice et recree un nouveau tableau c’est une autre solution envisagable
car cette methode presente un inconvenient : lors d’une maj de quantité, dans le panier l’ordre d’affichage peut changer avant et apres la modification d’une reference
c’est pas genant en soit bien sur :slight_smile:

mais dans tous les cas avec cette methode tu est oblige de passer par la boucle for pour trouve l’id a changer

mais cette methode fonctionne parfaitement bien :wink:

je regarde ca ce soir et test ca.
Je te remercie encore bc p pour ton aide :jap:
je te tines au courant :d

ok :slight_smile:

pour vider ton panier voici un lien d’exemple :

vider le panier[/url]

re :d
bon je teste actuellement ton code :wink:
Ya kkes erreurs de frappe a mon avis mais surtt un truc incomprehensible :??:
j’ai cette erruer :
[cpp]Notice: Undefined variable: total_panier in c:\program files\easyphp1-7\www\include\basket.php on line 41
[/cpp]
le pb c’est que $total_panier est declaré :??:

oui et non
php5 est chiant avec ces notice
tu as le error reporting avec les notice (j’ai du virer ce report d’erreur (notice) tellemnt j’en avait et j’ai pas le courage de rescripter tous mes sites actuellement ni le temps) c’est pour cela que je l’ai pas vu
pour palier cela :
initialise la variable $total_panier à vide des le depart (avant la boucle)

oui je t’ai retouche le code assez vite
j’ai test sur ma machine mais j’ai pas fait de mise en place ou autres :d
siinon je te conseille de virer easyphp pour installer amp separement :slight_smile:

http://forum.clubic.com/forum2.php?config=clubic.inc&post=16374&cat=13&cache=cache&sondage=0&owntopic=0&p=1&trash=0&subcat=

je suis sous php 4 moi :d et oui en fait j’avais coorigé ca en l’initialisant avant ;).
Sinon le principe fonctionne bien, reste a essayer de trouver comment eviter ds le panier que le changement de quantite boulverse l’ordre d’affichage :d

ben perso jamais eu un seul pb avec easyPHP [:______]

oui c’est un inconvenient ca change l’ordre d’affichage lors des maj des quantite
tu peut ameliorer le code en modifiant le array directement et non pas en le supprimant comme j’ai fait la
au lieu de array_splice suffit de trouver la bonne fonction qui permette de changer juste la valeur de qte
ou alors tu fait un tri dans la session lors de l’affichage
deja tu voit le principe apres reste a l’ameliore bien sur

je te remercie encore je vais essayer certaines idées :d
je reviendrais ds ce meme post en cas de grosse MAJ ou d’eventuelles questions :d

Au moins ca fera un mini “tuto” pour les caddies car ils se font tres rares ceux la :slight_smile:

oui
comme je t’ai dit c’est une base de caddie avec les sessions
apres il faut l’ameliorer suivant ces besoins
apres pour une grosse boutique il vaut mieux passer par une classe plus efficace bien sur mais plus complexe :=)
bon scriptage :slight_smile:

:jap: