IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Ajout d'article dans panier avec limite de stock


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Gérant société informatique
    Inscrit en
    Septembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Gérant société informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2022
    Messages : 6
    Par défaut Ajout d'article dans panier avec limite de stock
    Bonjour tout le monde ^^

    Je vais essayer de faire au plus simple :-D

    Sur mon site web a la base statique j'ai ajouter un système de panier basé sur la sessions et sur une base de donnée simple et très peu automatisé.

    Notamment pour le stock je le gère a la main dans un champ stock de la table articles

    J'ai un bout de code qui permet d'ajouter un article :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
        case "add":
            if(!empty($_POST["quantity"])) {
                $pid=$_GET["pid"];
                $result=mysqli_query($con,"SELECT * FROM articles INNER JOIN categorie ON articles.cat = categorie.idcat WHERE id='$pid'");
                  while($productByCode=mysqli_fetch_array($result)){
                $itemArray = array($productByCode["code"]=>array('nom'=>$productByCode["nom"], 'code'=>$productByCode["code"], 'cat'=>$productByCode["cat"], 'stock'=>$productByCode["stock"] ,'quantity'=>$_POST["quantity"], 'prix'=>$productByCode["prix"], 'categorie'=>$productByCode["categorie"], 'image'=>$productByCode["image"]));
                if(!empty($_SESSION["cart_item"])) {
                    if(in_array($productByCode["code"],array_keys($_SESSION["cart_item"]))) {
                        foreach($_SESSION["cart_item"] as $k => $v) {
                                if($productByCode["code"] == $k) {
                                    if(empty($_SESSION["cart_item"][$k]["quantity"])) {
                                        $_SESSION["cart_item"][$k]["quantity"] = 0;
                                    }
                                    $_SESSION["cart_item"][$k]["quantity"] += $_POST["quantity"];
                                }
                        }
                    } else {
                        $_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray);
                    }
                }  else {
                    $_SESSION["cart_item"] = $itemArray;
                }
            }
        }
        break;
    Je cherche tout simplement a ce que le panier virtuel en cour ne puisse pas contenir, par article, plus que mon champ stock.

    Voila d'avance merci pour les idées :-)

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Gérant société informatique
    Inscrit en
    Septembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Gérant société informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2022
    Messages : 6
    Par défaut [Résolu]
    C'est bon j'ai trouvé, c'est surement pas tres beau ^^ mais si ca peu aider :

    Je ne suis pas aller du coter de l'action, mais du coter du panier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <!-- Cart ---->
    <div id="shopping-cart">
     
    <a id="btnEmpty" href="panier.php?action=empty">Tout supprimer</a>
    <?php
    if(isset($_SESSION["cart_item"])){
        $total_quantity = 0;
        $total_price = 0;
    ?>	
    <table class="tbl-cart" cellpadding="10" cellspacing="1">
    <tbody>
    <tr>
    <th style="text-align:left;font-size:small;font-weight:700"></th>
    <th style="text-align:left;font-size:small;font-weight:700">Type</th>
    <th style="text-align:left;font-size:small;font-weight:700">Nom</th>
    <th style="text-align:left;font-size:small;font-weight:700">Code</th>
    <th style="text-align:right;font-size:small;font-weight:700">Quantitée</th>
    <th style="text-align:right;font-size:small;font-weight:700">Prix unitaire</th>
    <th style="text-align:right;font-size:small;font-weight:700">Prix</th>
    <th style="text-align:center;font-size:small;font-weight:700">Retirer</th>
    </tr>	
    <?php		
        foreach ($_SESSION["cart_item"] as $item){
            $item_price = $item["quantity"]*$item["prix"];
    		if($item["quantity"] > $item["stock"]){
    			$item["quantity"] = $item["stock"];
    				$item_price = $item["quantity"]*$item["prix"];
     
    }		
     
    	    ?>
    				<tr>
    				<td><img src="img/article/<?php echo $item["image"]; ?>" class="cart-item-image" /></td>
    				<td><?php echo $item["categorie"]; ?></td>
    				<td><?php echo $item["nom"]; ?></td>
    				<td><?php echo $item["code"]; ?></td>
    				<td style="text-align:right;"><?php echo $item["quantity"]; ?></td>
    				<td style="text-align:right;"><?php echo "€ ".$item["prix"]; ?></td>
    				<td style="text-align:right;"><?php echo "€ ". number_format($item_price,2); ?></td>
    				<td style="text-align:center;"><a href="panier.php?action=remove&code=<?php echo $item["code"]; ?>" class="btnRemoveAction"><p align="center"><img src="img/corbeille.png" alt="Remove Item" /></p></a></td>
    				</tr>
    				<?php
    				$total_quantity += $item["quantity"];
    				$total_price += ($item["prix"]*$item["quantity"]);
     
     
    		}
     
    		?>
     
    <tr>
    <td colspan="4" align="right">Total:</td>
    <td align="right"><?php echo $total_quantity; ?></td>
    <td align="right" colspan="2"><strong><?php echo "€ ".number_format($total_price, 2); ?></strong></td>
    <td></td>
    </tr>
    </tbody>
    </table>		
      <?php
     
    } else {
    ?>
    	<p>&nbsp;</p>
    	<p>&nbsp;</p>
    <div class="no-records" style="font-size:large;font-weight:800">Votre panier est vide</div>
    	<p>&nbsp;</p>
    	<p>&nbsp;</p>
    <?php 
     
    	}
    ?>
    J'ai rajouté ces trois lignes après le foreach :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ?php		
        foreach ($_SESSION["cart_item"] as $item){
            $item_price = $item["quantity"]*$item["prix"];
    		if($item["quantity"] > $item["stock"]){
    			$item["quantity"] = $item["stock"];
    				$item_price = $item["quantity"]*$item["prix"];
     
    }		
     
    	    ?>
    Elle force le panier en permanence a ne pas pouvoir dépasser la quantité stock et recalcule aussi le prix total par article. Du coup un client dans sa session ne peux pas forcer par un rafraichissement le max d'article dispo.

  3. #3
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par défaut
    merci d'être revenu sur le forum pour nous expliquer votre solution.
    vous pouvez maintenant cliquez sur le bouton bleu "résolu" que vous voyez vers le bas de la discussion.

    j'aurai peut-être une amélioration à proposer : faites ce test avant de mettre la quantité dans la session parce que si vous utilisez la valeur de la session un peu plus tard (par exemple pour envoyer un e-mail au vendeur) vous risquez d'oublier que la valeur dans la session est peut-être plus grande que le stock disponible.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Gérant société informatique
    Inscrit en
    Septembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Gérant société informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2022
    Messages : 6
    Par défaut
    Pas de souci ^^ .

    Sinon j'ai eu une frayeur (j'ai bien évidement besoin des données du panier a la fin ^^) les données contenu dans $_sessions sont les bonnes :-)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Gérant société informatique
    Inscrit en
    Septembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Gérant société informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2022
    Messages : 6
    Par défaut
    Citation Envoyé par mathieu Voir le message
    merci d'être revenu sur le forum pour nous expliquer votre solution.
    vous pouvez maintenant cliquez sur le bouton bleu "résolu" que vous voyez vers le bas de la discussion.

    j'aurai peut-être une amélioration à proposer : faites ce test avant de mettre la quantité dans la session parce que si vous utilisez la valeur de la session un peu plus tard (par exemple pour envoyer un e-mail au vendeur) vous risquez d'oublier que la valeur dans la session est peut-être plus grande que le stock disponible.
    Rebonjour, il s'avère que vous aviez raison :-) j'ai lu l'id de catégorie a chaque fois et non la quantité, et en effet la SESSION elle, se remplie n'importe comment (ce qui est logique en fait après coup :-) )

    Du coup je suis partis dans l'idée de changer les valeurs de la sessions avec une fonction écris comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php	
     
    	foreach($_SESSION["cart_item"] as $articlepanier) {
    		$quantitepararticlepanier = $articlepanier["quantity"];
    		$codepanier = $articlepanier["code"];
    			$req=mysqli_query($con,"SELECT code, stock FROM articles WHERE code='$codepanier'");
    			while($stockmax=mysqli_fetch_array($req)) {
    		$tableauxarticle = array($stockmax["code"]=>array( 'code'=>$stockmax["code"], 'stock'=>$stockmax["stock"]));
    		$maximaxou=$stockmax["stock"];
    			if($maximaxou < $quantitepararticlepanier);
    			echo 'verifier';
     
     
    			echo gettype($maximaxou);
    			echo gettype($quantitepararticlepanier);
     
     
    			}
    	}
     
    ?>
    Mais ca ne fonctionne pas, la condition if se vérifie absolument tout le temp,

    Ma question est ce que ca a avoir avec le fait que le type des valeurs soit "chaine de caractère" et est ce normal que ces valeurs ai ce type alors que ce sont des entiers ?

    Résultat en live :

    verifierstringstringverifierstringinteger

    Merci d'avance

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par défaut
    vous avez mis ";" à la fin du "if" ce qui donne ce résultat.

    je vous conseille déjà de bien indenter votre code, vous verrez mieux la structure de ce que vous faites. et ensuite j'ai pris l'habitude de mettre des accolades même quand il y a une seule ligne, je trouve le code plus clair de cette façon.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Gérant société informatique
    Inscrit en
    Septembre 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Gérant société informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2022
    Messages : 6
    Par défaut
    Merci je viens de le voir a l'instant. On part de quelqu'un qui a comme base le bon vieux select from where appris il y a 25 ans déjà et qui n'avait jamais retoucher de code depuis ce temps la (et ca se vois ...)

    Ca fait 1 semaine maintenant que je me retourne la tête en étant partit d'un code tout près pour faire ce site de vente en ligne et je commence a ne plus voir des truc complètement idiot.

    Quant a la mise en forme j'ai fait tellement de couper/copier/coller qu'effectivement ca deviens de moins en moins propre :-D

    J'ai tester se if et il fonctionne bien ainsi que les variable finale de sa condition. Il ne me reste plus qu'a écrire la partie final qui me force la valeur du stock max dans mon tableaux de _SESSION et je reviendrait coller le code ici, j'approche du but ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter un article dans le panier via l'url
    Par Ominge dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/12/2020, 09h05
  2. Ajouter un article dans le panier via l'url
    Par Ominge dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 12/12/2020, 21h01
  3. Ajout d'article dans le panier
    Par nacash55 dans le forum Langage
    Réponses: 2
    Dernier message: 16/05/2010, 23h45
  4. [MySQL] comment ajouter plusieurs articles dans une BD MySql+tables temporaires
    Par forbidden_fruit dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/05/2008, 12h00
  5. [PHP-JS] modif quantite article dans panier
    Par oceane751 dans le forum Langage
    Réponses: 8
    Dernier message: 16/09/2006, 00h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo