tayeress
Messages postés1Date d'inscriptionjeudi 31 janvier 2008StatutMembreDernière intervention28 février 2008 28 févr. 2008 à 20:10
Pareillement que kilikiki43 . Ce code m'intéresse beaucoup. Je suis débutant dans le codage PHP. D'après ce que j'ai vue, cette erreur est due à un problème de remplissage de la bdd (trop de valeur pour pas assez de table). J'ai bien regarder ce code mais je vois pas où est l'erreur.
Si quelqu'un connait la solution je suis preneur à 200% car ce code est vraiment ce dont j'ai besoin pour mon projet
Merci d'avance
kilikiki43
Messages postés1Date d'inscriptionvendredi 14 septembre 2007StatutMembreDernière intervention14 septembre 2007 14 sept. 2007 à 02:49
Je ne veux pas être méchant mais rien ne fonctionne.
J'ai créé la db ajouté le script dans un include le premier me met une erreur : column count doesn't matchrow 1...
L'autre pas d'erreur mais pas d'enregistrement non plus.
Mes branchements sont pourtant ok j'ai mis cpt_page et ip en clef primaire. Not nuul pour tous les champs. Aucun auto increment.
Quelq'un a ce script qui fonctionne ? Si oui merci de le transmettre.
Sinon ce script me semble intéressant pour pister certains ordi.
RaphAstronome
Messages postés104Date d'inscriptionsamedi 7 décembre 2002StatutMembreDernière intervention17 août 2009 4 mai 2006 à 20:23
Il y a moyen aussi le mettre le CRC de l'IP c'est compact et toujours de la même taille. Le risque de collision reste faible.
Et en plus pas besoin de s'inscrire a la CNIL comme ça, enfin je crois.
Ne pas oublier de supprimer les IP vieilles de plus de 24h car d'habitude c'est le temps de conservation de l'IP (si dynamique).
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 4 mai 2006 à 17:13
Un COUNT(*) est directement stocké dans la table, y'a pas plus rapide que ça (enfin dans le cas précis, faut pas mettre de WHERE dans la condition).
Pour un compteur plus précis, y'a le mien qui supprime le dernier octet de l'ip.
cs_Ricou13
Messages postés40Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention 8 septembre 2006 4 mai 2006 à 16:36
D'où ma question sur l'intérêt ?
C'est pas parce qu'on a l'ADSL qu'on est forcement connecté 24h/24h.
L'IP change donc régulièrement !
b4ng
Messages postés9Date d'inscriptionsamedi 24 avril 2004StatutMembreDernière intervention 7 février 2011 4 mai 2006 à 16:18
pour etre encore plus rapide tu fais un SELECT COUNT(1)
mais bon ton code n'est pas très fiable puisque des l'instant où les utilisateurs passent par un proxy ou change d'ip tout le temps (56k par exemple ou ADSL avec renouvellement d'ip journalier) , ils sont mal comptabilisés
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 9 févr. 2006 à 11:31
# // Recherche si le visiteur est déjà dans la base de données
# $query = "SELECT * FROM cpt_visiteur WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND date='".date("Y-m-d")."'";
# $req = @mysql_query($query) or die('Erreur : '.mysql_error());
# // Si il n'y est pas
# if( @mysql_num_rows($req) == 0 )
# {
# // Ajoute son IP et la date de visite dans la base de données
# $query = "INSERT INTO cpt_visiteur VALUES('','".$_SERVER['REMOTE_ADDR']."','".date("Y-m-d")."','1')";
# $req = @mysql_query($query) or die('Erreur : '.mysql_error());
# }
# else
# {
# // Sinon incrémente son nombre visite
# $data = @mysql_fetch_array($req);
# $data[3]++;
# $query = "UPDATE cpt_visiteur SET nbpage='".$data[3]."' WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND date='".$data[2]."'";
# @mysql_query($query) or die('Erreur : '.mysql_error());
# }
doit surement être remplaçable par une seule requête en REPLACE INTO table machin...
# // Recherche si la page a déjà été visitée
# $query = "SELECT * FROM cpt_page WHERE page='".$_SERVER['REQUEST_URI']."'";
# $req = @mysql_query($query) or die('Erreur : '.mysql_error());
# // Si elle a déjà été vu
# if( mysql_num_rows($req)!= 0 )
# {
# // Incrémente le nombre de visite de cette page
# $data = @mysql_fetch_array($req);
# $data[1]++;
# $query = "UPDATE cpt_page SET nbr='".$data[1]."' WHERE page='".$data[0]."'";
# @mysql_query($query) or die('Erreur : '.mysql_error());
# }
# else
# {
# // Sinon ajoue la page à la base de données
# $query = "INSERT INTO cpt_page VALUES('".$_SERVER['REQUEST_URI']."','1')";
# @mysql_query($query) or die('Erreur : '.mysql_error());
# }
idem pour ça... au passage pas de SELECT * (idem que ci dessus)
# // Compte combien il y a de visiteur dans la table
# $query = "SELECT id FROM cpt_visiteur";
# $req = @mysql_query($query) or die('Erreur : '.mysql_error());
#
# echo @mysql_num_rows($req); // Affiche le nombe de visiteur
un SELECT COUNT(*) FROM cpt_visiteur sera largement plus rapide. suivi d'un $r=mysql_fetch_row($req) et pour la valeur echo $r[0];
cs_Ricou13
Messages postés40Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention 8 septembre 2006 9 févr. 2006 à 10:59
Quel est l'intéret de comptabiliser le nombre de page visitée par un internaute sachant que son IP risque de changer à chaque visite, voire qu'elle soit attribuée à un autre ?
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 8 févr. 2006 à 21:32
ou deux entiers... et pas un entier de 128, car t'auras 6 caractères soit : 6*8 bits = 48, or un int c'est 32, et tu peux tennir jusquen ipv8 avec deux entiers...
RaphAstronome
Messages postés104Date d'inscriptionsamedi 7 décembre 2002StatutMembreDernière intervention17 août 2009 8 févr. 2006 à 21:28
Pour l'IP v6 (forme : 0000:0000:0000:0000:0000:0000:0000:0000) il faudra mettre VARCHAR(40) ou un entier 128 bits.
Toujours bon à prendre en compte.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 7 févr. 2006 à 20:49
GRenard, merci pour cette fonction.
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 7 févr. 2006 à 16:25
tiens pas mal cette fonction, en plus c'est deux fois plus rapide que l'explode + mise en INT, donc c'est nickel.
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 7 févr. 2006 à 13:04
ip2long
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 5 févr. 2006 à 17:51
ouais, à la limite... tfaçon, le principe est là...
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 5 févr. 2006 à 17:30
enlève-moi ces intval() lol vu le typage de PHP c'est inutile et plus gourmand (intval() est une fonction hyper gourmande).
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 5 févr. 2006 à 14:22
mais vous savez convertire une chaine en nombre ?
franchement :
a.b.c.d ou a, b, c et d sont des nombres compris entre 0 et 255, on peut faire tennir ça sur un INT car : a, b, c et d tiennent sur 8 bits et un int sur 32 !
et hop, ça passe en INT UNSIGNED dans la table SQL, ce qui fait 4 octets !
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 4 févr. 2006 à 23:41
Salut,
évite le SELECT *, n'oublie pas les index sur ta table car ça va craindre niveau perfs après un mois de remplissage...
je matterai le code demain en profondeur car j'ai pas trop le temps là (ni l'envie vu l'heure)
dark_naruto25
Messages postés127Date d'inscriptionmardi 23 août 2005StatutMembreDernière intervention 9 mai 2011 4 févr. 2006 à 22:51
en fait j'aurais pu mettre VARCHAR(16), une ip indiquer comme ci xxx.xxx.xxx.xxx est une chaine de caractère et non un nombre. De plus c'est une chaine de 15 caractères, donc VARCHAR(20) suffit très amplement (j'aurai pu prendre VARCHAR(15)).
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 4 févr. 2006 à 18:54
mais pourquoi tu passe ça en varchar ??? un int unsigned ça ne te convient pas ????
cs_Arkko
Messages postés192Date d'inscriptionmercredi 26 décembre 2001StatutMembreDernière intervention31 janvier 2007 4 févr. 2006 à 18:52
Coucou747 > peut-être qu'un ip c'est 4 octets mais en varchar c'est 19 caracteres
xxx.xxx.xxx.xxx
cs_Arkko
Messages postés192Date d'inscriptionmercredi 26 décembre 2001StatutMembreDernière intervention31 janvier 2007 4 févr. 2006 à 18:52
Coucou747 > peut-être qu'un ip c'est 4 octets mais en varchar c'est 19 caracteres
xxx.xxx.xxx.xxx
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 4 févr. 2006 à 18:47
salut
j'ai pas lu grandchose mais :
ip VARCHAR(20)
c'est 5 fois trop 20 octets pour une ip... une ip c'est 4 octets...
28 févr. 2008 à 20:10
Si quelqu'un connait la solution je suis preneur à 200% car ce code est vraiment ce dont j'ai besoin pour mon projet
Merci d'avance
14 sept. 2007 à 02:49
J'ai créé la db ajouté le script dans un include le premier me met une erreur : column count doesn't matchrow 1...
L'autre pas d'erreur mais pas d'enregistrement non plus.
Mes branchements sont pourtant ok j'ai mis cpt_page et ip en clef primaire. Not nuul pour tous les champs. Aucun auto increment.
Quelq'un a ce script qui fonctionne ? Si oui merci de le transmettre.
Sinon ce script me semble intéressant pour pister certains ordi.
4 mai 2006 à 20:23
Et en plus pas besoin de s'inscrire a la CNIL comme ça, enfin je crois.
Ne pas oublier de supprimer les IP vieilles de plus de 24h car d'habitude c'est le temps de conservation de l'IP (si dynamique).
4 mai 2006 à 17:13
Pour un compteur plus précis, y'a le mien qui supprime le dernier octet de l'ip.
4 mai 2006 à 16:36
C'est pas parce qu'on a l'ADSL qu'on est forcement connecté 24h/24h.
L'IP change donc régulièrement !
4 mai 2006 à 16:18
mais bon ton code n'est pas très fiable puisque des l'instant où les utilisateurs passent par un proxy ou change d'ip tout le temps (56k par exemple ou ADSL avec renouvellement d'ip journalier) , ils sont mal comptabilisés
9 févr. 2006 à 11:31
# $query = "SELECT * FROM cpt_visiteur WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND date='".date("Y-m-d")."'";
# $req = @mysql_query($query) or die('Erreur : '.mysql_error());
# // Si il n'y est pas
# if( @mysql_num_rows($req) == 0 )
# {
# // Ajoute son IP et la date de visite dans la base de données
# $query = "INSERT INTO cpt_visiteur VALUES('','".$_SERVER['REMOTE_ADDR']."','".date("Y-m-d")."','1')";
# $req = @mysql_query($query) or die('Erreur : '.mysql_error());
# }
# else
# {
# // Sinon incrémente son nombre visite
# $data = @mysql_fetch_array($req);
# $data[3]++;
# $query = "UPDATE cpt_visiteur SET nbpage='".$data[3]."' WHERE ip='".$_SERVER['REMOTE_ADDR']."' AND date='".$data[2]."'";
# @mysql_query($query) or die('Erreur : '.mysql_error());
# }
doit surement être remplaçable par une seule requête en REPLACE INTO table machin...
# // Recherche si la page a déjà été visitée
# $query = "SELECT * FROM cpt_page WHERE page='".$_SERVER['REQUEST_URI']."'";
# $req = @mysql_query($query) or die('Erreur : '.mysql_error());
# // Si elle a déjà été vu
# if( mysql_num_rows($req)!= 0 )
# {
# // Incrémente le nombre de visite de cette page
# $data = @mysql_fetch_array($req);
# $data[1]++;
# $query = "UPDATE cpt_page SET nbr='".$data[1]."' WHERE page='".$data[0]."'";
# @mysql_query($query) or die('Erreur : '.mysql_error());
# }
# else
# {
# // Sinon ajoue la page à la base de données
# $query = "INSERT INTO cpt_page VALUES('".$_SERVER['REQUEST_URI']."','1')";
# @mysql_query($query) or die('Erreur : '.mysql_error());
# }
idem pour ça... au passage pas de SELECT * (idem que ci dessus)
# // Compte combien il y a de visiteur dans la table
# $query = "SELECT id FROM cpt_visiteur";
# $req = @mysql_query($query) or die('Erreur : '.mysql_error());
#
# echo @mysql_num_rows($req); // Affiche le nombe de visiteur
un SELECT COUNT(*) FROM cpt_visiteur sera largement plus rapide. suivi d'un $r=mysql_fetch_row($req) et pour la valeur echo $r[0];
9 févr. 2006 à 10:59
8 févr. 2006 à 21:32
8 févr. 2006 à 21:28
Toujours bon à prendre en compte.
7 févr. 2006 à 20:49
7 févr. 2006 à 16:25
7 févr. 2006 à 13:04
5 févr. 2006 à 17:51
5 févr. 2006 à 17:30
5 févr. 2006 à 14:22
franchement :
a.b.c.d ou a, b, c et d sont des nombres compris entre 0 et 255, on peut faire tennir ça sur un INT car : a, b, c et d tiennent sur 8 bits et un int sur 32 !
donc :
$ip=explode('.',$_SERVER['REMOTE_ADDR']);
$ip=intval($ip[0]) *256*256*256 +intval($ip[1]) *256*256+ intval($ip[2]) *256+ intval($ip[3]);
et hop, ça passe en INT UNSIGNED dans la table SQL, ce qui fait 4 octets !
4 févr. 2006 à 23:41
évite le SELECT *, n'oublie pas les index sur ta table car ça va craindre niveau perfs après un mois de remplissage...
je matterai le code demain en profondeur car j'ai pas trop le temps là (ni l'envie vu l'heure)
4 févr. 2006 à 22:51
4 févr. 2006 à 18:54
4 févr. 2006 à 18:52
xxx.xxx.xxx.xxx
4 févr. 2006 à 18:52
xxx.xxx.xxx.xxx
4 févr. 2006 à 18:47
j'ai pas lu grandchose mais :
ip VARCHAR(20)
c'est 5 fois trop 20 octets pour une ip... une ip c'est 4 octets...