Sytème de panier problème actualisation (PHP)

Résolu/Fermé
Programming_018 Messages postés 106 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 14 mars 2024 - 17 déc. 2018 à 12:45
Programming_018 Messages postés 106 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 14 mars 2024 - 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();
    }
	})
});

2 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
17 déc. 2018 à 13:57
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;




0
Programming_018 Messages postés 106 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 14 mars 2024 7
17 déc. 2018 à 18:18
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.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
18 déc. 2018 à 07:21
Sais tu ce qu'est un array associatif ?
Si la réponse est non... commence par te documenter sur ça.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
18 déc. 2018 à 09:55
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>";




0
Programming_018 Messages postés 106 Date d'inscription vendredi 13 janvier 2017 Statut Membre Dernière intervention 14 mars 2024 7
18 déc. 2018 à 10:31
Merci beaucoup je vais pouvoir avancé grâce à vous. Bonne journée et fêtes.
0