Sauvegarde d'un panier pendant plusieurs jours

Firefly90 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonsoir.
Je voudrais sauvegarder un panier pendant une semaine.
Peux on sauvegarder la session pendant une semaine ou dois-je utiliser un cookie?
A voir également:

4 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
en principe, ni l'un ni l'autre, il faut mémoriser dans une base de données (ou dans un fichier).
0
Firefly90 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir

Mais est ce que l'on peux modifié la durée d'une session car mon panier n'est pas enregistré dans une bdd pour le moment.
Il fais juste parti d'une session dans ma page.
j'ai suivi ce tuto sur le net par contre il n'y a aucun enregistrement et je voudrais que mes éléments reste dans mon panier.
voici mes deux codes

mon panier

<?php require('inc_connect.php'); ?>
<?php require('inc_user.php'); ?>
<?php
setcookie("panier", "Guru99", time() - 360,'/');
Print_r ('$panier');?>
<?php
session_start();
include_once("fonctions-panier.php");
$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écuperation 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 verifie que $p soit un float
   $p = floatval($p);
 
   //On traite $q qui peut etre un entier simple ou un tableau d'entier
     
   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']['libelleProduit'][$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>Libellé</td>
        <td>Quantité</td>
        <td>Prix Unitaire</td>
        <td>Action</td>
    </tr>
<li><a href="liste.php">Mon panier</a></li><br>
<?php
    if (creationPanier())
    {
       $nbArticles=count($_SESSION['panier']['libelleProduit']);
       if ($nbArticles <= 0)
       echo "<tr><td>Votre panier est vide </ td></tr>";
       else
       {
          for ($i=0 ;$i < $nbArticles ; $i++)
          {
             echo "<tr>";
             echo "<td>".htmlspecialchars($_SESSION['panier']['libelleProduit'][$i])."</ td>";
             echo "<td><input type=\"text\" size=\"4\" name=\"q[]\" value=\"".htmlspecialchars($_SESSION['panier']['qteProduit'][$i])."\"/></td>";
             echo "<td>".htmlspecialchars($_SESSION['panier']['prixProduit'][$i]) . " €</td>";
             echo "<td><a href=\"".htmlspecialchars("panier.php?action=suppression&l=".rawurlencode($_SESSION['panier']['libelleProduit'][$i]))."\">XX</a></td>";
             echo "</tr>";
          }
 
          echo "<tr><td colspan=\"2\"> </td>";
          echo "<td colspan=\"2\">";
          echo "Total : ".MontantGlobal();
          echo "€</td></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>


et mon code fonctions panier
<?php
function creationPanier(){
   if (!isset($_SESSION['panier'])){
      $_SESSION['panier']=array();
      $_SESSION['panier']['libelleProduit'] = array();
      $_SESSION['panier']['qteProduit'] = array();
      $_SESSION['panier']['prixProduit'] = array();
      $_SESSION['panier']['verrou'] = false;
   }
   return true;
}
 
function ajouterArticle($libelleProduit,$qteProduit,$prixProduit){
 
 
   if (creationPanier() && !isVerrouille())
   {
      
      $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['libelleProduit']);
 
      if ($positionProduit !== false)
      {
         $_SESSION['panier']['qteProduit'][$positionProduit] += $qteProduit ;
      }
      else
      {
         //Sinon on ajoute le produit
         array_push( $_SESSION['panier']['libelleProduit'],$libelleProduit);
         array_push( $_SESSION['panier']['qteProduit'],$qteProduit);
         array_push( $_SESSION['panier']['prixProduit'],$prixProduit);
      }
   }
   else
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}
 
 
 
function modifierQTeArticle($libelleProduit,$qteProduit){
 
   if (creationPanier() && !isVerrouille())
   {
      
      if ($qteProduit > 0)
      {
          
         $positionProduit = array_search($libelleProduit,  $_SESSION['panier']['libelleProduit']);
 
         if ($positionProduit !== false)
         {
            $_SESSION['panier']['qteProduit'][$positionProduit] = $qteProduit ;
         }
      }
      else
      supprimerArticle($libelleProduit);
   }
   else
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}
 
function supprimerArticle($libelleProduit){
    
   if (creationPanier() && !isVerrouille())
   {
      
      $tmp=array();
      $tmp['libelleProduit'] = array();
      $tmp['qteProduit'] = array();
      $tmp['prixProduit'] = array();
      $tmp['verrou'] = $_SESSION['panier']['verrou'];
 
      for($i = 0; $i < count($_SESSION['panier']['libelleProduit']); $i++)
{         
if ($_SESSION['panier']['libelleProduit'][$i] !== $libelleProduit)
         {
            array_push( $tmp['libelleProduit'],$_SESSION['panier']['libelleProduit'][$i]);
            array_push( $tmp['qteProduit'],$_SESSION['panier']['qteProduit'][$i]);
            array_push( $tmp['prixProduit'],$_SESSION['panier']['prixProduit'][$i]);
         }

      }

      $_SESSION['panier'] =  $tmp;

      unset($tmp);
   }
   else
   echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}

function MontantGlobal(){
   $total=0;
   for($i = 0; $i < count($_SESSION['panier']['libelleProduit']); $i++)
   {
      $total += $_SESSION['panier']['qteProduit'][$i] * $_SESSION['panier']['prixProduit'][$i];
   }
   return $total;
}
 
 
 
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']))
   return count($_SESSION['panier']['libelleProduit']);
   else
   return 0;
 
}
 
?>
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
pour le moment, tout est correctement mémorisé, mais pas pendant assez longtemps?
0
Firefly90 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
En fait, il me faut une durée de 15 jours et pas plus.
C'est pour ça, est ce que je peux mettre une durée de validité du panier?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Firefly90 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
pour le moment, tout est-il correctement mémorisé?
si tu veux éviter que le panier dure trop longtemps, il suffit de mémoriser sa date de péremption.
0
Firefly90 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Et ça marche comme les cookies?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Firefly90 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
Tu préfères les cookies aux sessions?
0
Firefly90 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
Non, c'est juste que je ne vois pas trop comment faire pour mémoriser la date sans utiliser de cookies?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
qu'est-ce qui empêche de mémoriser la date dans une variable de session?
0
Firefly90 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
en fait, dans la demande qui a été faite.
je dois imperativement sauvegarder mon panier dans un cookie.
mais je suis un peu perdu car je ne sais pas si il faut que l'insère dans mon code du panier pour qu'il réapparaisse ou le mettre dans un fichier a part en include??
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
commence peut-être par un exercice simple avec un cookie, cela t'aidera à comprendre.
tu décideras ensuite comment modifier ton code.
0
Firefly90 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
En fait, j'arrive pas à récupérer ma variable de session pour mon cookie.
Techniquement je dois récupérer $_SESSION('panier') .
Comme c'est un tableau? Est ce qu'il y a une règle pour récupérer ce qu'il y a l'intérieur ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Firefly90 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai l'impression que tu fais une soupe avec cookie et session.

ce sont deux concepts indépendants.
0