[php] variable s'incrémentant plusieurs fois

Fermé
kategriss Messages postés 9 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 14 novembre 2014 - 1 avril 2008 à 12:32
guimton Messages postés 89 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 10 avril 2008 - 1 avril 2008 à 16:26
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();
?>
A voir également:

3 réponses

guimton Messages postés 89 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 10 avril 2008 10
1 avril 2008 à 13:44
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
guimton Messages postés 89 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 10 avril 2008 10
1 avril 2008 à 13:47
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.
0
Loch-Nar Messages postés 27 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 22 septembre 2008
1 avril 2008 à 13:43
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 ^^
0
kategriss Messages postés 9 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 14 novembre 2014
1 avril 2008 à 14:20
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.

0
Loch-Nar Messages postés 27 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 22 septembre 2008
1 avril 2008 à 15:03
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 ^^
0
guimton Messages postés 89 Date d'inscription jeudi 27 mars 2008 Statut Membre Dernière intervention 10 avril 2008 10
1 avril 2008 à 16:26
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
0