Problème sauvegarde dans bdd
Bonjour à tous
j'ai un étrange problème :
j'ai un script qui me sauvegarde l'adresse ip du visiteur
seulement si ce dernier n'est pas venu durant les X dernières heures
(en locurrence 6h)
Sinon, il met à jour l'ip du visiteur en modifiant le timestamp
Mon script marche en Local, mais sur free, il ne fait pas de UPDATE,
mais que des INSERT ...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
//represente le nombre d heures avant que l ip ne soit REenregistree
define('Nbdheures','6');
//on sauvegarde une seule ip par 6h
function saveIp(){
connexionBase();
/*fonction située dans le meme fichier qui renvoie l ip du visiteur*/
$IpVisiteur=getIP();
$allIp1 = @mysql_query("SELECT * FROM visiteurs") or die( 'Erreur MySQL' );;
$allIp2 = @mysql_fetch_assoc($allIp1);
$req1 = @mysql_query("SELECT COUNT(*) AS nbre_entrees FROM visiteurs WHERE ip='".$IpVisiteur."'") or die( 'Erreur MySQL' );
$now = time();
$unJourPlusTard=Nbdheures*3600; // 6h plus tard
if((mysql_result($req1, 0))==0){
//si l'ip n existe pas, cela signifie qu il s agit d un nouveau visiteur, donc on stocke son IP
@mysql_query("INSERT INTO visiteurs VALUES('','".$IpVisiteur."','".$now."')") or die( 'Erreur MySQL' );
}
//sinon, cela signifie que l ip est presente dans la base
//deux possibilites sont alors possibles : la derniere visite remonte a plus d un jour
//auquel cas, on rajoute l ip, soit, l ip remonte a moins d un jour, alors, on fait une MAJ du timestamp
elseif(($now-$allIp2['timestamp'])<=$unJourPlusTard){
//echo '<h2>Mis a jour</h2>';
$identifiant=$allIp2['id'];
@mysql_query("UPDATE visiteurs SET timestamp='".$now."' WHERE ip='".$IpVisiteur."' AND id='".$identifiant."'") or die( 'Erreur MySQL' );
}
else {
@mysql_query("INSERT INTO visiteurs VALUES('','".$IpVisiteur."','".$now."')") or die( 'Erreur MySQL' );
}
@mysql_close() or die( 'Erreur MySQL' );;
} |
ma base est composée des champs suivants :
Code:
1 2 3 4
|
id int(11) Non auto_increment
ip varchar(15) latin1_swedish_ci Non
timestamp int(11) Non 0 |
Sur free, lors de ma 1ère visite, je rentre dans le 1er if,
si je fais F5, je passe dans le dernier else
Contrairement à en local, ou je serai passé dans le elseif
J'espère que je suis assez clair :roll: