IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

class commande php5


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut class commande php5
    Bonsoir,

    Voila je créer un site e-commerce avec un magazine phpsolutions il m'on dit de créer une classe utilisateurs, classe produit, classe catégorie, classe commande, classe commande-produit.

    Les 3 premières ça marche très bien, mais je ne comprends pas la classe commande et commande-produit :

    Voici l'extrait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Afin de créer un panier, nous allons utiliser la classe order, créée
    Auparavant, qui stocke les informations sur les commandes. 
     
    En réalité, nous n’utiliserons que le champ orderproducts, qui est un tableau
    des objets commandés. 
     
    Afin d’ajouter un nouveau produit au panier,
    nous avons créé une nouvelle méthode : addproduct(). 
     
    Elle prend 2 paramètres : ID du produit ajouté et sa quantité.
    Lorsqu’un client fait une commande, il suffit de compléter l’objet
    avec les données de la commande et d’appeler la méthode add() pour
    Ajouter la commande à la base de données. 
     
    Nous pouvons le faire bien
    Évidemment si le client est connecté. Sinon, nous le redirigeons vers
    une page appropriée.
    Chaque classe comportant pour l'instant un fonction pour charger, une pour ajouter, supprimer, modifier.

    voila leur appel pour le panier si ca peut aider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    <?php
    include 'config.php';
    //si un objet n'a pas été créé auparavant dans le panier :
    if(!isset($ _ SESSION['order']))
    {
    $ _ SESSION['order'] = new order();
    }
    //si le nombre de produits achetés n'a pas été renseigné, nous affichons le
    formulaire.
    if($ _ POST['amount']!='')
    {
    //nous ajoutons un produit
    $ _ SESSION['order']->addproduct($ _ POST['productid'], $ _ POST['amount']);
    header("location:list.php");
    exit;
    }e
    lse
    {
    ?>
    <form method="POST">
    <input type="hidden" name="productid" value="<?php echo $ _
    GET['productid'];?>">
    Je souhaite acheter <input type="text" name="amount" value="1">
    pièces.<br>
    <input type="submit" value="Ajouter au panier">
    </form>
    <?php
    } ?>
    moi j’ai compris qu'un champ orderproducts est un tableau des objets commander, addproducts() prend 2 paramètres idprod et qte.

    Mais comment font-ils leur tableau d objet et leur fonction addproducts.
    Merci.

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    mais comment font-il leur tableau d objet et leur fonction addproducts.
    Perso, je n'est pas connaissance de cet article sur phpsolution, mais ne donne t'ils pas le code de cette méthode order::addproduct() ?

    Comme ça, je dirais qu'au bout ça ajoute le produit dans la session, qui d'ailleurs est à la fois une variable de session (order) et un Objet (order toujours).
    Le tableau serait :
    $_SESSION['order']['productid']['amount']
    Ou alors :
    $_SESSION['order'][0]['productid']['amount']

    En gros, ça donnerait un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class order {
        public function addproduct($productid, $amount) {
            $_SESSION['order'][$productid] = array('amount' => $amount);
        }
     
        // Ou alors
        public function addproduct($productid, $amount) {
            $_SESSION['order'][] = array('productid' => $productid,
                                         'amount' => $amount);
        }
    }
    A coté de ça, j'ai l'impression que le panier et la commande serait considéré comme la même chose, or, j'estime que c'est 2 aspects totalement différent, rien avoir même, pour ma part, un panier n'est pas une commande.

    En gros, que ça donne une classe panier (en Anglais c'est basket ou cart), qui donc gérerait uniquement le panier, et une classe commande (order) pour gérer une commande.
    M'enfin, je dis ça comme ça.

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    Bonjour,
    merci pour ton aide non malheureusement il n'aide pas la fonction order::addproduct(), voici les indications qu’il me donne de plus:

    Quarante cinquième minutes
    – panier
    L’un des points les plus caractéristiques dans les boutiques Internet c’est sans aucun doute le panier.

    Les paniers contiendront les informations sur les produits que le client a décidé d’acheter (aussi bien sur le produit que sur la quantité achetée).

    Créer correctement un panier est très important sinon les achats d’une autre personne peuvent se retrouver dans le panier ou disparaître.

    Le principe de base est donc très simple : il faut assurer que chaque client a son panier individuel.

    PHP propose depuis un moment un mécanisme dépourvu des défauts susmentionnés. Il s’agit bien évidemment des sessions dont la règle de fonctionnement combine les principes des méthodes susmentionnées. Un identifiant unique de session (PHPSESSID) est généré pour chaque utilisateur.

    Il permet d’attribuer les fichiers aux utilisateurs concrets. Cet identifiant est envoyé entre les sous-pages à l’aide des cookies ou - si le navigateur ne les supportent pas – en ajoutant le paramètre à l’adresse.

    Mais la meilleure chose dans ce mécanisme est que nous n’avons pas à nous préoccuper des détails de l’implémentation du mécanisme de session :
    Tout est fait par PHP.

    Afin de créer un panier, nous allons utiliser la classe order, créée auparavant, qui stocke les informations sur les commandes. En réalité, nous n’utiliserons que le champ orderproducts, qui est un tableau des objets commandés.

    Afin d’ajouter un nouveau produit au panier, nous avons créé une nouvelle méthode : addproduct(). Elle prend 2 paramètres : ID du produit ajouté et sa quantité.

    Lorsqu’un client fait une commande, il suffit de compléter l’objet avec les données de la commande et d’appeler la méthode add() pour ajouter la commande à la base de données. Nous pouvons le faire bien évidemment si le client est connecté.

    Sinon, nous le redirigeons vers une page appropriée. Le Listing 8 présente l’ensemble du processus de la commande.
    listing 8:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    include 'config.php';
    //si un objet n'a pas été créé auparavant dans le panier :
    if(!isset($ _ SESSION['order']))
    {
    $ _ SESSION['order'] = new order();
    }
    //si le nombre de produits achetés n'a pas été renseigné, nous affichons le
    formulaire.
    if($ _ POST['amount']!='')
    {
    //nous ajoutons un produit
    $ _ SESSION['order']->addproduct($ _ POST['productid'], $ _ POST['amount']);
    header("location:list.php");
    exit;
    }e
    lse
    {
    ?>
    <form method="POST">
    <input type="hidden" name="productid" value="<?php echo $ _
    GET['productid'];?>">
    Je souhaite acheter <input type="text" name="amount" value="1">
    pièces.<br>
    <input type="submit" value="Ajouter au panier">
    </form>
    <?php
    } ?>
    j'ai mis 2 images en pièce jointe : base et la Structure de la classe order.

    Merci pour ton aide je sais que c’est difficile d'aider quand c’est comme ça. Donc la je pense t'avoir donner les même données que moi.
    Images attachées Images attachées   

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Ca me parais toujours aussi anormal de considérer un panier comme une commande.

    D'ailleurs, si on regarde la structure de ta Bdd, ça cause problème, car cette table order attend un user_id, et une date de commande.
    Si la personne n'a pas créée de compte client ou si elle n'est pas identifiée, ça veut dire que cette table sera rempliera que partiellement.
    Plus concrètement, il faudra définir par défaut NULL sur ce champ user_id, même chose pour la date.
    Accepter des valeurs null, surtout pour ce genre de données, c'est pas forcément la meilleure chose à faire.

    Pour ma part, une commande se doit être liée à une personne, et avoir une date (et surement bien d'autres infos en plus, que l'étape du panier ne le permettra pas).

    Tout ceci reste néanmoins des remarques.


    Mais qu'est ce qui te pose problème pour ajouter un produit dans le panier ?
    Est ce que tu as essayé quelque chose, qu'est ce qu'il coince ?

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    merci de tes remarques tres interessante en fait j 'ai fait donc ces class order:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    <?php
    class orders
    {
    	public  $order_id;
    	public  $order_userid;
    	public  $order_date;
    	public  $order_status;
    	public  $order_sdate;
    	public $orderProduct;
    	private $error;
    	/*constructeur*/
    	function __construct($id='')
    	{
    		if($id!='')
    		$this->load($id);
    	}
    	/*chargement*/
    	function load($id)
    	{
    	$bdd = new BDD();
     
    		if($bdd ->connect()!=false)
    		{
    			$value = mysql_fetch_array($db, "SELECT *
    FROM orders WHERE order_id = '".$id."'");
    			if(mysql_num_rows($value) == 0)
    			{
    				$this->error = "La commande avec l'id
    pr?cis? n'existe pas !";
    				return false;
    			}
    			$this->order_id = $value['order_id'];
    			$this->order_userid = $value['order_userid'];
    			$this->order_date = $value['order_date'];
    			$this->order_status = $value['order_status'];
    			$this->order_sdate = $value['order_sdate'];
    			$this->orderProduct = $value['orderProduct'];
    			$this->error='';
    			mysql_close($db);
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
     
    	public function addproduct($orderProduct) 
    	{
     
            $_SESSION['order'][$productid] = array('amount' => $amount);
     
     
    	}
    	function validate()
    	{
    		//nous vous laissons le soin de r?aliser la fonction validate.
    		//la fonction doit retourner false lorsque tous les champs demand?s n'ont pas ?t? renseign?s
    		return true;
    	}
    	function geterror()
    	{
    		return $this->error;
    	}
    }
    ?>
    et class orderproduct.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    <?php
     
    class orders
    {
    	public  $product_id;
    	public  $order_id;
    	public  $op_amount;
    	public  $order;
    	private $error;
    	/*constructeur*/
    	function __construct($id='')
    	{
    		if($id!='')
    		$this->load($id);
    	}
    	/*chargement*/
    	function load($id)
    	{
    	$bdd = new BDD();
     
    		if($bdd ->connect()!=false)
    		{
    			$value = mysql_fetch_array($db, "SELECT *
    FROM order_products WHERE product_id = '".$id."'");
    			if(mysql_num_rows($value) == 0)
    			{
    				$this->error = "La commande avec l'id
    pr?cis? n'existe pas !";
    				return false;
    			}
    			$this->product_id = $value['product_id'];
    			$this->order_id = $value['order_id'];
    			$this->op_amount = $value['op_amount'];
    			$this->order = $value['order'];
     
    			$this->error='';
    			mysql_close($db);
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
     
    	function add($product_id,$order_id,$op_amount,$order)
    	{
    		$this->product_id = mysql_real_escape_string($product_id);
    		$this->order_id = mysql_real_escape_string($order_id);
    		$this->op_amount = mysql_real_escape_string($op_amount);
    		$this->order = mysql_real_escape_string($order);
     
    		if($this->validate())
    		{
    			if($bdd ->connect()!=false)
    			{
    				mysql_fetch_array($db, "INSERT INTO order_products (product_id,order_id,op_amount) 
    				VALUES (NULL, ".$this->product_id.",".$this->order_id.",".$this->op_amount.",".$this->order.");");
    				mysql_close($db);
    				return true;
    			}
    			else
    			{
    				return false;
    			}
    		}
    	}
    	function validate()
    	{
    		//nous vous laissons le soin de r?aliser la fonction validate.
    		//la fonction doit retourner false lorsque tous les champs demand?s n'ont pas ?t? renseign?s
    		return true;
    	}
    	function geterror()
    	{
    		return $this->error;
    	}
    }
    ?>[
    mais je pense que j ai tort dans la partie load des deux et la fonction addproduct(), de plus j'ai une erreur j'ai créer cette page comme il me l'on indiquer details.php, qui doit permettre d'afficher les details du produit selectionner, elle marche tres bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    //nous chargeons la longueur de l'identifiant ID du produit
    $length = strlen(trim($_GET['productid']));
    //nous ouvrons le répertoire images
    if($dir = opendir('images/'))
    {
    	//nous chargeons le nom de tous les fichiers
    	while (($UnFichier=readdir($dir)) <> "")
    	{
    		//nous comparons les premiers caractères
    		if (substr($UnFichier, 0, ($length+1)) == trim($_GET['productid'])."_")
    		{
    			if (($UnFichier <> ".") && ($UnFichier <> ".."))
    			echo '<img src="images/'.$UnFichier.'"> ', "<BR>";
    		}
     
    	}
     
    }
     
    closedir($dir);
     echo '<a href="panier2.php">mETTRE DANS LE panier</a>';
     
     
     
    ?>
    mais c'est la page suivante panier2.php du script qu'il m'on donner j'ai une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined index: amount in C:\wamp\www\e-commerceversionphpsolutions\panier.php on line 9

    l'erreur doit venir du faite que cette session n'existe pas a ce moment la mais la page d'avant on ne m'a rien indiquer j'ai juste rajouter un bouton ajouter au panier car il n'avait rien mit eux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    include 'config/config.php';
    //si un objet n'a pas été créé auparavant dans le panier :
    if(!isset($_SESSION['order']))
    {
    $_SESSION['order'] = new orders();
    }
    //si le nombre de produits achetés n'a pas été renseigné, nous affichons le formulaire.
    if($_POST['amount']!='')
    {
    //nous ajoutons un produit
    $_SESSION['order']->addproduct($_POST['productid'], $_POST['amount']);
    header("location:list.php");
    exit;
    }
    else
    {
    ?>
    <form method="POST">
    <input type="hidden" name="productid" value="<?php echo $_GET['productid'];?>">
    Je souhaite acheter <input type="text" name="amount" value="1">
    pièces.<br>
    <input type="submit" value="Ajouter au panier">
    </form>
    <?php
    } ?>

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    A mon sens, il serait plus simple de tout gérer dans un seul Objet Order au lieu de faire ça dans 2 classes différentes.
    La raison, c'est qu'ici il n'y a pas juste des collections d'Objets produits à gérer, mais il faut aussi être synchro aussi bien coté Objet (chaque produit) que coté Bdd, car le panier sera aussi dans la Bdd si un client est identifié.

    En somme, je dirais que, commence d'abord par faire simple avant de foncer dans la complexité avec plusieurs Objets.
    De toute manière, les produits seront dans la session, donc dans un tableau, et parcourir un tableau, il n'y a pas plus simple.
    Faut pas oublier aussi qu'au bout, la session sera sérialisée, donc ça débouche sur une chaine de caractère.


    Pour l'erreur sur amount, as tu fais un print_r($_POST) juste avant d'appeler addproduct() par exemple pour constater ce qu'il contient.
    Mais comme ça, prend soin de mettre l'attribut action (voir un nom, attribut name) dans la balise <form>.
    Puis respecte le XHTML en faisant ainsi : <input /> (et non <input >), idem pour <br />.
    C'est bien souvent un HTML pas très zen qui débouche sur des erreurs tordues.

  7. #7
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    merci de tes conseils je pense donc que je vais partir sur une seule class panier, j'ai plusieur code que j'ai trouver:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://jmolline.free.fr/tutos/tuto_panier.html
    ou celui de developpez

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://jcrozier.developpez.com/articles/web/panier/
    ca m'aiderai car j'aimerai savoir lequel est la solution la plus stable.

    merci.


  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    C'est bien de chercher des support pour mettre en place ce que tu veux faire, mais on voit bien dans ta démarche tu ne sais pas trop dans quelle direction il faut aller.

    Ce qui me dérange le plus, c'est que tu te lance dans la programmation avant même de savoir ce que tu as besoin.
    En gros, c'est un peu comme si on montait les murs d'une maison sans avoir un plan.
    A mon avis, tu vas perdre un temps fou à créer ainsi un site e-commerce.


    Pourquoi ne pas prendre le temps de faire un état des lieux sur les Softs existants (Open Source, voir payant), et tenter de détecter celui qui s'approcherait au mieux à ce que tu recherche.
    Des solutions, il y en a tout de même, du plus simple (voir basique) à l'artillerie lourde (usine à gaz), et entre les 2, une fulltitude de projets qui à mon sens sont accessibles tous ceux qui ont les bases en programmation, donc il sera possible d'y apporter sa touche personnelle.

  9. #9
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    merci de tes conseils cela m'avance réellement c est vrai que je suis un peu perdu avec le php5.

    J'ai decider de reprendre un projet initiale de site e-commerce que j'avais un peu approcher d'un open source, je m'etais arréter en plein dedans car une personne m'a dit que j'avais mal comprit le language php5.

    pourrai-je t envoyer les bases de ce site et pourrai tu me conseiller sur mes erreurs, je sais que tu doit etre occuper, et je comprend si tu n'a pas le temps.


    merci encore, avoir quelqu'un a qui parler de ces projets fait du bien.

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Je reconnais d'avoir tout d'un dérivé du sujet, du problème, mais le but était non pas de dire que tu rencontre des problèmes avec Php, car on en a tous à mon avis, mais le truc était que tu puisse obtenir quelque chose de fonctionnel, et surtout, une vrai base de travail, et de plus, rapidement, je dirais même, immédiatement.


    Faire tout de A à Z, pourquoi pas, mais le domaine ici est tout de même très particulier.
    Les 2 plus gros inconvénients s'y trouvent :
    Le volume de travail que ça représente, du coup, dans combien de temps ça sera opérationnel ?
    Puis la complexité.

    Mon avis la dessus est clair, il vaut mieux 100 fois partir sur quelque chose d'existant, qui lui aura été pensé, conçu et programmé par plusieurs personnes, et de plus, utilisé par d'autres.
    Le fait d'adopter un Soft, ça apporte énormément d'avantages, ne serait-ce de ne plus être seul face aux éventuels problèmes.
    Disons que si c'est un projet Open Source qu'on adopte, c'est toute une équipe qu'on rejoint par la même occasion, c'est pas un détail.
    Le plus compliqué ici sera de faire le choix.


    Enfin, ça n'est que mon avis, mais je crains qu'en faisant tout toi même que tu te retrouve bien seul faces aux problèmes.
    C'est le cas actuellement de toute manière.

Discussions similaires

  1. [POO] Réalisation de classe sous PHP5 pour plus de lisibilité
    Par ChriGoLioNaDor dans le forum Langage
    Réponses: 4
    Dernier message: 19/02/2007, 20h42
  2. [POO] Classe abstraite PHP5 et variables membres
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 07/06/2006, 02h27
  3. [POO] Débutant en POO, class mysql php5
    Par ouafouaf dans le forum Langage
    Réponses: 9
    Dernier message: 06/02/2006, 10h21
  4. [POO] Classe en PHP5
    Par neptune dans le forum Langage
    Réponses: 5
    Dernier message: 01/09/2005, 18h55
  5. Réponses: 3
    Dernier message: 19/05/2005, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo