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 :

Synchroniser une base locale et une base distante


Sujet :

PHP & Base de données

  1. #61
    Membre actif Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Points : 237
    Points
    237
    Par défaut
    Citation Envoyé par Kirkis
    Perso, j'aurais plutôt adopté un truc genre :
    • parcours des tables de la BDD1
      [list:9b2624971e]
    • recherche du nom de la table dans la BDD2
      [list:9b2624971e]
    • si inexistant : créer puis insérer les données
    • si existant : comparer la structure puis les tuples dans les 2 BDD
    [/list:u:9b2624971e][*]parcours des tables de la BDD2
    • comparer les tuples de la table dans les 2 BDD (les structures de tables sont déjà synchronisées)
    [/list:u:9b2624971e]
    En effet je n'ai pas adopté ce système et je vais expliquer pourquoi :
    • - on choisit si on synchronise la structure ou non, cela n'est pas obligatoire
      - si bdd1 est la locale, si les champs sont différents sur une table c'est toujours bdd2 qui aura raison
    Le contenu est roi, optimisé il est empereur...

    Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

    http://www.tethis-interactive.com

  2. #62
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Avec ma proposition, tu n'es pas obligé de comparer la structure. Tu peux mettre cette comparaison dans une conditionnelle (qui dépend du choix utilisateur).
    Si BDD1 a toujours raison, alors il te suffit de le prendre en compte dans la comparaison de structure (si elle a lieu).

    Rien ne t'empêche d'adopter ce que je t'ai proposé ^_^

  3. #63
    Membre actif Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Points : 237
    Points
    237
    Par défaut
    en fait je vais garder ma solution meme si la tienne est bonne...

    je compare bdd1 et bdd2 j'ajoute les modifications dans bdd2, je fais un dump de bdd2, je drop bdd1 et je recrée bdd1 avec le dump de bdd2
    Le contenu est roi, optimisé il est empereur...

    Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

    http://www.tethis-interactive.com

  4. #64
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Là pour le coup, ce n'est pas super optimisé :/
    Mais bon, c'est efficace et pas prise de tête ^^

  5. #65
    Membre actif Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Points : 237
    Points
    237
    Par défaut
    Citation Envoyé par Kirkis
    Mais bon, c'est efficace et pas prise de tête ^^
    Bien pour ca que je l'ai mis en place :p
    Le contenu est roi, optimisé il est empereur...

    Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

    http://www.tethis-interactive.com

  6. #66
    Membre actif Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Points : 237
    Points
    237
    Par défaut
    Ca commence a prendre forme

    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
    80
    81
    82
     
    <?php
    //compare les deux bases et renvoye une chaine contenant le dump de la base synchronisée
    //on choisit si on veut synchronisé la structure et si on veut synchroniser les données
     
    function synchronisation($base,$base_compare, $donnees = false,$structure = false){
     
    	$dump = null;
     
    	if($structure == true){
    		//traitement des structure de tables
     
    		$liste_tables_base = mysql_list_tables($base);
    		$liste_tables_base_compare = mysql_list_tables($base_compare);
     
    		//je prends l'élément de la premiere base et je regarde si il est dans la deuxième
    		for($i=0;$i<mysql_num_rows($liste_tables_base);$i++){
    			$egale = false;
    			for($j=0;$j<mysql_num_rows($liste_tables_base_compare);$j++){
    				if(mysql_tablename($liste_tables_base, $i) == mysql_tablename($liste_tables_base_compare, $j)){
    					$egale = true;
    					$num = $j;
    					break;
    				}
    			}
    			if($egale == false){
    				//la table n'existe pas dans les deux bases, je la crée donc dans $base_compare
    				mysql_selectdb($base);//selectionne la base
    				$create= mysql_query("SHOW CREATE TABLE ".mysql_tablename($liste_tables_base, $i)) or die('ERREUR : '.mysql_error());
    				$tableau = mysql_fetch_array($create);
    				$tableau[1] .= ";";
    				mysql_selectdb($base_compare);//selectionne la base
    				mysql_query($tableau[1]) or die('ERREUR : '.mysql_error());
    			}		
    		}
    	}
     
    	if($structure == true){
    		//traitement des données de tables
    		$liste_tables_base = mysql_list_tables($base);
    		for($i=0;$i<mysql_num_rows($liste_tables_base);$i++){
    			$table_name = mysql_tablename($liste_tables_base, $i);
    			mysql_selectdb($base);//selectionne la base
    			$query = "SELECT * FROM ".$table_name;
    			$result = mysql_query($query) or die('ERREUR : '.mysql_error()); 
     
    			mysql_selectdb($base_compare);//selectionne la base				
    			$query1 = "SHOW COLUMNS FROM ".$table_name;
    			$result1 = mysql_query($query1);
    			$nbr_champ = mysql_num_rows($result1);
    			unset($champ);
    			while($row = mysql_fetch_array($result1)) {
    				$champ[] = $row['Field'];
    			} 
     
    			while($data = mysql_fetch_array($result)){					
     
    				$query2 = "SELECT * FROM ".$table_name." WHERE ".$champ[0]." = ".$data[0];
    				$result2 = mysql_query($query2) or die('ERREUR : '.mysql_error());
     
    				if(mysql_num_rows($result2) == 0){
    					//si ca ne renvoye rien c'est que la ligne n'est pas dans $base_compare					
    					$query3 = "INSERT INTO ".$table_name." VALUES ('".addslashes($data[0])."'";
    					for($j=1;$j<$nbr_champ;$j++){
    						$query3 .= ",'".addslashes($data[$j])."'";
    					}
    					$query3 .= ")";
    					echo $query3.'<br>';
    					mysql_query($query3) or die('ERREUR : '.mysql_error());
    				}
    				else{
    					//TODO
    					//si ca renvoye quelque chose c'est que l'enregistrement est déjà dans $base_compare, il faut vérifier que c'est le même.
    				}
    			}
    		}
     
    	}
     
    	return $dump;
    }
    ?>
    Le contenu est roi, optimisé il est empereur...

    Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

    http://www.tethis-interactive.com

  7. #67
    Membre actif Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Points : 237
    Points
    237
    Par défaut
    Je ne sais pas trop comment vérifier si les champs sont égaux au cas ou le tuple est dans les deux bases (c'est la dernière partie du code de la fonction ci-dessous).

    Si quelqu'un peut m'aider à compléter mon code ou me donner quelques pistes, parce que je commence à être un peu perdu dans mes boucles là...même si c'est moi qui ai développé la fonction dans son intégralité...ca sent la fin de journée, mon cerveau s'embrouille...

    Faites un copier-coler du code dans votre éditeur favori celà sera plus lisible et en couleur parce que là j'avoue que même dans des balises code ca commence a devenir illisible...

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <?php
    require('librairie/dump.php');
    //compare les deux bases et renvoye une chaine contenant le dump de la base synchronisée
    //on choisit si on veut synchronisé la structure et si on veut synchroniser les données
     
    function synchronisation($server,$login,$password,$base,$base_compare, $donnees = false,$structure = false){
     
    	$dump = null;
     
    	if($structure == true){
    		//traitement des structure de tables
     
    		$liste_tables_base = mysql_list_tables($base);
    		$liste_tables_base_compare = mysql_list_tables($base_compare);
     
    		//je prends l'élément de la premiere base et je regarde si il est dans la deuxième
    		for($i=0;$i<mysql_num_rows($liste_tables_base);$i++){
    			$egale = false;
    			for($j=0;$j<mysql_num_rows($liste_tables_base_compare);$j++){
    				if(mysql_tablename($liste_tables_base, $i) == mysql_tablename($liste_tables_base_compare, $j)){
    					$egale = true;
    					$num = $j;
    					break;
    				}
    			}
     
    			if($egale == false){
    				//la table n'existe pas dans les deux bases, je la crée donc dans $base_compare
    				mysql_selectdb($base);//selectionne la base
    				$create= mysql_query("SHOW CREATE TABLE ".mysql_tablename($liste_tables_base, $i)) or die('ERREUR : '.mysql_error());//recupere la requete de création de la table
    				$tableau = mysql_fetch_array($create);
    				$tableau[1] .= ";";
    				mysql_selectdb($base_compare);//selectionne la base
    				mysql_query($tableau[1]) or die('ERREUR : '.mysql_error());
    			}		
    		}
    	}
     
    	if($structure == true){
    		//traitement des données de tables
     
    		$liste_tables_base = mysql_list_tables($base);
    		for($i=0;$i<mysql_num_rows($liste_tables_base);$i++){
     
    			$table_name = mysql_tablename($liste_tables_base, $i);
     
    			mysql_selectdb($base);//selectionne la base
     
    			$query = "SELECT * FROM ".$table_name;//recupere les données dans $base
    			$result = mysql_query($query) or die('ERREUR : '.mysql_error()); 
     
    			mysql_selectdb($base_compare);//selectionne la base	
     
    			$query1 = "SHOW COLUMNS FROM ".$table_name;
    			$result1 = mysql_query($query1);
    			$nbr_champ = mysql_num_rows($result1);
    			unset($champ);
    			while($row = mysql_fetch_array($result1)) {
    				$champ[] = $row['Field'];//recupere le nom des champs
    			} 
     
    			while($data = mysql_fetch_array($result)){					
     
    				$query2 = "SELECT * FROM ".$table_name." WHERE ".$champ[0]." = ".$data[0];//cherche la ligne de $base dans $base_compare
    				$result2 = mysql_query($query2) or die('ERREUR : '.mysql_error());
     
    				if(mysql_num_rows($result2) == 0){
    					//si ca ne renvoye rien c'est que la ligne n'est pas dans $base_compare	
    					//création de la requete d'insertion
    					$query3 = "INSERT INTO ".$table_name." VALUES ('".addslashes($data[0])."'";
    					for($j=1;$j<$nbr_champ;$j++){
    						$query3 .= ",'".addslashes($data[$j])."'";
    					}
    					$query3 .= ")";
    					//fin de création de la requete
    					mysql_query($query3) or die('ERREUR : '.mysql_error());
    				}
    				//si ca renvoye quelque chose c'est que l'enregistrement est déjà dans $base_compare, il faut vérifier que c'est le même.
    				//les tables ou la base local a raison en cas de modification
    				elseif($table_name == 'address_book' || $table_name == 'customers' || $table_name == 'customers_info' ||
    						$table_name == 'orders' || $table_name == 'orders_products' || 
    						$table_name == 'orders_products_attribute' || $table_name == 'products_groups'){
     
    					//comparer si les valeurs des champs sont égales
    						//si oui on fait rien
    						//si non on fait un update sur $bdd_compare
    				}
    			}
    		}
    	}
    	$dump = mysql_sauv($server,$login,$password,$base_compare);
    	return $dump;
    }
    ?>
    Le contenu est roi, optimisé il est empereur...

    Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

    http://www.tethis-interactive.com

  8. #68
    Membre actif Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Points : 237
    Points
    237
    Par défaut
    Ma fonction en découragerait-il plus d'un ?

    remarquaot, je le comprends tout a fait, moi aussi elle me décourage par moment
    Le contenu est roi, optimisé il est empereur...

    Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

    http://www.tethis-interactive.com

  9. #69
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    ce qui me décourage, c'est que je vais devoir faire un programme de synchronisation de 2 bases de données (MYSQL et ACCESS).... Je me dis que j'ai de la chance de pas avoir à synchroniser les structures etant données qu'elles sont différentes d'une base a l'autre

    Ca me fait peur tout ca

  10. #70
    Membre actif Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Points : 237
    Points
    237
    Par défaut
    dans ton cas regarde si tu gagnerais pas tu temps a faire un dump en xml ou en csv et a comparer les deux fichiers textes que tu obtient en les parcourant...
    Le contenu est roi, optimisé il est empereur...

    Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

    http://www.tethis-interactive.com

  11. #71
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Une approche serait de concaténer tous les champs du tuple et de comparer comme une brute, non ?

  12. #72
    Membre actif Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Points : 237
    Points
    237
    Par défaut
    tu parles pour qui kirkis la ?
    Le contenu est roi, optimisé il est empereur...

    Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

    http://www.tethis-interactive.com

  13. #73
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    À toi vu qu'il n'y a que nous ici ^_^
    Sion_Sempai n'était que de passage pour te plaindre, du haut de sa grande empathie

  14. #74
    Membre actif Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Points : 237
    Points
    237
    Par défaut
    Pour ma part j'ai terminé et celà fonctionne je vous metterais tout mon code dès que j'aurais le temps...
    Le contenu est roi, optimisé il est empereur...

    Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

    http://www.tethis-interactive.com

  15. #75
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    Citation Envoyé par Kirkis
    À toi vu qu'il n'y a que nous ici ^_^
    Sion_Sempai n'était que de passage pour te plaindre, du haut de sa grande empathie


    Je suis pas venu LE plaindre, mais ME plaindre
    d'autant que ce que je vais devoir faire ne sera peut-etre pas faisable en PHP puisque ca devra tourner comme un service windows

  16. #76
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    salut,

    je suis interessé par ton script, mais j'ai quelques questions :

    1)
    tu fais appelle a dump.php, que contient t'il ? tes login pass et nom de bdd ?

    2)
    ce script tu le met sur le serveur distant ?

    3) pour te connectersur le le serveur "local" tu es obligé d'ouvrir le port 3306 ?
    4) tu mets en parametre jsute un login et pass, ce st les memes sur les 2 serveurs alors c ca ?

    merci d'avance

  17. #77
    Membre actif Avatar de BenoitDenis
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    536
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2005
    Messages : 536
    Points : 237
    Points
    237
    Par défaut
    le fichier dump je l'ai mis un peu avant regarde

    je n'ouvre aucun port

    le pass et login que je passe au dump.php (qui est sur le distant) n'est pas le meme que le serveur, c'est juste pour éviter que quelqu'un tape cette url dans son navigateur et récupére le dump de la base...

    Des que j'aurais le temps j'essayerais de détailler cela...
    Le contenu est roi, optimisé il est empereur...

    Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent.

    http://www.tethis-interactive.com

  18. #78
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 273
    Points : 322
    Points
    322
    Par défaut
    salut, désolé mais j'ai pas lu les 6 pages
    simplement, si j'ai bien suivi, tu veux importer ton fichier sql local dans la base distante?

    alors il existe un script php que j'ai utilisé pour remplir une base avec un ficher sql de 250Mo, donc qui marche très bien: tu le trouverra ici

    Il te suffit de mettre ce fichier sur ton serveur par ftp, après lui avoir donné les renseignements de connexion à la base, puis mettere ton fichier .sql à coté (de préférence les 2 dans un meme répertoire)

    Ensuite tu lance et il importe tout (en exécutant les requetes par paquets pour ne pas surcharger le serveur)

Discussions similaires

  1. Choix entre une base local ou la base distante
    Par bm10 dans le forum WinDev
    Réponses: 1
    Dernier message: 23/01/2015, 08h08
  2. Réponses: 82
    Dernier message: 05/02/2011, 14h34
  3. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  4. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24
  5. mise à jour d'une BDD locale sur un serveur distant
    Par jive dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 22/08/2005, 21h26

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