|
Informations |
Messages |
|
Mirdin
155 messages
Carte Graphique 3D
|
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
14137 messages
No-Life
Administrateur
|
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 ça
|
| |
Devenez fan d'Aidoweb sur Facebook \o/ - N'oubliez pas de cliquer sur [Résolu] une fois votre problème réglé
|
|
|
|
Mirdin
155 messages
Carte Graphique 3D
|
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
14137 messages
No-Life
Administrateur
|
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 !

Mets un VARCHAR (20) par exemple, pour être large
|
| |
Devenez fan d'Aidoweb sur Facebook \o/ - N'oubliez pas de cliquer sur [Résolu] une fois votre problème réglé
|
|
|
|
Mirdin
155 messages
Carte Graphique 3D
|
Le 22 Juillet 2009 à 11h27
Suis je bête
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
155 messages
Carte Graphique 3D
|
Le 22 Juillet 2009 à 11h37
He bien en faite j'avais oublié d'écrire quelques ligne importante
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
14137 messages
No-Life
Administrateur
|
Le 22 Juillet 2009 à 13h56
Bin nickel
|
| |
Devenez fan d'Aidoweb sur Facebook \o/ - N'oubliez pas de cliquer sur [Résolu] une fois votre problème réglé
|
|
|
|