Version complète: sur le forum Webmaster Hub : Pb de suppression dans caddie
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
dldstyle
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.gif

CITATION
<?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 :

CITATION
<? echo "<p>" .print_r($_SESSION)."</p>"; ?>


Panier de 3 produits avant la suppression :
CODE
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 :
CITATION
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.gif

Merci pour votre coup de main
PhpTech
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:
CODE
<?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:
CODE
<?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 smile.gif
dldstyle
Salut PHPtech,

en fait j'ai retravaillé ma fonction d'affichage des produits et ça focntionne super :

CITATION
<?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 !
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.