demande aide pour corriger mon compteur - PHP - Programmation
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
Marsh Posté le 10-09-2008 à 00:33:34
bon, ca marchait avec des sessions
Code :
|
mais il faut faire appel aux sessions
bon courage
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?
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
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..
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>';
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
Marsh Posté le 10-09-2008 à 12:28:56
merci pour le renseignement
je testerais tous ca se soir chez moi
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
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
Marsh Posté le 10-09-2008 à 14:09:40
Ben... essaie
Plus sérieusement, je pense que ce serait plutot:
Code :
|
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
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.
Marsh Posté le 10-09-2008 à 19:30:45
finalement ca n'a pas marché
faut que je reprend la ou j'ai été
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
}
?>
Marsh Posté le 10-09-2008 à 21:27:44
Code :
|
Le sql est le suivant :
Code :
|
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
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>';
?>
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??
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
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
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 :
|
à la fin de ton script, pour fermer la connexion mysql quand tu ne l'utilise plus.
Marsh Posté le 10-09-2008 à 22:11:28
Citation : maintenant j'ai une autre question |
include / require / include_once / require_once
Regarde également du coté des fonctions / objets
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é??
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.
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>';
?>