dldstyle Posté 1 Août 2006 Posté 1 Août 2006 (modifié) Salut à tous, j'ai un souci avec la suppression de ligne dans un caddie PHP. Je croyais que la fonction suppresion fonctionnait bien mais il y a un bug ! <?php elseif (($_GET['action'] == "del")) // on supprime le produit { foreach($_SESSION['panier'] as $key => $array) { if ($array['prod'] == $_GET['id']) { unset($_SESSION['panier'][$key]); $message = " effacé !! "; } } } ?> Mon problème vient quant on veur supprimer un objet qui n'est pas le dernier listé dans le caddie. SI c'est le dernier, nikel, sinon il n'affiche que les premiers jusqu'à celui qui est supprimé. J'ai lu un excellent conseil sur un forum et j'ai placé ce code à la fin de mon tableau de caddie : <? echo "<p>" .print_r($_SESSION)."</p>"; ?> Panier de 3 produits avant la suppression : Array ( [panier] => Array ( [0] => Array ( [prod] => SFN003 [qte] => 1 ) [1] => Array ( [prod] => SHN001 [qte] => 1 ) [2] => Array ( [prod] => DHN001 [qte] => 2 ) ) ) Panier après la suppression du 2eme : Array ( [panier] => Array ( [0] => Array ( [prod] => SFN003 [qte] => 1 ) [2] => Array ( [prod] => DHN001 [qte] => 2 ) ) ) Vous voyez le pb ? En fait cela me supprime bien la ligne mais cela semble ne pas apprécier que l'on passe d'une ligne array[0] à array[2] Merci pour votre coup de main Modifié 1 Août 2006 par Portekoi
PhpTech Posté 1 Août 2006 Posté 1 Août 2006 (modifié) Bonjour, si j'ai bien compris ton probleme, ton tableau "saute" à cause des champs supprimés. La plus simple des solutions serait de réécrire le tableau en n'ajoutant pas la clé à supprimer ($_GET['id']) et de réassigner ce tableau à $_SESSION['panier']; Edit: Oups, j'avais oublié le code : Avant: <?php... ... (ton code) ... ...elseif (($_GET['action'] == "del")) // on supprime le produit{foreach($_SESSION['panier'] as $key => $array){if ($array['prod'] == $_GET['id']){unset($_SESSION['panier'][$key]);$message = " effacé !! ";}}}?> Aprés: <?php ... ... (ton code) ... ... elseIf ($_GET['action'] == 'del' && isset($_GET['id'])) { $newArray = array(); foreach ($_SESSION['panier'] as $key => $value) { if ($value['prod'] != $_GET['id']) { $newArray[$key] = $value; } $_SESSION['panier'] = $newArray; } }?> Tiens moi au courant, et bon courage Modifié 1 Août 2006 par PhpTech
dldstyle Posté 4 Août 2006 Auteur Posté 4 Août 2006 Salut PHPtech, en fait j'ai retravaillé ma fonction d'affichage des produits et ça focntionne super : <?php foreach($_SESSION['panier'] as $key => $array) { $idref = $array['prod']; $qte = $array['qte']; // echo "<tr>\n" ."<td>" .$idref. "</td>\n" //ref ."<td>" .sprintf("%01.2f",$pdt[$idref]). "</td>\n" // prix ."<td>\n<select name='qte-" .$idref. "' size='1'>"; for ($j=1; $j < 11; $j++) { echo "<option value='" .$j. "'"; echo ($j == $qte) ? " selected='selected'" : ""; echo ">" .$j. "</option>\n"; } echo "</select></td>\n" // qte ."<td>" .sprintf("%01.2f",$qte * $pdt[$idref]). "</td>\n" // total article ."<td><a href='panier2.php?action=del&id=" .$idref. "'>supprimer</a>"; // supp $total += $qte * $pdt[$idref]; // calcul du total echo "<input name='id' type='hidden' value='" .$idref. "' /></td>\n"; // on place un champ caché pour le recalcul // } ?> Colorez votre code PHP sur les forums grâce à Developpez.com Merci de ton aide quand même !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant