Bonjour,
Je travaille sur la mise en place d'un panier pour un site d'e-commerce et j'ai un problème avec un formulaire (form = post) lorsque j'actualise la page du panier.
J'ai un premier script avec le formulaire permettant de saisir l'article à commander et la quantité dans une liste déroulante.
J'ai simplifié le script mais en gros ça donne ça:
<form method='post' action='panier.php' target='_top'>
<input name='code_prod' type='hidden' value='$ligne_produit->code_prod'>
<select name='quantite'>";
for ($k=1;$k<100;$k++)
{ echo "<option value=$k>$k</option>";}
echo "</select>
<input name='ajout' type='submit' value='Ajouter au panier'>
</form>
Ensuite, dans le script panier.php, on récupère le code du produit et les quantités. Si le produit existe déjà dans le panier, on ajoute les quantités postées aux quantités du produit déjà existantes sinon on ajoute le code du produit et les quantités.
Le problème vient du fait qu'en actualisant la page internet, cela ajoute systématiquement les quantités postées dans le dernier formulaire.
Par exemple, je commande 10 produits A
Je suis redirigé vers la page panier.php où je peux voir un récapitulatif avec "produit A : 10"
Si j'actualise la page, la méthode post ajoute à nouveau 10 produits, ce qui donne "produit A : 20" et ceci indéfiniment à chaque actualisation.
Voila un court passage du script panier.php
if (isset($_POST['code_prod']))
{
$existe=0;
$size=count($liste_code_produit);
for ($k=0;$k<$size;$k++)
{
$id = $liste_code_produit[$k];
if ($id==$_POST['code_prod'])
{
$qte=$liste_quantite[$k]+$_POST['quantite'];
$liste_quantite[$k] = $qte;
$k=$size;
$existe=1;
}
}
//si le produit n'est pas présent dans le panier
if ($existe==0)
{
$liste_code_produit[] = $_POST['code_prod'];
$liste_quantite[] = $_POST['quantite'];
}
//Actualisation des données dans la session
$_SESSION['liste_code_produit'] = $liste_code_produit;
$_SESSION['liste_quantite'] = $liste_quantite;
$quantite_totale = $quantite_totale + $_POST['quantite'];
$_SESSION['nombre_article'] = $quantite_totale;
}
Si quelqu'un sait comment éviter ce bug, merci beaucoup
Configuration: Windows Vista
Internet Explorer 7.0