Menu

Sytème de panier problème actualisation (PHP) [Résolu]

Messages postés
52
Date d'inscription
vendredi 13 janvier 2017
Dernière intervention
15 janvier 2019
- - Dernière réponse : Programming_018
Messages postés
52
Date d'inscription
vendredi 13 janvier 2017
Dernière intervention
15 janvier 2019
- 18 déc. 2018 à 10:31
Bonjour je suis actuellement en création d'un système de panier en php.

Actuellement il fonctionne très bien. J'ai même réussi lorsque l'utilisateur change la quantité cela s'actualise automatiquement.

Le problème c'est que l'actualisation fonctionne juste quand il y a un seul article de sélectionné.

Voici le code de l'affichage du panier (juste la partie de la quantité) :
echo "<td width=400px; class='tableau'><input id=\"raff\" onchange=\"onchange()[$i];\" 
type=\"number\" size=\"4\" name=\"q[]\" 
value=\"".htmlspecialchars($_SESSION['panier']['QteProduit'][$i])."\"/></td>";


Le code PHP :
function modifierQTeArticle($libelleProduit,$QteProduit){
        if (creationPanier() && !isVerouille()){
          if ($QteProduit > 0){
            $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['libelleProduit']);
            if ($positionProduit !== false){
                $_SESSION['panier']['QteProduit'][$positionProduit] = $QteProduit ;
            }
          }else if($QteProduit == 0){
            $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['libelleProduit']);
            if ($positionProduit !== false){
                $_SESSION['panier']['QteProduit'][$positionProduit] = 1 ;
                ?>
                <script type="text/javascript">
                    $("#raff").val() == '1';
                </script>
                <?php
            }
        }else
            supprimerArticle($libelleProduit);
    }else
        echo "Un problème est survenu veuillez contacter l'administrateur du site.";
    }


Le code java :
$(function onchange(){
  $("#raff").on('input',function(){
    if ($(this).val() === '') {
    }else if($(this).val() <= '0'){
      alert("vous ne pouvez pas avoir une quantité de 0 (zéro) ou inférieur à 0 (zéro) !");
      $("#butt").click();
    }else{
      $("#butt").click();
    }
	})
});
Afficher la suite 

Votre réponse

2 réponses

Messages postés
24563
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 février 2019
1844
0
Merci
Bonjour,

Déjà.. tu n'as aucun code JAVA.
Ton code.. c'est du JavaScript ( Java et Javascript sont deux langages différents !)

Ensuite, ta variable de session devrait ressembler à ceci (tu l'as conçue à l'envers... )
Array(
  "panier"=>Array(
      "1"=>Array(
         "id"=>1,
         "libelle"=> "mon produit 1",
         "qte" => 5
         "prix_unitaire"=> 17
      ),
      "99"=>Array(
         "id"=>99,
         "libelle"=> "Un autre produit",
         "qte" => 1
         "prix_unitaire"=> 10
      )
   )
  )

Ainsi, pour chaque produit, tu pourrais gérer les informations qui le concerne. Comme la quantité par exemple.

Pour le produit dont l'id serait 99..
//on récupère le panier si il existe
$panier= !empty($_SESSION['panier']) ? $_SESSION['panier'] : NULL;

$idcherche = 99;
//on récupère le produit dans le pannier dont l'id est égale = $idcherche
$monProduit = !empty($panier[$idcherche]) ? $panier[$idcherche] : NULL;

//on récupère la quantité du produit cherché, sinon on met 0
$qantite = !empty($monProduit['qte']) ? $monProduit['qte'] : 0;




Programming_018
Messages postés
52
Date d'inscription
vendredi 13 janvier 2017
Dernière intervention
15 janvier 2019
-
Bonsoir, merci pour cette réponse. Mais je suis vraiment nouveau dans ce domaine aurais-tu un petit moment pour m'expliquer comment je peux l'adapter s'il te plaît ? en quelques lignes je en demande pas d'avoir le code de fait mais juste quelques infos de plus stp par exemple la session tu dis que c'est à l'envers mais moi je ne vois aucun code ressemblant à ton code. Merci d'avance.
jordane45
Messages postés
24563
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 février 2019
1844 -
Sais tu ce qu'est un array associatif ?
Si la réponse est non... commence par te documenter sur ça.
Commenter la réponse de jordane45
Messages postés
24563
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 février 2019
1844
0
Merci
J'avais quelques minutes à perdre... j'en ai profité pour créer une class PHP pour gérer un panier en sessions.

<?php
/**
*  FICHIER : cart.class.php
*
*/




class cart{
  
  /**
  * Constructeur de la class
  */
  function __construct(){
    // Démarrage des sessions si pas déjà démarrées
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
    $this->initCart();
  }
  
  /**
  *Initialisation du panier
  */
  public function initCart(){
    $_SESSION['panier'] = array(); 
  }
  
  /**
  * Retourne le contenu du panier
  */
  public function getList(){
    return !empty($_SESSION['panier']) ? $_SESSION['panier'] : NULL;
  }
  
  /**
  * Ajout d'un produit au panier
  */
  public function addProduct($id_produit,$libelle_produit,$qte=1,$prix_unitaire_produit=0){
    if($qte > 0 ){
      $_SESSION['panier'][$id_produit] = array('id_produit'=>$id_produit
                                                ,'produit'=>$libelle_produit
                                                ,'qte'=>$qte
                                                ,'prix_unitaire'=>$prix_unitaire_produit
                                                ); 
      $this->updateTotalPriceProduct($id_produit);
    }else{
      return "ERREUR : Vous ne pouvez pas ajouter un produit sans quantité..."; 
    }
  }
  
  private function updateTotalPriceProduct($id_produit){
    if(isset($_SESSION['panier'][$id_produit])){
      $_SESSION['panier'][$id_produit]['prix_Total'] = $_SESSION['panier'][$id_produit]['qte'] * $_SESSION['panier'][$id_produit]['prix_unitaire'];
    }
  }
  
  /**
  * Modifie la quantité d'une produit dans le panier
  */
  public function updateQteProduct($id_produit,$qte=0){
    if(isset($_SESSION['panier'][$id_produit])){
      $_SESSION['panier'][$id_produit]['qte'] = $qte;
      $this->updateTotalPriceProduct($id_produit);
    }else{
      return "ERREUR : produit non présent dans le panier"; 
    }
  }
  
  /**
  * Supprime une produit du panier
  */
  public function removeProduct($id_produit){
    if(isset($_SESSION['panier'][$id_produit])){
      unset($_SESSION['panier'][$id_produit]);
    }
  }
  
  /**
  * Retourne le nombre de produits dans le panier
  */
  public function getNbProductsInCart(){
    $panier = !empty( $_SESSION['panier'] ) ? $_SESSION['panier'] : NULL;
    $nb = 0;
    $panier = !empty( $_SESSION['panier'] ) ? $_SESSION['panier'] : NULL;
    if(!empty($panier)){
      foreach($panier as $P){ 
        $nb += $P['qte'];
      }
    }
    return $nb;
  }
  
  public function getTotalPriceCart(){
    $total = 0;
    $panier = !empty( $_SESSION['panier'] ) ? $_SESSION['panier'] : NULL;
    if(!empty($panier)){
      foreach($panier as $P){ 
        $total += $P['prix_Total'];
      }
    }
    return $total;
  }
  
}


Et voici un exemple pour l'utiliser
<?php
//Affichage des erreurs PHP ( A mettre au début de tes scripts PHP )
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

// Démarrage des sessions si pas déjà démarrées
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}


    
//on inclus la class qui permet de gérer le panier
// require_once "chemin/vers/le/fichier/cart.class.php";
require_once "cart.class.php";

//on initialise l'objet panier :
$oPanier = new cart();



//maintenant on peut ajouter des produits au panier
echo "<br><hr><br> On ajoute deux produits au panier";
$oPanier->addProduct(1,'produit 1',1,10);
$oPanier->addProduct(654,'produit xx',1,99.5);


//on affiche le nombre de produits dans le pannier
$nbProducts = $oPanier->getNbProductsInCart();
echo "<br>Nombre de produits : ". $nbProducts;

//on affiche le contenu du panier 
$contenu_panier = $oPanier->getList();
echo "<pre> Contenu du panier :<br>";
print_r($contenu_panier );
echo "</pre>";

//on affiche le montant total du panier
$total = $oPanier->getTotalPriceCart();
echo "<br>Total panier : ". $total ;


// on modifie la quantité du premier produit
echo "<br><hr><br> On modifie la quantité du premier produit : nouvelle quantité = 35 ";
$oPanier->updateQteProduct(1,35);

//on re-affiche le nombre de produits dans le pannier
$nbProducts = $oPanier->getNbProductsInCart();
echo "<br>Nombre de produits : ". $nbProducts;

//on re-affiche le contenu du panier 
$contenu_panier = $oPanier->getList();
echo "<pre> Contenu du panier :<br>";
print_r($contenu_panier );
echo "</pre>";

//on re-affiche le montant total du panier
$total = $oPanier->getTotalPriceCart();
echo "<br>Total panier : ". $total ;


// On retire le produit dont l'id est : 654
echo "<br><hr><br>On retire le produit dont l'id est : 654" ;
$oPanier->removeProduct(654);
//on re-affiche le contenu du panier 
$contenu_panier = $oPanier->getList();
echo "<pre> Contenu du panier :<br>";
print_r($contenu_panier );
echo "</pre>";




Programming_018
Messages postés
52
Date d'inscription
vendredi 13 janvier 2017
Dernière intervention
15 janvier 2019
-
Merci beaucoup je vais pouvoir avancé grâce à vous. Bonne journée et fêtes.
Commenter la réponse de jordane45