Tuto caddie virtuel et DB (sql) - part.2

* Notez que ce tuto est compatible avec php > 4.2 , vous saurez modifier les scripts en fonction de votre version php.
je vous rappelle juste que les variables provenant d'un formulaire en métode 'post', se récupèreront à partir de php > 4.2 de la forme suivante $_POST['variable'] et non plus $variable.

Panier4_2.php == le traitement

Cette page va nous servir pour les différents traitements de notre caddie virtuel (panier), et ne comportera que le minimum d'affichage pour un problème de sécurité.
  1. Enregistrement d'une comande :
  2. L'internaute dans la page précédente à séléctionné une fleur puis une quantité qu'il veut commander, nous allons donc lui mettre cette quantité pour cette fleur dans son caddie (panier).

    Script de l'enregistrement :
    < ? session_start();
    // nous allons enregistrer une commande
    // nous vérifions que le bouton Cder est celui qui a mené a cette page:

    if(isset($_POST['action']) and $_POST['action']=="Cder"){

    $id=$_POST['id']; //id de la fleur

    $qte=$_POST['qte']; // quantité désirée par le client

    if( empty($_SESSION['panier'][$id]) ){//si le panier contenant cette fleur est vide

    $_SESSION['panier'][$id]=$qte; // on enregistre la quantité désirée par le client

    }else{ // si le panier contient déjà cette fleur
    $_SESSION['panier'][$id]+=$qte;// alors on ajoute la quantité à la valeur initiale

    }//on a terminé le traitement.
    //on renvoi l'internaute sur la boutique.
    ?>
    <script="javascript">
    location.replace("panier4_1.php");
    </script>
    ?>
    }

    Explications : Pour réaliser à bien ce caddie (ou panier) nous allons utiliser le système de tableau (= Array).
    Si vous ne maitrisez pas le fonctionnement des tableaux, regardez notre petit tuto sur ce sujet :
    click ici
    Sachant que les sessions acceptent les tableaux nous allons donc en profiter !
    Nous mettons donc notre panier en array:
    $panier[id_de_la_fleur]= quantité désirée.
    nous la passons en variable de session :
    $_SESSION['panier'][$id_de_la_fleur] = Quantité désirée.
    // ATTENTION : $id étant un chiffre, pas de (' ') pour l'encadrer.

    N'oubliez pas de vérifier que le panier de la fleur en question soit vide ou pas, avant d'ajouter la quantité:
    if(empty($_SESSION['panier'][$id]) ){ ==> le panier de cette fleur est vide

    Enfin renvoyer l'internaute sur la page boutique ce qui a également comme gros avantage que ce dernier peut reloader sa page sans risque de doubler l'opération précédente et ainsi de mettre en double la même commande.

  3. Suppression d'une commande :
  4. Pour comprendre cette partie de script, il vous faut tout d'abord regarder la page concernant le Panier : Panier4_3.php,
    puisque les données traitées ici vont provenir de ce Panier.
    Panier4_3.php == le Panier
    Vous l'avez vu ?
    Ok, continuons donc notre script de cette page.
    Script de suppression d'une ou plusieurs commandes :
    //Nous vérifions que l'internaute a cliqué sur Eliminer
    if(isset($_POST['action']) and $_POST['action']=='Eliminer'){
    // vérifions s'il a cliqué mais sans rien cocher
    if(empty($_POST['case']) ){
    //dans ce cas on le renvoi sur la page du caddie.
    ?>
    <script ="Javascript">
    history.go(-1);
    </script>
    < ?
    exit;
    }
    //on va lire le tableau case[] dans une boucle foreach:
    foreach ($_POST['case'] as $delete){
    //on supprime la session corespondante à la fleur:
    unset($_SESSION['panier'][$delete]);
    }//fin foreach
    //on renvoit l'internaute sur la page de caddie.
    ?>
    <script ="Javascript">
    location.replace("Panier4_3.php");
    </script>
    < ?
    exit; }//fin de la suppression

    Explications : Nous avons fait passer les variables dans un tableau case[] depuis la page du caddie, si l'internaute a coché une ou plusieurs cases, nous les retrouverons donc sur cette page, toujours sous forme d'un tableau (array) case[id_de_la_fleur].
    Il nous suffit donc de lire ces données via une boucle foreach.
    Ensuite, il ne restera plus qu'à détruire la session qui corespond au panier de cette fleur, via la syntaxe unset .
    Pour finir on renvoit le client sur la page caddie ainsi modifiée.

  5. Modification de commande(s) :

  6. L'internaute a coché les cases corespondant aux articles qu'il veut modifier.

    Script pour modifications: étape 1 = l'affichage :
    // nous vérifions que l'internaute a bien cliqué sur Changer.
    if(isset($_POST['action']) and $_POST['action']=='Changer'){
    //cas d'erreur de l'internaute :
    if(empty($_POST['case']) ){
    //on le renvoit sur le caddie
    ?>
    <script ="Javascript">
    history.go(-1);
    </script>
    < ?
    exit;
    }
    ?>
    //le formulaire d'affichage des données:
    <form method="POST" action="">
    <?
    require('inc_connect.php');
    foreach($_POST['case'] as $modif){
    $sql="Select* from fleuriste where id='$modif'";
    $req=mysql_query($sql,$connexion)or exit ('Erreur SQL !'.$sql.'<br>'.mysql_error());
    while( $data=mysql_fetch_array($req) ) {
    echo"<b>Produit :</b> <i>".$data['nom']."</i><br>";
    echo"<b>Quantité commandée :</b> <input type='text' name='exqte[$modif]' value='".$_SESSION['panier'][$modif]."' size='2'><hr>";
    }//fin du while
    }//fin du foreach
    mysql_close();
    ?>
    <input type="submit" name="action" value="OK">
    </form>
    < ?
    }//fin des changements ETAPE 1

    Explications :
    Nous avons toujours les cases cochées par l'internaute dans le tableau (array) case[].
    Nous allons donc interroger notre base pour pouvoir afficher le nom des fleurs, et pour cela nous utilisons ce tableau qui nous donne l'ID de la fleur.
    Nous allons parcourir toutes les cases à cocher (cochées) grâce à la boucle foreach et interroger la table sur l'id de la fleur.
    foreach($_POST['case'] as $modif){ [...]
    "Select* from fleuriste where id='$modif'";
    //$modif représentant l'ID de la fleur.
    [...]
    echo"<b>Produit :</b> <i>".$data['nom']."</i><br>";
    Nous avons donc désormais le nom de la fleur, son id, il nous reste à indiquer la quantité dans le panier de cette fleur que l'on met dans un champ texte pour permettre la modification de ce champ :
    echo"<b>Quantité commandée :</b> <input type='text' name='exqte[$modif]' value='".$_SESSION['panier'][$modif]."' size='2'><hr>";

    Notez bien également, le nom que nous avons donné au champ texte :

    name='exqte[$modif]'

    les résultats que nous obtiendrons dans le traitement de ce formulaire se trouverons dans le tableau exqte[] avec comme indice l'id de la fleur, et comme valeur la nouvelle quantité à enregistrée.
    Passons désormais au traitement de ce formulaire :

    Script pour modifications: étape 2 = traitement :
    if(isset($_POST['action']) and $_POST['action']=='OK'){//si l'internaute a bien cliqué sur le bouton OK
    if(empty($_POST['exqte']) ){//cas d'erreur dans le script
    ?>
    <script ="Javascript">
    history.go(-1);
    </script>
    <?
    exit;
    }
    // nous allons utiliser une boucle foreach
    foreach ($_POST['exqte'] as $type =>$nbre){
    if( $nbre==0 OR empty($nbre) ){// si l'internaute à changé la quantité à 0
    unset($_SESSION['panier'][$type]);
    }
    $_SESSION['panier'][$type]=$nbre;
    }//fin du foreach
    ?>
    <script ="Javascript">
    location.replace('Panier4_3.php');
    </script>
    <?
    exit;
    }//fin des changements ETAPE 2
    ?>

    Explications :
    Une seule chose nouvelle dans ce traitement est l'utilisation de la boucle foreach pour un tableau associatif:

    foreach ($_POST['exqte'] as $type =>$nbre){

    Nous récupérons donc l'id de la fleur dans $type et la quantité pour cette fleur dans $nbre.
    En effet, rappellez-vous, $_POST[exqte] est un tableau (array) avec comme indice l'id de la fleur et comme valeur la quantité du panier de cette fleur.
    Notez que nous avons prévu le cas ou l'internaute aurait mis 0 , ou laissé vide le champ, dans ce cas nous supprimons directement le panier de cette fleur (unset) , sinon nous enregistrons la nouvelle valeur ($nbre) dans le panier correspondant à la fleur [$type] :

    $_SESSION['panier'][$type]=$nbre

    A la fin de ce script nous renvoyons l'internaute sur le caddie.



<< Panier4_1.php == la Boutique    Panier4_3.php == le Caddie >>


Si des doutes persistent, des questions spécifiques, des petits problèmes de mise en place, n'hésitez pas à consulter le forum référence en php :
www.AllHtml.com

Tutos:
Cases à cocher   Tronquer un texte    Moteur de recherche    Tableau (Array) et boucles    Caddie virtuel    Calendrier   

Notes:
Notez que de toute façon ces scripts ne sont qu'à titre d'exemples et n'en sont donc que trés partiels, il vous faudra bien-sûr les intégrer dans l'environnement de votre page, de votre site, mais la méthode est là et elle fonctionne.
Autre point important, ces morceaux de scripts notament, lorsqu'il y a connexion à votre base de données, ne font aucune référence à certains problèmes de sécurité.