[php] variable s'incrémentant plusieurs fois [Fermé]

Signaler
Messages postés
9
Date d'inscription
mardi 1 avril 2008
Statut
Membre
Dernière intervention
14 novembre 2014
-
guimton
Messages postés
89
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
10 avril 2008
-
Bonjour,

J'ai un problème concernant une ébauche de boutique en ligne.
En fait, dans mon code produits.php (ci dessous), quand je clique sur Ajouter, la variable $qte (quantité) s'incrémente bien mais sur les 3 produits que ma base de données renvoie et non sur un seul d'entre eux.
J'ai essayé des tonnes d'astuces pour résoudre ce problème mais je n'y arrive pas.

Merci d'avance de votre aide.


<?php
include("get_infos.php"); // inclut les données de connexion

// boucle pour récupérer les données de la bdd concernant les produits
$recup = mysql_query("SELECT * FROM prod")or die(mysql_error());
while ($infos = mysql_fetch_assoc($recup))
{
echo "Produit : " . $infos['nom'] . "<br />Description : " . $infos['description'] . "<br />Prix : " . $infos['prix'] . "&euro;<br />";
?>
 
 
<?php
// vérifier ce qu'on fait de $qte, si add alors $qte++, si del alors $qte-- si qte > ou = 1, si clear alors $qte = 0, sinon $qte = 0

if (isset($_GET['add']))
{
        $qte = intval($_GET['add']);
        $qte++;
        $_SESSION['id']=$_GET['id'];
        $_SESSION['qte']=$qte;
}
elseif (isset($_GET['del']))
{
        $qte = intval($_GET['del']);
        if ($qte >= 1)
        {
                $qte--;
                $_SESSION['id']=$_GET['id'];
                $_SESSION['qte']=$qte;
        }
        else
        {
                $qte = 0;
                $_SESSION['id']=$_GET['id'];
                $_SESSION['qte']=$qte;
        }
}
elseif (isset($_GET['clear']))
{
        $qte = intval($_GET['clear']);
        $qte = 0;
                $_SESSION['id']=$_GET['id'];
                $_SESSION['qte']=$qte;
}
else
{
        $qte = 0;
}
 
// en dernier, liens permettant d'agir sur qte en mettant l'id du produit que l'on récupère ensuite dans le panier
?>
 
Quantit&eacute; = <?php echo $qte; ?>
<br />
<a href="products.php?add=<?php echo $qte; ?>&id=<?php echo $infos['id']; ?>">Ajouter</a>
<br /><a href="products.php?del=<?php echo $qte; ?>&id=<?php echo $infos['id']; ?>">Enlever</a>
<br /><a href="products.php?clear=<?php echo $qte; ?>&id=<?php echo $infos['id']; ?>">Remettre &agrave; z&eacute;ro</a>
 
 
<br /><br />
 
 
<?php
}
mysql_close();
?>

3 réponses

Messages postés
89
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
10 avril 2008
10
C'est normal car tu executes tes modif sur qte pour chaque ligne.

devant tes tests if, elseif, etc ajoute une ligne pour tester quel id doit etre modifier:

if( isset($_GET['id]) && $_GET['id] == $infos['id]){


if (isset($_GET['add']))
{
$qte = intval($_GET['add']);
$qte++;
$_SESSION['id']=$_GET['id'];
$_SESSION['id']['qte']=$qte;
}
elseif (isset($_GET['del']))
{
$qte = intval($_GET['del']);
if ($qte >= 1)
{
$qte--;
$_SESSION['id']=$_GET['id'];
$_SESSION['qte']=$qte;
}
else
{
$qte = 0;
$_SESSION['id']=$_GET['id'];
$_SESSION['qte']=$qte;
}
}
elseif (isset($_GET['clear']))
{
$qte = intval($_GET['clear']);
$qte = 0;
$_SESSION['id']=$_GET['id'];
$_SESSION['qte']=$qte;
}
else
{
$qte = 0;
}

}
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 79729 internautes nous ont dit merci ce mois-ci

guimton
Messages postés
89
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
10 avril 2008
10
PS:

tes variables de session sont également modifier à chaque ligne.

attention, si tu veux les recuperer plus tard.

tu devrais plutot faire comme ça:
$_SESSION[$_GET['id']] = $qte;

comme ça pour chaque produit tu peux savoir la quantité.
et tu te sert de ta session comme panier.
Messages postés
27
Date d'inscription
mardi 1 avril 2008
Statut
Membre
Dernière intervention
22 septembre 2008

Bonjour,

Tu fais juste un test pour savoir si add, del ou clear existe,
puis tu modifies $qte
et tu fais ca pour chaque produits...

En gros, la si tu as add, bah ca va faire +1 par produits ^^
Messages postés
9
Date d'inscription
mardi 1 avril 2008
Statut
Membre
Dernière intervention
14 novembre 2014

Bonjour

J'ai rajouté la ligne
if (isset($_GET['id']) && $_GET['id'] == $infos['id'])

et en effet maintenant çe me prend bien en compte la quantité du produit pour lequel j'ai cliqué.

Mon problème maintenant c'est que quand je rajoute 1 produit, puis un 2e, la quantité du 1er produit se remet à 0.

Voici le bout de code en question :

<?php
if (isset($_GET['id']) AND $_GET['id'] == $infos['id'])
{
	if (isset($_GET['add']))
	{
		$qte = intval($_GET['add']);
		$qte++;
		$_SESSION[$_GET['id']] = $qte; 
	}
}
if (isset($_GET['id']) AND $_GET['id'] == $infos['id'])
{
	if (isset($_GET['del']))
	{
		$qte = intval($_GET['del']);
		if ($qte >= 1)
		{
			$qte--;
			$_SESSION[$_GET['id']] = $qte; 
		}
		else
		{
			$qte = 0;
			$_SESSION[$_GET['id']] = $qte; 
		}
	}
}
if (isset($_GET['id']) AND $_GET['id'] == $infos['id'])
{
	if (isset($_GET['clear']))
	{
		$qte = intval($_GET['clear']);
		$qte = 0;
		$_SESSION[$_GET['id']] = $qte; 
	}
}
else
{
	$qte = 0;
}
?>



Mon panier (sur une autre page) ne semble pas non plus marcher comme il faut... il m'affiche une erreur de ce type :
You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

La requête SQL est celle-ci :
$recup = mysql_query("SELECT nom, description, prix FROM prod WHERE id=" . $_SESSION[$_GET['id']] . "")or die(mysql_error());


Merci d'avance pour votre aide.

Loch-Nar
Messages postés
27
Date d'inscription
mardi 1 avril 2008
Statut
Membre
Dernière intervention
22 septembre 2008

Pour l'erreur SQL, verifie que le $_GET['id'] existe, sinon il fait une recherche sur id=NULL
forcement il comprend pas ^^

Pour le bout de code, j'viens de tilter ^^
En fait, tu fais tes differents tests... mais si jamais il n'y a rien, tu remets $qte à 0
donc en gros:
tu incrementes un premier produit, tu veux ensuite incrementer un second, donc l'id change, ton premier produits repasse a 0 et le second est incrementé.

Je pense que tu ferais mieux de sauvegarder le panier de l'utilisateur et la quantité de chaque cartouche dans une bdd mysql:
1) plus simple a coder ^^
2) s'il se reconnecte plus tard, son panier est sauvegardé vu que c'est pas dans un cookie ou une variable de session qui peuvent disparaitre.

plus simple et plus puissant? pourquoi s'embetter ^^
guimton
Messages postés
89
Date d'inscription
jeudi 27 mars 2008
Statut
Membre
Dernière intervention
10 avril 2008
10
remplace $recup = mysql_query("SELECT nom, description, prix FROM prod WHERE id=" . $_SESSION[$_GET['id']] . "")or die(mysql_error());

par
$recup = mysql_query("SELECT nom, description, prix FROM prod WHERE id='" . $_SESSION[$_GET['id']] . "'")or die(mysql_error());

tu as oublier les quotes autour de ton $_session