Pré-requis

[TBD]
[TBD]

20.Exemples de scripts PHP

20.2.Caddie virtuel (avec les sessions)

20.2.1.Caddie virtuel (version 1)

Nous allons simuler un site marchant avec des pommes des poires et des bananes à acheter, on pourra les acheter une à une et supprimer toutes les pommes, toutes les poires ou toutes les bananes. Il sera également possible de vider complètement son panier. Vous pouvez le tester vous même Version 1. Le code qui a servi à sa réalisation est le suivant
<?php
    // Dans ce script nous utilisons les sessions
    session_start();
    
    if ($_GET["action"]=="destroy") {
        // on a demander à tout supprimer
        session_destroy();
        header("Location: ".$_SERVER["PHP_SELF"]);
        die();
    }

    if (isset($_GET["raz"])) {
        // On a demandé à reinitialiser une valeur
        switch ($_GET["raz"]) {
            case "pomme":
                unset($_SESSION["pommes"]);
                break;
            case "poire":
                unset($_SESSION["poires"]);
                break;
            case "banane":
                unset($_SESSION["bananes"]);
                break;
            }
        header("Location: ".$_SERVER["PHP_SELF"]);
        die();
    }
    
    if (isset($_GET["achat"])) {
        // On a demandé à incrémenter une valeur    
        switch ($_GET["achat"]) {
            case "pomme":
                $_SESSION["pommes"]++;
                 break;
            case "poire":
                $_SESSION["poires"]++;
                 break;
            case "banane":
                $_SESSION["bananes"]++;
                 break;
        }
        header("Location: ".$_SERVER["PHP_SELF"]);
        die();
   }     
?>
Nb Pommes:<?php echo $_SESSION["pommes"];?><br />
<a href="<?php echo $_SERVER["PHP_SELF"];?>?achat=pomme">Acheter une pomme</a>
<a href="<?php echo $_SERVER["PHP_SELF"];?>?raz=pomme">RAZ</a><br />

Nb Poires:<?php echo $_SESSION["poires"];?><br />
<a href="<?php echo $_SERVER["PHP_SELF"];?>?achat=poire">Acheter une poire</a>
<a href="<?php echo $_SERVER["PHP_SELF"];?>?raz=poire">RAZ</a><br />

Nb Bananes:<?php echo $_SESSION["bananes"];?><br />
<a href="<?php echo $_SERVER["PHP_SELF"];?>?achat=banane">Acheter une banane</a>
<a href="<?php echo $_SERVER["PHP_SELF"];?>?raz=banane">RAZ</a><br />

<br/>
<a href="<?php echo $_SERVER["PHP_SELF"];?>?action=destroy">Détruire la session</a><br/>

  • Un simple appel à session_start() et nous pouvons utiliser les variables de session.
  • Nous étudions ensuite les différents cas "destruction de la session", "mis à zero", "ajout d'un fruit". Selon le cas, il faut appeler session_destroy(), supprimer la variable de session ou simplement incrémenter une variable de session.
  • A l'issue de chacun de ces cas, le script est ré-appelé lui-même (avec un appel du type header("Location: $url")). Ceci n'est en aucun cas lié à l'utilisation des sessions mais permet de ne plus avoir les paramètres de l'action qui vient d'avoir lieu dans l'URL, ceci afin de ne pas répéter l'action par exemple en cas de rechargement (rafraichissement) de la page.
Si vous avez une version 4.0.X de PHP vous devrez utiliser le script suivant
Voilà! Ca fonctionne, mais... en fait, plutôt que d'utiliser une variable de session par article nous pouvons utiliser un tableau d'articles comme nous allons le voir immédiatement.

20.2.2.Caddie virtuel (version 2)

Nous l'avons dit, il est possible de stocker des tableaux dans des variables de sessions et nous le prouvons. Vous pouvez tester le nouveau script Version 2. Dont voici le code
<?php
    // Dans ce script nous utilisons les sessions
    session_start();

    // Chargement du caddie
    if (isset($_SESSION["caddie"])) {
        $caddie = $_SESSION["caddie"];
    } else {
        $caddie = array();
    }     
    
    if ($_GET["action"]=="destroy") {
        // on a demander à tout supprimer
        session_destroy();
        header("Location: ".$_SERVER["PHP_SELF"]);
        die();
    }

    if (isset($_GET["raz"])) {
        // On a demandé à reinitialiser une valeur
        switch ($_GET["raz"]) {
            case "pomme":
                unset($caddie["pommes"]);
                break;
            case "poire":
                unset($caddie["poires"]);
                break;
            case "banane":
                unset($caddie["bananes"]);
                break;
            }
        // "sauvegarde" des modifications    
        $_SESSION["caddie"] = $caddie;    
        header("Location: ".$_SERVER["PHP_SELF"]);
        die();
    }
    
    if (isset($_GET["achat"])) {
        // On a demandé à incrémenter une valeur    
        switch ($_GET["achat"]) {
            case "pomme":
                $caddie["pommes"]++;
                 break;
            case "poire":
                $caddie["poires"]++;
                 break;
            case "banane":
                $caddie["bananes"]++;
                 break;
        }
        // "sauvegarde" des modifications    
        $_SESSION["caddie"] = $caddie;
        header("Location: ".$_SERVER["PHP_SELF"]);
        die();
   }     
?>
Nb Pommes:<?php echo $caddie["pommes"];?><br />
<a href="<?php echo $_SERVER["PHP_SELF"];?>?achat=pomme">Acheter une pomme</a>
<a href="<?php echo $_SERVER["PHP_SELF"];?>?raz=pomme">RAZ</a><br />

Nb Poires:<?php echo $caddie["poires"];?><br />
<a href="<?php echo $_SERVER["PHP_SELF"];?>?achat=poire">Acheter une poire</a>
<a href="<?php echo $_SERVER["PHP_SELF"];?>?raz=poire">RAZ</a><br />

Nb Bananes:<?php echo $caddie["bananes"];?><br />
<a href="<?php echo $_SERVER["PHP_SELF"];?>?achat=banane">Acheter une banane</a>
<a href="<?php echo $_SERVER["PHP_SELF"];?>?raz=banane">RAZ</a><br />

<br/>
<a href="<?php echo $_SERVER["PHP_SELF"];?>?action=destroy">Détruire la session</a><br/>

rem
  • Cela ne change pas fondamentalement du script précédent mais il est bien agréable de n'avoir qu'une nombre limité de variables de sessions.