demande aide pour corriger mon compteur

demande aide pour corriger mon compteur - PHP - Programmation

Marsh Posté le 09-09-2008 à 21:57:16    

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>';
 
?>

Reply

Marsh Posté le 09-09-2008 à 21:57:16   

Reply

Marsh Posté le 09-09-2008 à 23:20:27    

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

Reply

Marsh Posté le 10-09-2008 à 00:33:34    

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
Reply

Marsh Posté le 10-09-2008 à 07:41:10    

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?

Reply

Marsh Posté le 10-09-2008 à 09:04:35    

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

Reply

Marsh Posté le 10-09-2008 à 09:57:02    

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

Reply

Marsh Posté le 10-09-2008 à 11:56:01    

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>';
 

Reply

Marsh Posté le 10-09-2008 à 12:27:44    

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

Reply

Marsh Posté le 10-09-2008 à 12:28:56    

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

Reply

Marsh Posté le 10-09-2008 à 12:56:24    

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


---------------
http://www.ypikay.com
Reply

Marsh Posté le 10-09-2008 à 12:56:24   

Reply

Marsh Posté le 10-09-2008 à 12:58:39    

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
Reply

Marsh Posté le 10-09-2008 à 14:09:40    

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
Reply

Marsh Posté le 10-09-2008 à 19:22:08    

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
Reply

Marsh Posté le 10-09-2008 à 19:30:45    

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
Reply

Marsh Posté le 10-09-2008 à 20:12:33    

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
}  
?>

Reply

Marsh Posté le 10-09-2008 à 21:27:44    

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 :)

Reply

Marsh Posté le 10-09-2008 à 21:32:13    

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
Reply

Marsh Posté le 10-09-2008 à 21:51:15    

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
Reply

Marsh Posté le 10-09-2008 à 22:05:11    

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
Reply

Marsh Posté le 10-09-2008 à 22:09:42    

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.

Reply

Marsh Posté le 10-09-2008 à 22:11:28    

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 :)

Reply

Marsh Posté le 10-09-2008 à 22:14:59    

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
Reply

Marsh Posté le 11-09-2008 à 12:39:52    

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed