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.
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'])); ?
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)