Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1375 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  demande aide pour corriger mon compteur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

demande aide pour corriger mon compteur

n°1784762
keo64
Posté le 09-09-2008 à 21:57:16  profilanswer
 

salut tous, je suis entrain de crée mon site internet en php
j'ai essayé de faire un compteur malheuresement il fonctionne a moitié voici que je fait:
j'enregistre l'ip du visiteur
je scrute toutes les lignes de ma base de donné qui s'appelle ip
je fait une comparaison, si ip n'existe pas enregistre son ip dans ma base de donnée
je fait un calcul du nombe de ip  
et enfin j'affiche le résultat
 
mon problème c'est que a chaque fois que je rentre dans mon site il incrément de 1 or il dervrait connaitre mon ip et ne pas incrémenté  
voici mon script:
 
-------------------------------------------------------------------------------------------------------------------------------
<?php
mysql_connect("localhost", "root", "" ); // Connexion à MySQL
mysql_select_db("mabase" ); // Sélection de la base coursphp
$IPclient= $_SERVER['REMOTE_ADDR'] ;//$IPclient sera l'ip du client  
$reponse = mysql_query("SELECT ip FROM colonne" ); // Requête SQL
echo $IPclient;
while ($donnees = mysql_fetch_array($reponse) );
if ($donnees['ip']!=$IPclient);
{
echo different_enregistre;
 
mysql_query ("INSERT INTO colonne (ip) VALUES ('$IPclient')" );//on met l'adresse ip dans la base de donnée
}
$IPcompt="SELECT ip FROM colonne";
$resultat=mysql_query ($IPcompt);
$nb_IP=mysql_num_rows($resultat);
mysql_close(); // Déconnexion de MySQ
echo '<p> ' . $nb_IP . ' visiteurs on visité le site !</p>';
 
?>

mood
Publicité
Posté le 09-09-2008 à 21:57:16  profilanswer
 

n°1784790
Profil sup​primé
Posté le 09-09-2008 à 23:20:27  answer
 

Pourquoi tu ne fais pas un "select ip from colone where ip = '".$IPClient."'"
puis un mysql_num_rows()
 
Si 0 -> insert
 
Puis pour compter tu fais un mysql_insert_id() si tu as du insérer sinon un max() sur l'id

n°1784815
erwan83
Du Shift DEL tu te méfieras !
Posté le 10-09-2008 à 00:33:34  profilanswer
 

bon, ca marchait avec des sessions
 

Code :
  1. <?php
  2. session_start();
  3. if (empty($_SESSION['count']))
  4. {
  5. $_SESSION['count'] = 1;
  6. }
  7. else
  8. {
  9. $_SESSION['count']++;
  10. }
  11. $IP = $_SERVER['REMOTE_ADDR'];
  12. $page = $_SERVER['REQUEST_URI'];
  13. $entree = $_SERVER['HTTP_REFERER'];
  14. $sess = session_id($_SESSION);
  15. $db="basededonnees";
  16. $link = mysql_pconnect("sql.free.fr", "log","pass" );
  17. mysql_select_db($db , $link);
  18. $sql = mysql_query("INSERT INTO `visiteurs` (`login_proprio`, `email_proprio`, `pass_proprio`, `session`) VALUES ('erwan', 'email', 'pass', '$sess')" ) or die(mysql_error());
  19. $verif = "SELECT count(*) FROM `sessions` WHERE `session` LIKE '%$sess%' " or die(mysql_error());
  20.  $compte = mysql_query($verif,$link);
  21.  $row = mysql_fetch_row($compte);
  22.  $total = $row[0];
  23.  if ($total < 1)
  24.  {
  25.  $sql = mysql_query("DELETE FROM `visiteurs` WHERE 'session' LIKE '$sess')" );
  26.  $sql = mysql_query("INSERT INTO `sessions` (`session`, `ip`, `check`, `email`, `page`, `entree`) VALUES ('$sess', '$IP', 'ok', 'à venir', '$page', '$entree')" ) or die(mysql_error());
  27.  }
  28.  if ($total > 0)
  29.  {
  30.  $sql = mysql_query("DELETE FROM `sessions` WHERE 'session' LIKE '$sess')" );
  31.  $sql = mysql_query(" UPDATE `sessions` SET `check` = 'non' WHERE `session` LIKE '$sess'" );
  32.  $sql = mysql_query("DELETE FROM `visiteurs` WHERE 'session' LIKE '$sess')" );
  33.  $sql = mysql_query(" UPDATE `visiteurs` SET `login_proprio` = 'erwan'WHERE `session` LIKE '$sess'" );
  34.  }
  35. // verif compte
  36. $date = date("Y-m-d" );
  37. $heure = date('h');
  38. $minute = date('i');
  39. $seconde = date('s');
  40. //jeu sur 9 minutes
  41. if ($minute > 0)
  42. {
  43. $minutemoins = $minute - 1;
  44. $heuremoins = $heure;
  45. }
  46. if ($minute == 0)
  47. {
  48. $minutemoins = 59;
  49. $heuremoins = $heure - 1;
  50. }
  51. if ($heuremoins < 0)
  52. {
  53. $heuremoins = 0;
  54. $minutemoins = 0;
  55. }
  56. $datex = date("Y-m-d" );
  57. $date = $datex.' '.$heure.':'.$minute;
  58. $datemoins = $datex.' '.$heuremoins.':'.$minutemoins;
  59. $verif = " SELECT count(*) FROM `visiteurs` WHERE `date` LIKE '%$date%' OR `date` LIKE '$$datemoins%' " or die(mysql_error());
  60. //   
  61. $compte = mysql_query($verif,$link);
  62. $row = mysql_fetch_row($compte);
  63. $total = $row[0];
  64. if ($total == 0)
  65. {
  66. $total = 1;
  67. }
  68. echo $total.' visiteur(s) en ce moment';
  69. mysql_close;
  70. ?>


mais il faut faire appel aux sessions
bon courage


Message édité par erwan83 le 10-09-2008 à 00:44:51

---------------
http://www.ypikay.com
n°1784825
keo64
Posté le 10-09-2008 à 07:41:10  profilanswer
 

merci de vos aide :)  
 
par contre je mettrais les sessons plus tard je veux juste que si un visiteur inconnue clique ma page le compteur s''incrémente  
comme je débute en programmation donc je ne comprend pas cette ligne que tu me mets corben Pourquoi tu ne fais pas un "select ip from colone where ip = '".$IPClient."'"  
php a dire de pointer ma colonne ip de ma base de donné il va lui dire que cette variable sera  = $IPclient
lorsque il aura compter le nombre d'entré ip et que si il est égal 0 le compteur va ajouté a la base le nouveau venu ?
ma base ne contient que le champs ip faut t'il que je crée un champs supplementaire id?

n°1784839
Profil sup​primé
Posté le 10-09-2008 à 09:04:35  answer
 

ha non c'est juste un check qui regarde si il y a un enregistrement dans la table avec cette ip.
Puis on regarde combien d'enregistrements sont retournés.
Si 0 -> on insère.
Et si tu pouvais appeler ta table autrement que 'colone', ce serait super, ça perturbe pas mal :d

n°1784857
ouiouioui1​0
ChuckNorris sait diviser par 0
Posté le 10-09-2008 à 09:57:02  profilanswer
 

implémente un temps aussi, et une requête qui nettoie les vieilles entrées sinon ta table va se remplir..

n°1784932
keo64
Posté le 10-09-2008 à 11:56:01  profilanswer
 

ok donc cette phrase fait tous , il vérfie et compare :??:  
donc je metterais ce srcipt:
 
---------------------------------------------------------------------------------------------------------------------
<?php
mysql_connect("localhost", "root", "" ); // Connexion à MySQL
mysql_select_db("mabase" ); // Sélection de la base coursphp
$IPclient= $_SERVER['REMOTE_ADDR'] ;//$IPclient sera l'ip du client  
 
echo $IPclient;
mysql query"select ip from monchampIP where ip = '".$IPClient."'" ;
if (ip ==0)
{
echo different_enregistre;
 
mysql_query ("INSERT INTO monchampiP (ip) VALUES ('$IPclient')" );//on met l'adresse ip dans la base de donnée
}
$IPcompt="SELECT ip FROM colonne";
$resultat=mysql_query ($IPcompt);
$nb_IP=mysql_num_rows($resultat);
mysql_close(); // Déconnexion de MySQ
echo '<p> ' . $nb_IP . ' visiteurs on visité le site !</p>';
 

n°1784942
Profil sup​primé
Posté le 10-09-2008 à 12:27:44  answer
 

non, un truc du genre :
 
$tutu = mysql_query("select"...);
$toto = mysql_num_rows($tutu);
if ($toto == 0)  
{
  mysql_query("insert"...);
  $tata = mysql_insert_id();
}
else
{
 $tata = mysql_query("select MAX(id)"...);
}
echo $tata." visiteurs";
et il te faut un champ id en primary key évidement

n°1784944
keo64
Posté le 10-09-2008 à 12:28:56  profilanswer
 

merci pour le renseignement :jap:  
je testerais tous ca se soir chez moi

n°1784948
erwan83
Du Shift DEL tu te méfieras !
Posté le 10-09-2008 à 12:56:24  profilanswer
 

fais gaffe parce que si tu fais autant de fautes en codant qu'en écrivant, ça va planter :)


---------------
http://www.ypikay.com
mood
Publicité
Posté le 10-09-2008 à 12:56:24  profilanswer
 

n°1784949
keo64
Posté le 10-09-2008 à 12:58:39  profilanswer
 

je vais d'abord crée dans ma base de donné le champs ip un "id" auquel je mettrerait comme option varchar et aut0 incremente id
donc est ce que le script est:
 
 
$tutu=mysql query("select ip from monchampIP where ip = '$IPClient'" ); //vérifie juste si $IPclient se trouve dans monchampip.
$toto = mysql_num_rows($tutu);
if ($toto == 0)  
{
  mysql_query("INSERT INTO monchampIP (ip) VALUES ('$IPclient')" );// ajouté dans le champIP la valeur $IPCLIENT
  $tata = mysql_insert_id()// ajouter un +1 à l'id
}
else
{
 $tata = mysql_query("select monchampIP(id)" ); //selection monchampIP, recupéré la valeur de l'id final
}
echo $tata." visiteurs";//affihe le nombre l'id qui est me nombre de visiteur


Message édité par keo64 le 10-09-2008 à 13:13:37
n°1784997
Marty_McFl​y
Nan hé ho, d'accord?
Posté le 10-09-2008 à 14:09:40  profilanswer
 

Ben... essaie :)
 
Plus sérieusement, je pense que ce serait plutot:

Code :
  1. $tutu=mysql query("select ip from monchampIP where ip = '$IPClient'" ); //vérifie juste si $IPclient se trouve dans monchampip.
  2. $toto = mysql_num_rows($tutu);
  3. if ($toto == 0) 
  4. {
  5.   mysql_query("INSERT INTO monchampIP (ip) VALUES ('$IPclient')" );// ajouté dans le champIP la valeur $IPCLIENT
  6.   // si on ajoute une ligne, mon nombre total de visiteurs est $toto+1
  7.   $tata = $toto + 1;
  8. }
  9. else
  10. {
  11. // Si on ajoute aucune IP, alors mon nombre total de visiteurs est $toto
  12. $tata = $toto;
  13. }
  14. echo $tata." visiteurs";//affihe le nombre l'id qui est me nombre de visiteur


 
J'ai volontairement enlevé le mysql_insert_id car pour la raison suivante:
 
si tu fais un delete du dernier enregistrement de la table (id = n) et qu'ensuite, tu retournes sur cette page... l'id suivant sera n+1, alors que tu n'auras que n enregistrements dans la base.
 
J'espere avoir été clair :p


---------------
arg(z) = pi /2 donc z = i, moi je prends pas
n°1785205
Profil sup​primé
Posté le 10-09-2008 à 19:22:08  answer
 

si t'as recopié le code juste au dessus, ça ne risque pas de bouger c'est clair.


Message édité par Profil supprimé le 10-09-2008 à 19:22:35
n°1785210
keo64
Posté le 10-09-2008 à 19:30:45  profilanswer
 

finalement ca n'a pas marché  :sweat:
faut que je reprend la ou j'ai été  :cry:


Message édité par keo64 le 10-09-2008 à 19:32:00
n°1785220
keo64
Posté le 10-09-2008 à 20:12:33  profilanswer
 

j'ai repris le script ligne par ligne.peut-ton créer un nouveaux champs sur ma tableIP avec php admin?jai vu qu'on peut crée une nouvelle table , ou dois-crée une nouvelle table et mettre mes 2 champ IPvisit et id.?
_____________________________________________________
<?php
mysql_connect("localhost", "root", "" ); // Connexion à MySQL
mysql_select_db("keokazwkkz" ); // Sélection de la base coursphp
$IPclient= $_SERVER['REMOTE_ADDR'];
$tutu=mysql_query("select ip from monchampIP where ip = '$IPClient'" ); //vérifie juste si $IPclient se trouve dans monchampip.  
$toto = mysql_num_rows($tutu);  
if ($toto == 0)  
{
  mysql_query("INSERT INTO colonne (ip) VALUES ('$IPclient')" );// ajouté dans le champIP la valeur $IPCLIENT
  $tata = mysql_insert_id()// ajouter un +1 à l'id
}  
?>

n°1785259
Nasga
Posté le 10-09-2008 à 21:27:44  profilanswer
 

Code :
  1. <?php
  2. /*
  3. * Connexion à MySQL
  4. */
  5. mysql_connect('localhost', 'root', '');
  6. mysql_select_db('test');
  7. /*
  8. * On cherche en base si l'ip est présente
  9. */
  10. $res = mysql_query('SELECT ip FROM `table` WHERE ip LIKE "'.$_SERVER['REMOTE_ADDR'].'";');
  11. $records = mysql_num_rows($res);
  12. /*
  13. * Si le tableau est vide alors on insert la nouvelle ip en base
  14. */
  15. if ($records == 0) 
  16. {
  17.   mysql_query('INSERT INTO `table` (ip) VALUES ("'.$_SERVER['REMOTE_ADDR'].'" );' );
  18. }
  19. ?>


 
Le sql est le suivant :  
 

Code :
  1. CREATE TABLE  `test`.`table` (
  2.   `ip` varchar(15) NOT NULL,
  3.   PRIMARY KEY  (`ip`)
  4. ) ENGINE=MyISAM;


 
Code testé sous php 5.2 / mysql 5.
Pense a activer l'error reporting quand tu code, regarde également var_dump / print_r pour debuger tes script.
Le code que j'ai fourni est fonctionnel mais non sécurisé (aucune protection sql...) et _largement_ optimisable (utilisation de mysqli ou sqlite).
 
Sinon si tu ne veux pas t'embêter Google Analytics ^^.
 
Tiens nous au courant :)

n°1785261
keo64
Posté le 10-09-2008 à 21:32:13  profilanswer
 

merci pour l'info mais ya des pub avec google?
Version du serveur: 5.0.44-log
 
enfait quant je crée une table je dois saisir obligatoirement myisam? car j'ai laissé par défaut
 
je test ton script:
(comment fait ton pour mettre tous le script dans une fenêtre comme ci dessus??
 
-----------------------------------------------------------------------------------------------------------------------<?php
 
 
 
 /*
   3. * Connexion à MySQL
   4. */
   mysql_connect('', '', '');
   mysql_select_db('');
   
   /*
   9. * On cherche en base si l'ip est présente
  10. */
  $res = mysql_query('SELECT ip FROM `nbre_ip` WHERE ip LIKE "'.$_SERVER['REMOTE_ADDR'].'";');
  $records = mysql_num_rows($res);
   
   /*
  15. * Si le tableau est vide alors on insert la nouvelle ip en base
  16. */
   if ($records == 0)  
   {
     mysql_query('INSERT INTO `nbre_ip` (ip) VALUES ("'.$_SERVER['REMOTE_ADDR'].'" );' );
  }
 $IPcompt="SELECT ip FROM nbre_ip";
$resultat=mysql_query ($IPcompt);
$nb_IP=mysql_num_rows($resultat);
mysql_close(); // Déconnexion de MySQ
echo '<p> ' . $nb_IP . ' visiteurs on visité le site !</p>';
 ?>


Message édité par keo64 le 10-09-2008 à 21:55:14
n°1785282
keo64
Posté le 10-09-2008 à 21:51:15  profilanswer
 

il faudrait que quelqu'un entre dans http://keokaz.fr/
pour testé le compteur essayé de clquer plusieur fois sur refresh
donc sur mysql j'ai refait une base de donnée
j'ai mis 2 champs:
1 champs id en auto incremente en mediumint
1 champs qui s'appelle nbre_ip sa sera plus simple a reconaitre en  varchar limité a 15 caractère
pour les erreur "regarde également var_dump / print_r pour debuger tes script. " c'est ou dans php admin??


Message édité par keo64 le 10-09-2008 à 21:58:30
n°1785294
keo64
Posté le 10-09-2008 à 22:05:11  profilanswer
 

ca l'aire de fonctoiner :) j'était a 2 visiteurs maintenant je suis a3 visiteurs je suis allé sur php admin pour voir les numéro ip et la suprise y en a 3 différentes!! pas des tonne de ip identiques!!!
merci pour le scritp même s'il n'est pas encore sécurisé je me pencherais plus tard il me faut maintenant continuer mon site je voulais d'abord metre le compteur en route :)  :)
 
maintenant j'ai une autre question  :sweat:  
jai mis mon compteur php dans l'index, comment faut t'il faire pour le mettre dans un autre fichier php?
et comment bouger le nombre de visite car je sais faire un lien mais ca reste fixe  :??:


Message édité par keo64 le 10-09-2008 à 22:07:18
n°1785296
Nasga
Posté le 10-09-2008 à 22:09:42  profilanswer
 

Citation :

enfait quant je crée une table je dois saisir obligatoirement myisam? car j'ai laissé par défaut


Pour myisam, c'est un moteur de mysql et accessoirement le plus performant (sur la version 5) en lectures / écritures simple.
 

Citation :

(comment fait ton pour mettre tous le script dans une fenêtre comme ci dessus??


Pour les balises, j'utilise le bouton c/c++ ou les balise cpp ...
 

Citation :

"regarde également var_dump / print_r pour debuger tes script. " c'est ou dans php admin??


Sur php.net :)
 
Apparemment ça marche (4 visiteurs) ^^.
 
Très important également oublie pas :

Code :
  1. mysql_close();


à la fin de ton script, pour fermer la connexion mysql quand tu ne l'utilise plus.

n°1785297
Nasga
Posté le 10-09-2008 à 22:11:28  profilanswer
 

Citation :

maintenant j'ai une autre question  :sweat:  
jai mis mon compteur php dans l'index, comment faut t'il faire pour le mettre dans un autre fichier php?


 
include / require / include_once / require_once
 
Regarde également du coté des fonctions / objets :)

n°1785301
keo64
Posté le 10-09-2008 à 22:14:59  profilanswer
 

merci ces info  
 j'ai mis close sql avant echo ..
mysql_close(); // Déconnexion de MySQ
echo '<p> ' . $nb_IP . ' visiteurs on visité le site !</p>';
 
mais il est mal placé??


Message édité par keo64 le 10-09-2008 à 22:15:18
n°1785519
Nasga
Posté le 11-09-2008 à 12:39:52  profilanswer
 

Tu dois fermer ta connexion mysql a partir du moment ou tu ne t'en sert plus.
 
Si tu n'as plus d'autre requêtes dans ta page tu peux la fermer.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  demande aide pour corriger mon compteur

 

Sujets relatifs
macro pour jeuxvideo aide!Aide sur une expression régulière pour preg_replace()
à l'aide : mon script ne fonctionne pas sous w2kBesoin d'aide pour une expression régulière
Compteur de fichiers uploadéBesoin d'aide
Aide pour une requête de maintenanceAide pour schéma de base de donnée
[MySQL]Aide pour recuperer des bbcodesvbs : besoin d'un aide pour un script d'ajout d'imprimante sous window
Plus de sujets relatifs à : demande aide pour corriger mon compteur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR