Bonjour,

Voila je rencontre un petit problème avec mon code pour afficher mes articles dans mon panier.
Je vous mets le code de panier.php :

<?php
include('includes/header.php');
require("includes/fonction_panier.php");
?>
<br><br>
<?php
var_dump(creationPanier());
$erreur = false;

$action = (isset($_POST['action'])? $_POST['action']: (isset($_GET['action'])? $_GET['action']:null )) ;
if($action !== null)
{
if(!in_array($action,array("ajout", "suppression", "refresh")))
$erreur=true;

//récupération des variables en POST ou GET
$l = (isset($_POST['l'])? $_POST['l']: (isset($_GET['l'])? $_GET['l']:null )) ;
$p = (isset($_POST['p'])? $_POST['p']: (isset($_GET['p'])? $_GET['p']:null )) ;
$q = (isset($_POST['q'])? $_POST['q']: (isset($_GET['q'])? $_GET['q']:null )) ;

//Suppression des espaces verticaux
$l = preg_replace('#\v#', '',$l);

//On vérifie que $p est un float
$p = floatval($p);

//On traite $q qui peut être un entier simple ou un tableau d'entiers

if (is_array($q)){
$QteArticle = array();
$i=0;
foreach ($q as $contenu){
$QteArticle[$i++] = intval($contenu);
}
}
else
$q = intval($q);

}

if (!$erreur){
switch($action){
Case "ajout":
ajouterArticle($l,$q,$p);
break;

  Case "suppression":
     supprimerArticle($l);
     break;

  Case "refresh" :
     for ($i = 0 ; $i < count($QteArticle) ; $i++)
     {
        modifierQTeArticle($_SESSION['panier']['nom'][$i],round($QteArticle[$i]));
     }
     break;

  Default:
     break;

}
}

echo '<?xml version="1.0" encoding="utf-8"?>';?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Votre panier</title>
</head>
<body>

<form method="post" action="panier.php">
<table style="width: 400px">
<tr>
<td colspan="4">Votre panier</td>
</tr>
<tr>
<td>Nom</td>
<td>Id</td>
<td>Référence</td>
<td>Quantité</td>
<td>Action</td>
</tr>

<?php
if (isset($_GET['deletepanier']) && $_GET['deletepanier']== true){
   supprimePanier();
}

if (creationPanier())
{
  $_SESSION['panier']['nom'] = array();
   $nbArticles=count($_SESSION['panier']['nom']);
   if ($nbArticles <= 0)
   echo "<tr><td style='color: red'>Ooops,panier est vide </td></tr>";
   else
   {
      for ($i=0 ;$i < $nbArticles ; $i++)
      {
         echo "<tr>";
         echo "<td>".htmlspecialchars($_SESSION['panier']['nom'][$i])."</ td>";
         echo "<td><input type=\"text\" size=\"4\" name=\"q[]\" value=\"".htmlspecialchars($_SESSION['panier']['qte'][$i])."\"/></td>";
         echo "<td><a href=\"".htmlspecialchars("panier.php?action=suppression&l=".rawurlencode($_SESSION['panier']['nom'][$i]))."\">X</a></td>";
         echo "</tr>";
      }

      echo "<tr><td colspan=\"4\">";
      echo "<input type=\"submit\" value=\"Rafraichir\"/>";
      echo "<input type=\"hidden\" name=\"action\" value=\"refresh\"/>";

      echo "</td></tr>";
   }
}
?>

</table>
</form>
</body>
</html>
<br><br>
<?php
include_once("includes/footer.php");
?>

Et celui de fonction_panier.php :

<?php

function creationPanier(){
if (!isset($_SESSION['panier'])){
$_SESSION['panier']=array();
$_SESSION['panier']['nom'] = array();
$_SESSION['panier']['qte'] = array();
$_SESSION['panier']['id'] = array();
$_SESSION['panier']['verrou'] = false;
//$select = $bdd->query("SELECT TVA FROM produit");
//$data = $select->fetch(PDO::FETCH_OBJ);
}
return true;
}

function ajouterArticle($nom,$qte,$id){

//Si le panier existe
if (creationPanier() && !isVerrouille())
{
//Si le produit existe déjà on ajoute seulement la quantité
$positionProduit = array_search($nom, $_SESSION['panier']['nom']);

  if ($positionProduit !== false)
  {
     $_SESSION['panier']['qte'][$positionProduit] += $qte ;
  }
  else
  {
     //Sinon on ajoute le produit
     array_push( $_SESSION['panier']['nom'],$nom);
     array_push( $_SESSION['panier']['qte'],$qte);
     array_push( $_SESSION['panier']['id'],$id);
  }

}
else
echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}

function modifierQTeArticle($nom,$qte){
//Si le panier existe
if (creationPanier() && !isVerrouille())
{
//Si la quantité est positive on modifie sinon on supprime l'article
if ($qte > 0)
{
//Recharche du produit dans le panier
$positionProduit = array_search($nom, $_SESSION['panier']['nom']);

     if ($positionProduit !== false)
     {
        $_SESSION['panier']['qte'][$positionProduit] = $qte ;
     }
  }
  else
  supprimerArticle($nom);

}
else
echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}

function supprimerArticle($nom){
//Si le panier existe
if (creationPanier() && !isVerrouille())
{
//Nous allons passer par un panier temporaire
$tmp=array();
$tmp['nom'] = array();
$tmp['qte'] = array();
$tmp['verrou'] = $_SESSION['panier']['verrou'];

  for($i = 0; $i < count($_SESSION['panier']['nom']); $i++)
  {
     if ($_SESSION['panier']['nom'][$i] !== $nom)
     {
        array_push( $tmp['nom'],$_SESSION['panier']['nom'][$i]);
        array_push( $tmp['qte'],$_SESSION['panier']['qte'][$i]);
     }

  }
  //On remplace le panier en session par notre panier temporaire à jour
  $_SESSION['panier'] =  $tmp;

  //On efface notre panier temporaire
  unset($tmp);

}
else
echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}

function supprimePanier(){
unset($_SESSION['panier']);
}

function isVerrouille(){
if (isset($_SESSION['panier']) && $_SESSION['panier']['verrou'])
return true;
else
return false;
}

function compterArticles()
{
if (isset($_SESSION['panier']))
$panier=array();
else
$panier = $_SESSION['panier'];

}

?>

Pouvez-vous m'aider assez rapidement car c'est assez urgent cela fait 3-4 jours que je ne comprends pas mon erreur.

4 réponses


Bonsoir,

Sur panier.php

ligne 92, tu remets le panier à zéro

ligne 93 tu fais un count sur une valeur que tu viens de remettre à zéro...
Que donne un var_dump($_SESSION['panier'])); ?

kaho
Auteur

Bonsoir,
Je viens d'enlever cette ligne et le var_dump donne ca :

C:\laragon\www\ecommerce\panier.php:9:
array (size=7)
'libelleProduit' =>
array (size=0)
empty
'qteProduit' =>
array (size=0)
empty
'prixProduit' =>
array (size=0)
empty
'verrou' => boolean false
'nom' =>
array (size=0)
empty
'qte' =>
array (size=1)
0 => int 5
'id' => null

le panier est bien vide
mais comme tu n'as pas mis de "value" sur ton formulaire d'ajout, rien n'est ajouté
(je sais cela car je te réponds sur OCC)

kaho
Auteur

D'accord et comment je fais pour mettre une "value" sur le formulaire d'ajout ?