PHP – Implémenter un panier d’achat en PHP

LEÇON

 

Principes de base

 

Un panier d'achat est la liste de produits sélectionnés par un utilisateur. Naturellement, la liste pour un utilisateur n'est pas pareil que la liste pour un autre. Le serveur web doit donc pouvoir gérer multiple listes, et doit pouvoir générer du contenu (la page d'affichage du panier par exemple) à la volée selon la liste de l'utilisateur en face.

 

Pour pouvoir stocker les informations particulières aux différents utilisateurs (anonymes) nous pouvons, côté serveur, exploiter dans le PHP ce qu'on appelle les SESSIONS.

 

Selon le site officiel de PHP :

Les sessions sont un moyen simple de stocker des données individuelles pour chaque utilisateur en utilisant un identifiant de session unique. Elles peuvent être utilisées pour faire persister des informations entre plusieurs pages. Les identifiants de session sont normalement envoyés au navigateur via des cookies de session, et l'identifiant est utilisé pour récupérer les données existantes de la session. L'absence d'un identifiant ou d'un cookie de session indique à PHP de créer une nouvelle session, et génère ainsi un nouvel identifiant de session.

... Lorsqu'une session est démarrée, PHP va soit récupérer une session existante en utilisant l'identifiant de session passé (habituellement depuis un cookie de session) ou si aucun identifiant de session n'est passé, il va créer une nouvelle session. PHP va ainsi peupler la variable superglobale $_SESSION avec toutes les données de session une fois la session démarrée. Lorsque PHP s'arrête, il va prendre automatiquement le contenu de la variable superglobale $_SESSION, le linéariser, et l'envoyer pour stockage au gestionnaire de sauvegarde de session.

 

Exemple

 

Voici un exemple le plus simple possible pour l'implémentation d'un panier d'achat qui exploite les SESSIONS en PHP. L'idée de cet exemple n'est pas de montrer une implémentation finie - tout au contraire, pour mieux comprendre l'essentiel de la chose, c'est le squelette d'une implémentation qui montre uniquement le coeur de la solution.

Remarques :

  • La "page d'accueil" est index.php
  • Quand on clique un lien pour ajouter un produit dans le panier, le lien rouvre index.php avec un paramètre GET ("ajouter")
  • la valeur du paramètre GET est l'identifiant du produit
  • quand un paramètre GET est détecté par index.php, il est ajouté dans le variable de session ("list") qui est un tableau
  • le nombre de produits dans le panier est affiché selon la taille du tableau (session "list")
  • index.php remplit le tableau (session "list") et panier.php ne fait que le lire et l'afficher...
  • ...sauf dans le cas où on clique sur "vider le panier" qui est un lien qui rouvre panier.php avec un paramètre GET qui lui déclenche le RAZ

 

index.php

 

<?php
// Start the session
session_start();
//stocker les ajouts dans la session
if (isset($_GET["ajouter"]))
{
  if (!isset($_SESSION["list"]))
  {
    $_SESSION["list"] = array();
  }
  array_push($_SESSION["list"], $_GET["ajouter"]);
}
//compter elements dans panier
$panier_count = 0;
if (isset($_SESSION["list"]))
{
  $panier_count = sizeof($_SESSION["list"]);
}
?>
<!DOCTYPE html>
<html>
<body>

<a href="panier.php">Voir le panier</a> (<?php print $panier_count; ?> produits)<br><br><br>

<a href="index.php?ajouter=222">Ajouter produit 222</a><br>
<a href="index.php?ajouter=333">Ajouter produit 333</a><br>
<a href="index.php?ajouter=444">Ajouter produit 444</a><br>

</body>
</html>

 

panier.php

 

<?php
// Start the session
session_start();
// eventuellement vider le panier
if (isset($_GET["vider"]))
{
  session_unset();
}
?>

<!DOCTYPE html>
<html>
<body>

<h3>Mon panier</h3>

<a href="panier.php?vider=1">Vider le panier</a>

<hr>

<?php
//afficher le contenu de la session
if (isset($_SESSION["list"]))
{
  foreach ($_SESSION["list"] as $value){
    print $value . "<br>";
  }
}
?>

<hr>

<a href="index.php">Continue shopping</a>

</body>
</html>

 


 

EXERCICES

 

1. Créer (en HTML, CSS et PHP) une boutique en ligne - version simplifiée.

Vous pouvez choisir ce que vous voulez comme type(s) de produit en vente.

Le site doit avoir au moins 2 pages :

  • une page d'accueil qui met en vitrine les produits disponible. Sur cette page, chaque produit doit avoir un titre, une description courte, une image, un prix et un lien ou bouton pour ajouter le produit dans le panier.
  • une page qui affiche le contenu du panier. Sur cette page chaque produit dans le panier devrait être affiché avec son titre, son image et son prix. Il doit y avoir un lien ou bouton sur cette page pour vider le panier et un autre pour continuer ses courses en ligne.

Site exemple (uniquement pour illustrer - il ne faut pas reproduire de façon identique ce site - vous devez choisir un autre look, d'autres produits, etc) : Cliquez ici.

Astuces importantes :

  • cet exercice est beaucoup plus facile si on prend le code de l'exemple 5 de la leçon "PHP - Principes de Base" comme point de départ. Voici le fichier ZIP avec le code de cet exemple : Télécharger le fichier ZIP avec le code pour "PHP - Pricipes de Base - Exemple 5".
  • Sur cette base il faut intégrer le code PHP pour gérer le panier d'achat.
  • Le code pour afficher les produits disponibles et pour gérer l'ajout d'un produit dans le panier (donc le code du fichier "index.php" ci-dessus) serait logiquement intégré dans la première page du site (page d'accueil qui met en vitrine les produits).
  • Le code pour afficher le contenu du panier et pour pouvoir le vider (donc le code du fichier "panier.php" ci-dessus) serait logiquement intégré dans la deuxième page du site (page qui affiche le contenu de son panier d'achat).
  • Mais ATTENTION : on ne peut pas bêtement prendre, par exemple, tout le code du fichier "index.php" ci-dessus et l'ajouter aléatoirement n'importe où dans le site. Il faut prendre uniquement ces bouts de code qui sont nécessaires à la gestion du panier d'achat et les intégrer avec intelligence.