Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

AFFICHER LA LISTE DES MEMBRES CONNECTÉS


Information sur la source

Catégorie :Divers Classé sous : membres, connectés, liste, visiteurs, afficher Niveau : Initié Date de création : 10/12/2006 Vu : 8 895

Note :
1,5 / 10 - par 4 personnes
1,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

Description

Je cherchais depuis deux jours comment afficher la liste des membres connectés sur mon site. J'ai enfiin trouvé la solution optimale.
La plupart des codes que j'ai trouvé sur le Net ont besoin de créer une table qui stocke la liste des utilisateurs connectés, ou pire, des fichiers texte qui stockent ces infos.
De plus il faut sans cesse mettre cette table ou ces fichiers texte à jour.
Et pour finir, les codes trouvés faisaient au moins 50 lignes !

Alors un sentiment de révolte s'est emparé de moi, et j'ai mis au point un système vraiment bête (ie EXTREMEMENT simple) que je n'ai vu pour l'instant nulle part.

Admettons que vous ayez une table cotenant la liste des membres inscrits sur votre site, du style
CREATE TABLE `registered_users` (
  `ID` int(10) NOT NULL auto_increment,
  `pseudo` text collate latin1_general_ci NOT NULL,
  `password` text collate latin1_general_ci NOT NULL,
) ENGINE=MyISAM;
J'ai supprimé les autres champs qui sont inutiles ici.

Il suffit de rajouter une ligne que j'ai appelé lastquerytime, qui représente la date récupérée par time()(donc un BIG INT) de la dernière requête exécutée par un utilisateur.

  `lastquerytime` bigint(20) NOT NULL,

Chaque fois qu'un utilisateur connecté et loggué affichera une page, lastquerytime prendra la valeur de time(), c'est-à-dire l'heure actuelle, en secondes.
Il suffit de n'afficher que les utilisateurs dont lastquerytime a moins de 5 minutes... c'est-à-dire les utilisateurs qui ont affiché une page il y a moins de 5 minutes.
Et ce code n'est pas un simple compteur, puisqu'il affiche la liste des pseudos.
 

Source

  • //Mon code (Ctrl+A, Ctrl+C et Ctrl+V) dans un fichier connected_users.php
  • Connected :<br>
  • <?
  • include("db_connect.php"); //Infos de connexion et connexion à la bdd
  • if ($_SESSION['pseudo'] != '') //Le geek est loggué ?
  • {
  • $pseud = $_SESSION['pseudo'];
  • $query = "SELECT * FROM registered_users WHERE pseudo='$pseudo'"; //On récupère ses infos dans la bdd
  • $result = mysql_query($query);
  • if ($result) //On a ses infos ?
  • {
  • $lastquerytime = time(); //Il a exécuté ce code MAINTENANT
  • $query = "UPDATE registered_users SET lastquerytime='$lastquerytime' WHERE pseudo='$pseudo'"; //On l'écrit dans la table
  • mysql_query($query);
  • }
  • }
  • $fiveminago = time() - 5 * 60; //5*60s=5min de délai, mettez ce que vous voulez
  • $query = "SELECT pseudo FROM registered_users WHERE lastquerytime>'$fiveminago'"; //Tous ceux qui ont fait un truc y a moins de 5min
  • $result = mysql_query($query);
  • while ($row = mysql_fetch_array($result)) //Tant qu'on a des noms
  • {
  • echo $row[0]."<br>"; //On les affiche
  • }
  • ?>
//Mon code (Ctrl+A, Ctrl+C et Ctrl+V) dans un fichier connected_users.php

Connected :<br>
<?
include("db_connect.php"); //Infos de connexion et connexion à la bdd

if ($_SESSION['pseudo'] != '') //Le geek est loggué ?
{
 $pseud = $_SESSION['pseudo'];
 $query = "SELECT * FROM registered_users WHERE pseudo='$pseudo'"; //On récupère ses infos dans la bdd
 $result = mysql_query($query);
 if ($result) //On a ses infos ?
 {
  $lastquerytime = time(); //Il a exécuté ce code MAINTENANT
  $query = "UPDATE registered_users SET lastquerytime='$lastquerytime' WHERE pseudo='$pseudo'"; //On l'écrit dans la table
  mysql_query($query);
 }
}

$fiveminago = time() - 5 * 60; //5*60s=5min de délai, mettez ce que vous voulez
$query = "SELECT pseudo FROM registered_users WHERE lastquerytime>'$fiveminago'"; //Tous ceux qui ont fait un truc y a moins de 5min
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) //Tant qu'on a des noms
{
 echo $row[0]."<br>"; //On les affiche
}
?>

Conclusion

<?
include("connected_users.php"); //A l'endroit où vous voulez la liste
?>

Si vous voulez des explications, ou que vous avez des idées, des remarques, quelque chose quoi... -> Commentaire ! :)
 

Commentaires et avis

signaler à un administrateur
Commentaire de coucou747 le 11/12/2006 09:22:36

entre nous, ton code n'est pas propre, et moins optimisé que celui d'antho qui stoquait tout ça sur une table HEAP...

De plus, 50 lignes, c'est un hello world... pas un gros code

signaler à un administrateur
Commentaire de kankrelune le 11/12/2006 17:27:36

"De plus il faut sans cesse mettre cette table ou ces fichiers texte à jour."

Ah... parce que c'est pas ce que tu fais toi... .. ?

Ou est le niveau initié dans cette source... .. ?

@ tchaOo°

signaler à un administrateur
Commentaire de jean84 le 12/12/2006 12:50:47

Hello

Je suis en train d'ecrire mon site en ce moment et il m'est arrive la meme chose, a savoir comment avoir un truc fiable pour pas beaucoup de ligne sans surcharger la base de donnees.
De mon point de vue, sachant qu'il s'agit juste d'un petit compteur sans grande pretention, j'ai opte pour les cookies auquel je greffe un timestanp et une petite table speciale avec juste 3 champs (id, pseudo, timestanp). Rien de bien mechant en somme (en gros, pas quelque chose qui justifie le niveau initie ^^)

Pour ton code, je suis d'accord avec coucou747 a savoir qu'il n'est franchement pas optimise, a commence par la balise <? (au lieu de <?php), les " a la place des ', tes balises orphelines (<br /> au lieu de <br>, on est passe a xHTML depuis quelque temps deja ...). Ce ne sont que des details mais a plus grande echelle, sa peut avoir une incidence sur le temps d'execution de ton code.

Ensuite, et la par contre sa fait un peu plus mal aux yeux, c'est ton
pseud = $_SESSION['pseudo'];
$query = "SELECT * FROM registered_users WHERE pseudo='$pseudo'"; //On récupère ses infos dans la bdd
$result = mysql_query($query);

Je sais pas pour les autres mais moi sa m'a franchement choque. Deja, il y a une faute pour la variable $pseudo que tu appelles $pseud = $_SESSION[]... . Si j'avais fait un copie/coller comme tu l'indiques, j'aurais pu me brosser avant de faire fonctionner ton code.
Ensuite, mysql_query() retroune une ressource en cas de succes et FALSE en cas d'erreur, jamais TRUE. Donc faire
if ( mysql_query() )
et un abus de language (je remercie Kankrelune pour sa ;-) ).
La correction serait plus du type :
$Result = mysql_query($Requete) or die('blabla');
if ( $Result !== FALSE )
{
    // a ce moment on rentre dans le if()
}

Voici la documentation de mysql_query() si tu veux plus d'informations => http://fr.php.net/manual/fr/function.mysql-query.php

Ensuite, petite suggestion :
tu declares : si mysql_query() me renvoi une ressource, c'est qu'il y a une entree dans la base de donnees. C'est faux ! mysql_query() renverra toujours une ressource, meme si la base est vide. C'est en cas d'erreur SQL qu'il te renverra FALSE (erreur de syntaxe par exemple)
Il serait plus judicieux de verifier le nombre de resultat avec un mysql_num_rows() qui elle, te renverra le nombre de d'entree liste par MySQL, pas simplement une ressource...

Et pour la derniere partie, 2/3 petites choses (c'est pour ton bien m'en veut pas) :

while ($row = mysql_fetch_array($result)) //Tant qu'on a des noms
{
  echo $row[0]."<br>"; //On les affiche
}

Prefere l'utilisation de mysql_fetch_assoc() au cas ou tu n'utilises pas les cles associatives ni les index de mysql_fetch_array(), tu gagneras en vitesse de traitement.
Pour le while, meme reflexion que pour mysql_query(), mysql_fetch_assoc() (ou fetch_array()) te renverra un tableau ou FALSE en cas d'erreur, jamais TRUE. Utilise plutot

while ( ($Array = mysql_fetch_assoc($Result)) !== FALSE )
{
  // blabla
}

qui sera plus rapide et plus sûr.
LIENS :
http://fr.php.net/manual/fr/function.mysql-fetch-assoc.php
http://fr.php.net/manual/fr/function.mysql-fetch-array.php

Et pour ton
echo $row[0]."<br>";
prefere
echo $row[0], '<br />';
Cela ne sert a rien de concatener une chaine si elle part tout de suite a l'affichage...

En esperant que tu continues ton apprentissage malgre tout cela,

@++

signaler à un administrateur
Commentaire de kankrelune le 12/12/2006 15:45:03

Pas grand chose à rajouter à ce qu'a dit jean84 hormis quelques précisions... .. .

<? n'est ni plus rapide ni plus lent que <?php c'est juste que la deuxième solution est portable sous toutes les configuration de php que short_open_tags soit activé ou non... .. .

mysql_query() peut retourner true mais pas dans le cas d'un select comme avec le code ci dessus... .. .

Sinon...

$Result = mysql_query($Requete) or die('blabla');
if ( $Result !== FALSE )
{

la conditions suivant le mysql_query() ne sera jamais executé car le "or die()" aura terminé le script avant... .. .

...

if ($_SESSION['pseudo'] != '')

Et si $_SESSION['pseudo'] n'est pas initialisé... .. ?

Mieux vaut faire...

if(isset($_SESSION['pseudo']) && !empty($_SESSION['pseudo']))

Concernant la table sql il faut tout remettre dans son contexte... en effet il serait peu judicieux de créer une table pour le compteur si vous gérez les sessions via une SGDB dans ce cas autant ce servir de la table servant pour les session... .. .

Pour finir en l'état ton select est inutile... de même que j'ais du mal à comprendre à quoi sert ton update si tu ne fais pas d'insertion au préalable... il faut optimiser tout ça... je pense qu'utiliser ON DUPLICATE KEY UPDATE te permettrait de gagner une requete... qui plus est tu ne netoie jamais ta table imagine le bordel au bout d'un mois... dans le genre tu pourrais faire... .. .

include("db_connect.php"); //Infos de connexion et connexion à la bdd
$limit = 10; // nombre max de connectés à afficher (0 = tous)

if(isset($_SESSION['pseudo']) && !empty($_SESSION['pseudo']))
{
$pseudo = mysql_real_escape_string($_SESSION['pseudo']);
mysql_query('DELETE FROM registered_users WHERE lastquerytime < NOW()-3600'); // Garbage collector des entrées inactive depuis plus d'1 heure
mysql_query('INSERT INTO table (pseudo,lastquerytime) VALUES (\''.$pseudo.'\',NOW()) ON DUPLICATE KEY UPDATE lastquerytime=NOW()');
}

$result = mysql_query('SELECT pseudo FROM registered_users WHERE lastquerytime > NOW()-300');
$i = 0;
$nbConnected = mysql_num_rows($result);

if($nbConnected > 0)
{
$sep = ($nbConnected === 1) ? '' : 's';
echo '<ul>Membre'.$sep.' connecté'.$sep.' : ';

while(false !== ($row = mysql_fetch_assoc($result)))
{
if(!empty($limit) && $i++ == $limit)
break;

echo '<li>'.$row['pseudo'].'</li>';
}

echo '</ul>';
}
else echo 'Aucun membre n\'est actuellement connecté';

J'ais pas testé la syntaxe SQL est à vérifier et peut être optimisable mais l'idée est là... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de jean84 le 12/12/2006 15:55:51

"<? n'est ni plus rapide ni plus lent que <?php c'est juste que la deuxième solution est portable sous toutes les configuration de php que short_open_tags soit activé ou non... .. ."

C'est vrai que sa change rien... jsute que je trouve sa plus explicite (d'autres languages utilisent <?, donc mieux vaut prendre de bonne habitudes. D'autant qu'ils ont parle de la virer dans php6, meme si sa reste a verifier)

"a conditions suivant le mysql_query() ne sera jamais executé car le "or die()" aura terminé le script avant... .. ."

Comment sa ? Pourtant je fais toujours ainsi, jamais eu de problemes... tu peut preciser ?

signaler à un administrateur
Commentaire de jean84 le 12/12/2006 16:02:29

je viens de comprendre... si jamais il y avait une erreur dans mysql, sa serait le die() qui aurait attrape l'erreur et pas mon $Result... effectivement je n'y avais pas pense sur le coup. M'enfin mieux vaut trop de verifs que pas assez ^^

Merci Kankrelune !

signaler à un administrateur
Commentaire de kankrelune le 12/12/2006 16:04:17

"C'est vrai que sa change rien... jsute que je trouve sa plus explicite (d'autres languages utilisent <?, donc mieux vaut prendre de bonne habitudes. D'autant qu'ils ont parle de la virer dans php6, meme si sa reste a verifier)"

Tout à fait d'accord... comme disait un membre dont je ne me souviens plus le nom... <? c'est comme "bonjour je parle" alors que <?php c'est comme "bonjour je parle français"... .. . ;o)

""a conditions suivant le mysql_query() ne sera jamais executé car le "or die()" aura terminé le script avant... .. ."

Comment sa ? Pourtant je fais toujours ainsi, jamais eu de problemes... tu peut preciser ?"

En fait je me suis mal exprimé... ton or die() s'éxécutera si le code précédent retourne false... cela revient à faire...

if(!mysql_query('bla bla))
    die('bla bla');

donc avec...

$Result = mysql_query($Requete) or die('blabla');
if ( $Result !== FALSE )
{

le...

if ( $Result !== FALSE )

ne sera jamais éxécuté si $Result vaut false cart le die() aura mis un terme à l'execution du script... par contre il le sera si $Result vaut true (ou équivalant) et à ce moment là le if($Result !== false) est inutile puisque $Result vaut forcement autre chose que false... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de kankrelune le 12/12/2006 16:07:38

Effectivement... sauf que trop de vérif tue la vérif (je sais elle était facile celle là)... .. .

J'ais oublié de dire que dans l'exemple de code que je donne il faudra que la structure de la table sql comporte une clé primaire ou unique sur le champ pseudo... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de jean84 le 12/12/2006 16:14:31

C'est quoi la difference entre une cle primaire et une cle unique (je n'utilise vraiment que les fonctions de bases de mysql, un coup de paluche me sera la bien venue) ?

"Effectivement... sauf que trop de vérif tue la vérif (je sais elle était facile celle là)... .."

Arf !
Un brin d'humour ne fait jamais de mal (c.f sketch les inconnus)

^^

signaler à un administrateur
Commentaire de kankrelune le 12/12/2006 16:45:08

Pour faire court les clé (ou index ou encore indice) servent à...

empêcher des duplicats
accélérer les recherches

il y a trois type de clés...

clé primaire => primary key
clé unique => unique key
clé candidate (ou clé tout court) => key

Une table ne peut posséder qu’une seule
clé primaire... une clé primaire c'est une clé unique
particulière... la différence se situe au
niveau du traitement des valeurs nulles...

une clé unique empêche les duplicats alors qu'une clé normale (candidate) servira à accélérer les recherches... les clés sont très utile et accèlèrent sensiblement les recherches lors de l'utilisation de la clause WHERE... cependant les clés utilisent de l’espace disque et ralentissent les insertions et parfois les modifications il faut donc les utiliser avec parcimonie...

Quelques liens...

- Comment MySQL utilise les index : http://doc.domainepublic.net/mysql/doc_mysql/mysql-indexes.html
- Index de colonnes : http://doc.domainepublic.net/mysql/doc_mysql/indexes.html
- Index sur plusieurs colonnes : http://doc.domainepublic.net/mysql/doc_mysql/multiple-column-indexes.html
- Mesures de vitesses pour comprendre les impacts sur le cluster : http://dev.mysql.com/doc/refman/5.0/fr/performance-figures.html

@ tchaOo°

signaler à un administrateur
Commentaire de jean84 le 12/12/2006 21:07:36

Cooool ! Merci pour les infos (et les liens)

@++

signaler à un administrateur
Commentaire de Vernar le 18/12/2006 08:27:58

Superbe échange entre Jean84 et Kankrelune ! C'est très positif : merci de prendre ce soin pour expliquer les errances de ce script :-))) J'apprends beaucoup à vous lire ! Il faudrait juste que Darkkrab réécrive son code en fonction de tous vos commentaires et nous le propose à nouveau, débarrassé de ses scories !
@+

signaler à un administrateur
Commentaire de jojolapine le 25/02/2007 12:07:13

je voudrai simplement rajouter (j'ai pas eu le courage de lire tout vos commentaires en détail, ça à peut-être été dit...)
Mais lorsque tu présentes une table mysql... Il serait préférable qu'elle soit optimisée...
Donc premièrement, pour un champ de date, il ya deux solution (si on veut les secondes), timestamp et datetime, tout le reste est à proscrire, donc ton bigint tu le ranges au placard...
Ensuite, pour les champs pseudo et mdp, des champs texte sont à éradiquer, je doute fortement que tes membres  ai des pseudo de plus de 30 caractères (et encore je prend large), donc un varchar(30) (ou plus petit, il suffit de préciser aux membres d'avoir un petit pseudo) et plus adapté, et pour le mot de passe, comme on ne stocke JAMAIS un mot de passe en clair... un char(32) (taille d'un hash md5) est bien plus optimisé...
Voilou, je m'attarde pas sur le code php... tout (ou presque) à déjà été dit...
Bonne journée

signaler à un administrateur
Commentaire de schunck le 24/05/2007 10:32:40

Bonjour à tous ! tout d'abord, merci pour ces commentaires.
J'ai un souci et je n'arrive pas à trouver le problème.


Connected :<br>
<?
function conect()
{
include "inc/C_error.inc";
include "inc/C_conect.inc";
$conection = mysql_connect($host, $user, $password)
       or die ("$er_mysql");
$db = mysql_select_db($database, $conection)
       or die ("$er_db");
}

if(isset($_COOKIE[login]) && !empty($_COOKIE[login]))
{
$login = $_COOKIE[login];
$query = "SELECT * FROM gcp_members WHERE login='$login'"; //On récupère ses infos dans la bdd
$Result = mysql_query($sql) or die (mysql_error())

if ($Result !== FALSE) //MON SOUCI EST ICI
{
  $lastquerytime = time(); //Il a exécuté ce code MAINTENANT
  $query = "UPDATE gcp_members SET lastquerytime='$lastquerytime' WHERE login='$_COOKIE[login]'"; //On l'écrit dans la table
  mysql_query($query);
}
}

$fiveminago = time() - 5 * 60; //5*60s=5min de délai, mettez ce que vous voulez
$query = "SELECT login FROM gcp_members WHERE lastquerytime>'$fiveminago'"; //Tous ceux qui ont fait un truc y a moins de 5min
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) //Tant qu'on a des noms
{
echo $row[0], '<br />';
}

?>

VOICI MON MESSAGE D'ERREUR / Parse error: parse error, unexpected T_IF in /home/jsuissexy2/www/connected_users.php on line 19

soit le result.

Je n'ai aucune formation en php, si ce n'est la passion. Alors soyez indulgent si mon erreur est bebete.
Merci à vous tous de partager votre matière grise et votre tolérence......

signaler à un administrateur
Commentaire de coucou747 le 24/05/2007 10:46:17

$Result = mysql_query($sql) or die (mysql_error())
=>

$Result = mysql_query($sql) or die (mysql_error());

il te manque un ;

signaler à un administrateur
Commentaire de schunck le 24/05/2007 11:04:10

merci beaucoup, à force de lire et relire on en oublie des choses toutes bètes.
Cette correction fait apparaitre une autre erreur :

Warning: mysql_query(): Access denied for user: 'www@localhost' (Using password: NO) in /home/jsuissexy2/www/connected_users.php on line 17

Warning: mysql_query(): A link to the server could not be established in /home/jsuissexy2/www/connected_users.php on line 17
Access denied for user: 'www@localhost' (Using password: NO)

Et à vrai dire, je comprend pas. J'ai un peu tout essayer mais en vain. Pourtant l'erreur semble simple à localiser !

signaler à un administrateur
Commentaire de schunck le 24/05/2007 11:28:36

J'ai trouvé mon erreur,
- $query = "SELECT * FROM gcp_members WHERE login='$login'"; //On récupère ses infos dans la bdd
$Result = mysql_query($sql) or die (mysql_error())
le sql ne correspondait pas, et également une } mal placé.

reste à afficher !
Merci à coucou747 pour sa réactivité ;)

signaler à un administrateur
Commentaire de tibob135 le 16/01/2008 02:43:58

ca marche avec ma table membre? ou il faut que je change?

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Liste des membres connectés. [ par Kaeru ] Bonjour à tous.J'ai cherché sur le site mais je n'ai pas trouvé de bonne réponse à ma question.Je cherche un script pour afficher la liste des noms de Afficher une liste. [ par Kaeru ] Je savais pas quoi mettre comme titre pour expliquer mon problème.J'ai une table nommée PersoDans cette table se trouve plusieurs colones.La colone qu Afficher la sélection d'une liste déroulante !!! Help !!! [ par merlinwap ] Salut à tous,Point qui fonctionne : J'ai une liste déroulante qui est alimentée par une requete.Point qui ne fonctionne pas :Après avoir sélectionné u Liste des fichiers d'un dossier [ par cagoulou ] Bonjour je souhaiterai , en php, rechercher tous les fichiers present dans un dossier afin de pouvoir les afficher dans un balise &lt;marquee&gt;.Pour afficher résultat en liste [ par Bowlest ] Bonjour,Je voudrais afficher le résultat sous forme de liste, car j'obtiens un résultat vertical et collé.Merci d'avance :)&lt;?$req="SELECT idcommand afficher resultat selon choix liste deroulante (nooob) [ par super_noob ] salut à tous,ma question risque de paraitre debile à beaucoup de programmeurs ici present mais bon, je la pose quand meme :j'ai une liste deroulante a Requete pour afficher les meilleurs [ par neovalpox ] Bonjours &#224; tous !Bon voila j'explique mon probl&#232;me : je souhaiterai afficher les 3 membres qui poss&#232;de le plus de points sur mon site.j Recherche un script pour afficher la liste des enregistrements en fonction de leur première lettre [ par Gecko62 ] Bonjour,J'aimerais afficher sur une page la liste de toutes les lettres de l'alphabet permettant d'afficher tous les enregistrements commen&#231;ant p afficher une liste de sites triés par ordre croissant en fonction de leurs nombres de points [ par jubeau ] Bonjour, j'ai besoin d'aide SVP pour quelque chose que je ne vois pas du tout comment faire. Je pr&#233;cise tout de suite que je ne souhaite pas uti faire apparaitre /disparaitre une liste deroulante [ par method0 ] method,rebonjour,j'ai 3 listes d&#233;roulantes et je voudrait faire afficher uniquement les liste qui ont lieu d&#146;appara&#238;tre.Je m'explique:


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.