Aller au contenu

Pb de suppression dans caddie


dldstyle

Sujets conseillés

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 ! :mad2:

<?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] :unsure:

Merci pour votre coup de main

Modifié par Portekoi
Lien vers le commentaire
Partager sur d’autres sites

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é par PhpTech
Lien vers le commentaire
Partager sur d’autres sites

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 !

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...