[php] variable s'incrémentant plusieurs fois
kategriss
Messages postés
9
Statut
Membre
-
guimton Messages postés 89 Statut Membre -
guimton Messages postés 89 Statut Membre -
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.
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'] . "€<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é = <?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 à zéro</a> <br /><br /> <?php } mysql_close(); ?>
A voir également:
- [php] variable s'incrémentant plusieurs fois
- Easy php - Télécharger - Divers Web & Internet
- Signe fois clavier iphone ✓ - Forum Word
- Expert php pinterest - Télécharger - Langages
- Téléphone sonne 1 fois puis messagerie - Forum Mobile
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
3 réponses
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;
}
}
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;
}
}
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 ^^
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 ^^
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 :
Mon panier (sur une autre page) ne semble pas non plus marcher comme il faut... il m'affiche une erreur de ce type :
La requête SQL est celle-ci :
Merci d'avance pour votre aide.
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.
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 ^^
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 ^^
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
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
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.