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

PHP & Base de données Discussion :

Enregistrer des données vers MySQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut Enregistrer des données vers MySQL
    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
     
    class School {
     
    	protected $_id;
    	protected $_name;
     
    	protected static $error;
     
    	const MESSAGE_ERROR_ID = 'ID doit être un entier.';
    	const MESSAGE_ERROR_TEXT = 'TEXT doit être une chaîne de caractères.';
    	const MESSAGE_ERROR_DATECREATION = 'DATE doit être au format YYYY-MM-DD.';
    	const MESSAGE_ERROR_TITLE = 'TITRE doit être une chaîne de caractères.';
    	const MESSAGE_ERROR_END = 'L\'objet ne peut pas être créé.';
     
    	public function __construct(array $schools) {
     
    		$this->setId($schools['id']);
    		$this->setName($schools['name']);
     
    		if(!empty(self::$error)) {
     
    			throw new Exception(self::$error . self::MESSAGE_ERROR_END);
    		}
    	}
     
    	public function setError($message) {
     
    		self::$error = $message;
    	}
     
    	public function getError() {
     
    		return self::$error;
    	}
     
    	public function setId($id) {
     
    		if((is_int($id)) AND ($id > 0)) {
     
    			$this->_id = $id;
    		}
    		else {
     
    			$this->setError(self::MESSAGE_ERROR_ID);
    		}
    	}
     
    	public function setName($name) {
     
    		if(is_string($name)) {
     
    			$this->_name = $name;
    		}
    		else {
     
    			$this->setError(self::MESSAGE_ERROR_TEXT);
    		}
    	}
     
    	public function getId() {
     
    		return $this->_id;
    	}
     
    	public function getName() {
     
    		return $this->_name;
    	}
    }
    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
     
    class schoolManager {
     
    	private $_bdd;
     
    	public function __construct($bdd) {
     
    		$this->setDb($bdd);
    	}
     
    	public function setDb(PDO $db) {
     
    		$this->__bdd = $db;
    	}
     
    	public function addSchools(School $school) {
     
    		$query = 'INSERT INTO school (name) VALUES(:name)';
    		$stmnt = $this->__bdd->prepare($query);
    		$stmnt->execute([':name' => htmlspecialchars(($school)->getName())]);
    	}
     
    	public function getSchools($id = '') {
     
    		if(empty($id)) {
     
    			$query = 'SELECT id, name FROM school';
                $stmnt = $this->__bdd->prepare($query);
    		}
            elseif(is_numeric($id)) {
     
    			$query = 'SELECT id, name FROM school WHERE id = :id';
    			$stmnt = $this->__bdd->prepare($query);
    			$stmnt->bindParam(':id', $id);
    		}
     
    		$stmnt->execute();
     
    		while($row = $stmnt->fetch(PDO::FETCH_ASSOC)) {
     
    			$results[] = $row;
    		}
     
    		return $results;
    	}
    }
    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
     
    require('class/School.php');
    require('class/schoolManager.php');
     
    try {
     
    	$bdd = new PDO('mysql:host=localhost;dbname=schools', '10111110', '10111110');
    }
     
    catch(Exception $e) {
     
    	'Erreur de connexion : ' . $e->getMessage();
    }
     
    $manager = new schoolManager($bdd);
     
    $schools_data = array(
     
    	1 => array('id' => 1, 'name' => 'Ecole A'),
    	2 => array('id' => 2, 'name' => 'Ecole B'),
    	3 => array('id' => 3, 'name' => 'Ecole C')
    );
     
    $schools = new School($schools_data);
     
    $manager->addSchools($schools);
     
    $school = $manager->getSchools();
    var_dump($school);
    J'ai une table school avec les champs id, name & je dois enregistrer dans name -> Ecole A Ecole B Ecole C mais j'ai ces messages d'erreurs ->

    - Notice: Undefined index: id in C:\wamp64\www\php-expert\07-devoir-1-refait\class\School.php on line 18
    - Notice: Undefined index: name in C:\wamp64\www\php-expert\07-devoir-1-refait\class\School.php on line 19
    - Fatal error: Uncaught Exception: TEXT doit être une chaîne de caractères.L'objet ne peut pas être créé. in C:\wamp64\www\php-expert\07-devoir-1-refait\class\School.php on line 23
    - Exception: TEXT doit être une chaîne de caractères.L'objet ne peut pas être créé. in C:\wamp64\www\php-expert\07-devoir-1-refait\class\School.php on line 23
    Merci à ceux & celles qui pourraient m'apporter leurs aides. Bon Weekend à tous.

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 507
    Par défaut
    Bonjour,

    Tu passes un tableau multidimensionnel dans le constructeur de school, donc il faut le parcourir avec une boucle :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    public function __construct(array $schools) {
          foreach($schools as $index=>$sc){
              $this->setId($sc['id']);
              $this->setName($sc['name']);
          }
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Merci à toi, j'ai bien quelque chose qui s'enregistre dans la table school, mais seulement l'école C

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 507
    Par défaut
    La solution la plus simple c'est de remettre ton code du constructeur comme il été au début (sans boucle):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class School{
       .....
       public function __construct(array $schools) {
            $this->setId($schools['id']);
            $this->setName($schools['name']);
            if(!empty(self::$error)) {
              throw new Exception(self::$error . self::MESSAGE_ERROR_END);
            }
       }
     
    }
    Et après tu utilises la boucle au moment de l’instanciation de l'objet School :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $schools_data = array(
     1 => array('id' => 1, 'name' => 'Ecole A'),
      2 => array('id' => 2, 'name' => 'Ecole B'),
      3 => array('id' => 3, 'name' => 'Ecole C')
    );
    $manager=new schoolManager($bdd);
     
    /* c'est ici que tu dois utiliser la boucle pour instancier chaque item de $schools_data*/
    foreach($schools_data as $index=>$sc){
    	$school = new School($sc);
    	$manager->addSchools($school);
     
    }
    Après je pense que htmlspecialchars n'a rien à faire ici :$stmnt->execute([':name' => htmlspecialchars(($school)->getName())]);, cette fonction est utilisée lorsqu'on veut sécuriser les données à l'affichage mais pas à l'insertion dans la bd.

    Comme tu peux utiliser la méthode magique __toString() qui permet de retourner une chaîne de caractère personnalisée seulement avec un echo (pas de var_dump() ni print_r() ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class School{
       .......
       .......
       //Méthode magique permet de retourner des informations sur l'objet crée :
       public function __toString(){
          return "id :".$this->_id.' nom :'.$this->_name;  
      }
    }
    Et dans la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach($schools_data as $index=>$sc){
         $school = new School($sc);
         $managerSc->addSchools($school);
         echo $school.'<br />';//ce echo fait appel à __toString() de l'objet.
    }

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Merci bien ça marche, mais petite question, a propos de htmlspecialchars, je ne comprends pas pourquoi tu me dis que c'est à l'affichage. C'est justement pour éviter les injections sql des utilisateurs mal attentionné donc à l'insertion.

    J'aimerais bien une petite explication de ta part.

    Bonne soirée à toi

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 507
    Par défaut
    Ne t'inquiète pas pour la sécurité, comme tu as préparé ta requête d'insertion alors c'est PDO qui s'en occupe.

    Par-contre quand tu as par exemple un <select> ou n'importe élément html, et que tu veux l'alimenter avec les données de la base, là tu dois utiliser htmlspecialchars pour sécuriser les données à l'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $tag="<select>";
    $while($row=$stmt->fetch(PDO::FETCH_ASSOC)){
         $tag.="<option value="...">".htmlspecialchars($row["name"])."</option>";
    }
    $tag.="</select>";
    echo $tag;
    Pour les caractères spéciaux "éèâ...." tu dois définir le jeu de caractères utf-8 dans l'objet PDO ET utiliser les options pour récupérer les exceptions/erreurs en utilisant PDO::ATTR_ERRMODE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $bdd = new PDO('mysql:host=localhost;dbname=schools;charset=UTF-8', '10111110', '10111110', array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $bdd = new PDO('mysql:host=localhost;dbname=schools;charset=UTF-8', '10111110', '10111110',, array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
    Cela n'a pas fonctionner.

  8. #8
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 507
    Par défaut
    il y'a une virgule en trop dans '10111110',, array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION) qu'il faut supprimer.

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Justement, je l'avais supprimer et ça se met des messages d'erreurs.

  10. #10
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 507
    Par défaut
    Quel est le message d'erreur ?

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Erreur de connexion :
    SQLSTATE[HY000] [2019] Unknown character set

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    try {
     
    	$bdd = new PDO('mysql:host=localhost;dbname=schools;charset=UTF-8', '10111110', '10111110',
    		array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)
    	);
    }
     
    catch(Exception $e) {
     
    	die('Erreur de connexion : ' . $e->getMessage());
    }

    SQLSTATE[HY000] [2019] Unknown character set
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    try {
     
    	$bdd = new PDO('mysql:host=localhost;dbname=schools;charset=UTF-8', '10111110', '10111110',
    		array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)
    	);
    }
     
    catch(Exception $e) {
     
    	'Erreur de connexion : ' . $e->getMessage();
    }

    Remarque: Variable non définie: bdd dans C: \ wamp64 \ www \ php-expert \ 07-devoir-1-refait \ index.php sur la ligne 30

    Erreur fatale: TypeError non capturé: l'argument 1 transmis à schoolManager :: setDb () doit être une instance de PDO, donnée nulle, appelée dans C: \ wamp64 \ www \ php-expert \ 07-devoir-1-refait \ class \ schoolManager.php sur la ligne 9 et défini dans C: \ wamp64 \ www \ php-expert \ 07-devoir-1-refait \ class \ schoolManager.php sur la ligne 12

    TypeError: l'argument 1 passé à schoolManager :: setDb () doit être une instance de PDO, donnée nulle, appelée dans C: \ wamp64 \ www \ php-expert \ 07-devoir-1-refait \ class \ schoolManager. php sur la ligne 9 dans C: \ wamp64 \ www \ php-expert \ 07-devoir-1-refait \ class \ schoolManager.php sur la ligne 12

  13. #13
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 507
    Par défaut
    Ah oui, c'était mon erreur, il fallait mettre UTF8 et pas UTF-8.

    Donc si tu supprimes le tiret entre UTF et 8 ça devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $bdd = new PDO('mysql:host=localhost;dbname=schools;charset=UTF8',  '10111110', '10111110',
    		array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)
    );

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Maintenant j'ai ça :

    Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicata du champ 'Ecole A' pour la clef 'name' in C:\wamp64\www\php-expert\07-devoir-1-refait\class\schoolManager.php on line 21
    PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicata du champ 'Ecole A' pour la clef 'name' in C:\wamp64\www\php-expert\07-devoir-1-refait\class\schoolManager.php on line 21

  15. #15
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 507
    Par défaut
    tu mets le champ "name" comme clé unique ou quoi ?

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    oui

  17. #17
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 507
    Par défaut
    Quand tu met une clé unique, cela veut dire qu'il faut pas avoir deux enregistrements ayant la même valeur (le champ "name" dans ton cas), donc pour toi tu ne peux pas enregistrer une Ecole A deux fois dans la table.

    à ton avis c'est utile ? à quoi ça te servirait?

  18. #18
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    Si je mets pas clé unique, quand je faits f5 les trois écoles s'enregistre de nouveau dans la table.

  19. #19
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 507
    Par défaut
    A mon avis, le champ "name" ne doit pas être unique, parce que il est bien possible d'avoir deux écoles avec le même nom mais pas avec la même adresse.
    Donc c'est l'adresse qui doit être unique et pas le nom.

    Concernant le F5 je pense qu'il y'a un moyen pour gérer l'erreur ntegrity constraint violation: 1062 et afficher un message à l'utilisateur.

  20. #20
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2019
    Messages : 101
    Par défaut
    OK merci bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Importer des données vers Mysql workbench
    Par déb_bi dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 23/02/2014, 22h29
  2. Réponses: 0
    Dernier message: 25/01/2014, 14h23
  3. Réponses: 14
    Dernier message: 12/04/2013, 16h23
  4. Comment exporter des données vers MySQL
    Par CinePhil dans le forum Débuter
    Réponses: 4
    Dernier message: 05/06/2012, 18h56
  5. Enregistrer des données dans une table à partir du code
    Par Ragnarok85 dans le forum Access
    Réponses: 4
    Dernier message: 24/01/2007, 13h03

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