Achetez et vendez votre matériel multimédia d'occasion sur notre service de petites annonces informatiques gratuites

Compteur de visite fait maison... [Résolu]

Forum informatique > Aide création et gestion de site > Compteur de visite fait maison... [Résolu]

<<<1>>>

[Page 1 sur 1 - 7 messages]
Informations Messages

Mirdin

Avatar de Mirdin
155 messages
Carte Graphique 3D
Carte Graphique 3D

Lien direct Le 22 Juillet 2009 à 01h51

Bonjour a tous,
Je me suis mis en tête de réaliser un petit compteur de visite avec base de donnée mysql afin de pouvoir exploiter les données ensuite (stockage dans une autre table afin de faire des statistique ou tout autre chose)
Mais voilà, le code ne donne pas le résulta espéré... il ne donne pas de résultat du tout en faite ^^
J'ai du faire des trucs pas très catholique dans se code...

Code


<?php
//ip de l'utilisateur
$ip = $_SERVER['REMOTE_ADDR'];
//heure actuelle
$time = time();
//connection bdd
mysql_connect("localhost", "root", "mysql");
mysql_select_db("data");

//on regarde la date de la 1ere visite ( $last )
$donnee = mysql_query("SELECT * FROM site_visite WHERE id = '1'");
$donfin = mysql_fetch_array($donnee);
$last = $donfin['time'];
//si la derniere visite n'etais pas aujourd'hui
if( date("d/m/Y", $time ) < date("d/m/Y", $last ) ){
//on compte le nombre d'entrée de la table
$donnee = mysql_query("SELECT COUNT(*) AS nbre_entree FROM site_visite");
$donfin = mysql_fetch_array($donnee);
$nbr = $donfin['nbre_entree'];
//on stock ca dans l'historique (le nombre de visite ($nbr) et la date ($last) )
mysql_query("INSERT INTO site_historique(visite, time) VALUES('$nbr', '$last')");
//on vide la table
mysql_query("TRUNCATE TABLE `site_visite`");
}else{
//sinon, on ajoute l'entrée a condition qu'il n'y soit pas deja
$donnee = mysql_query("SELECT * FROM site_visite");
$ok=true;
while($donfin=mysql_fetch_array($donnee))
{
if($donfin['ip'] == $ip){
$ok=false;
}
}
//si $ok = true, c'est une 1ere visite, on ajoute a la bdd
if( $ok == true ){
mysql_query("INSERT INTO site_visite(ip, time) VALUES('$ip', '$time')");
}
}
mysql_close();
?>



voici le code de la table:

Code


CREATE TABLE IF NOT EXISTS `site_visite` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` int(15) NOT NULL,
`time` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `site_historique` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`visite` int(11) NOT NULL,
`time` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;



J'espère que vous pourrez m'aider!

Amicalement,
Mirdin

 

Pouzy

Avatar de Pouzy
14137 messages
No-Life
No-Life
Administrateur
Administrateur

Lien direct Le 22 Juillet 2009 à 01h58

Coucou,

Un petit conseil, mets des echo() pour voir ce que ton script exécute ou pas. PAr exemple :

Code


if($donfin['ip'] == $ip)
{
$ok=false;
echo "$OK = FALSE";
}
}
//si $ok = true, c'est une 1ere visite, on ajoute a la bdd
if( $ok == true ){
mysql_query("INSERT INTO site_visite(ip, time) VALUES('$ip', '$time')");
echo "REQUETE SQL EFFECTUEE";
echo mysql_error();
}



Là, le mysql_error(), te reneverra l'erreur SQL si le problème est lié à la requête. Au moins, tu verras si ton script va jusque à la requête ! S'il n'y va pas, faut mettre des echo un peu partout pour trouver où il va, où ça bloque, tout çaContent

Devenez fan d'Aidoweb sur Facebook \o/ - N'oubliez pas de cliquer sur [Résolu] une fois votre problème réglé
 

Mirdin

Avatar de Mirdin
155 messages
Carte Graphique 3D
Carte Graphique 3D

Lien direct Le 22 Juillet 2009 à 02h24

J'avais déjà tester avec des echo et il allait jusqu'à la fin mais rien n'apparaissait dans la bdd

j'ai inserrer les commandes que tu m'as conseillé, et voici le résultat:

Citation


REQUETE SQL EFFECTUEE
Data truncated for column 'ip' at row 1



"Data truncated for column 'ip' at row 1" ca signifie quoi au juste?

 

Pouzy

Avatar de Pouzy
14137 messages
No-Life
No-Life
Administrateur
Administrateur

Lien direct Le 22 Juillet 2009 à 10h22

Un problème de type de champ.. quel est le type du champ "ip" dans ta base ? Ca ne peut pas être un INT, MEDIUMINT, BIGINT ou autre truc se rapportant à un numéro, du fait de la présence des points dans l'IP !

Hello

Mets un VARCHAR (20) par exemple, pour être largeSourire

Devenez fan d'Aidoweb sur Facebook \o/ - N'oubliez pas de cliquer sur [Résolu] une fois votre problème réglé
 

Mirdin

Avatar de Mirdin
155 messages
Carte Graphique 3D
Carte Graphique 3D

Lien direct Le 22 Juillet 2009 à 11h27

Suis je bête Fou

j'avais bien mis 15 en taille mais j'avais oublié les points...
Avec un VARCHAR (15) ca passe nickel

Mais je me pose quand meme une question...

Code

if( date("d/m/Y", $time ) < date("d/m/Y", $last ) ){


c'est possible ca? D'après ma logique oui mais bon mes connaissances en php ne sont pas encore très poussées...

En tout cas, merci beaucoup a toi

Edit: En faite, non mon if ne fonctionne pas...

 

Mirdin

Avatar de Mirdin
155 messages
Carte Graphique 3D
Carte Graphique 3D

Lien direct Le 22 Juillet 2009 à 11h37

He bien en faite j'avais oublié d'écrire quelques ligne importante Fou

Voici le code qui il me semble est maintenant fonctionnel

Code


<?php
//ip de l'utilisateur
$ip = $_SERVER['REMOTE_ADDR'];
//heure actuelle
$time = time();
//connection bdd
mysql_connect("localhost", "root", "mysql");
mysql_select_db("data");

//on regarde la date de la 1ere visite ( $last )
$donnee = mysql_query("SELECT * FROM site_visite WHERE id = '1'");
$donfin = mysql_fetch_array($donnee);
$last = $donfin['time'];
//si la derniere visite n'etais pas aujourd'hui
echo $time;
echo '';
echo $last;
echo '';
echo date("d/m/Y", $time );
echo '';
echo date("d/m/Y", $last );
if( date("d/m/Y", $time ) > date("d/m/Y", $last ) ){
//on compte le nombre d'entrée de la table
$donnee = mysql_query("SELECT COUNT(*) AS nbre_entree FROM site_visite");
$donfin = mysql_fetch_array($donnee);
$nbr = $donfin['nbre_entree'];
//on stock ca dans l'historique (le nombre de visite ($nbr) et la date ($last) )
mysql_query("INSERT INTO site_historique(visite, time) VALUES('$nbr', '$last')");
//on vide la table
mysql_query("TRUNCATE TABLE `site_visite`");
//on ajoute la nouvelle date
mysql_query("INSERT INTO site_visite(ip, time) VALUES('$ip', '$time')");
}else{
//sinon, on ajoute l'entrée a condition qu'il n'y soit pas deja
$donnee = mysql_query("SELECT * FROM site_visite");
$ok=true;
while($donfin=mysql_fetch_array($donnee))
{
if($donfin['ip'] == $ip){
$ok=false;
}
}
//si $ok = true, c'est une 1ere visite, on ajoute a la bdd
if( $ok == true ){
mysql_query("INSERT INTO site_visite(ip, time) VALUES('$ip', '$time')");
}
}
mysql_close();
?>



Merci a toi pour l'aide

Amicalement,
Mirdin

 

Pouzy

Avatar de Pouzy
14137 messages
No-Life
No-Life
Administrateur
Administrateur

Lien direct Le 22 Juillet 2009 à 13h56

Bin nickelContent

Devenez fan d'Aidoweb sur Facebook \o/ - N'oubliez pas de cliquer sur [Résolu] une fois votre problème réglé
 

<<<1>>>

[Page 1 sur 1 - 7 messages]

Forum informatique > Aide création et gestion de site > Compteur de visite fait maison... [Résolu]