Probleme requete date

Statut
N'est pas ouverte pour d'autres réponses.

DeScH

AstaLaVista
Salut

Je bloque sur une requete

Je voudrai supprimer les enregistrements qui ont été enregistrés il y a plus de 10 minutes.

J'ai un champ de type "time" qui s'apelle timestamp.

Code:
$heure = date("H:i:s");

$recupip = mysql_query("SELECT * FROM connectes");
while($data =  mysql_fetch_assoc($recupip)){

	$daterec = $data['timestamp'];
	
	if ($daterec == $heure + 600)
	{
	$delete = mysql_query("DELETE FROM connectes WHERE timestamp  >= $heure +600")

	}
}


ca doit ressember a qqch comme ca, mais ca ne marche pas, qq1 saurait m'aider?

Merci :)
 

II phl II

Touriste
Ton champs date est bien un timestamp (un nombre tres grand qui compte le nombre de secondes écoulées depuis 1970) ?

Si oui, je ferais plutot comme ceci :
- calculer le timestamp actuelle = x
- requete : si timestamp de l'enregistrement < x-600 => delete

ce qui donnerait +/-

$tst = x-600;
mysql_query("DELETE FROM connectes WHERE timestamp < $tst)
 

oNi-

:baille: Lecteur
1) faudrait éviter d'utiliser des mots réservés pour les noms de colonnes (TIMESTAMP en est un)

2) le type TIME est représenté comme ceci : HH:MM:SS.fraction
 

guslinux

Gamerz'ien
DeScH a dit:
Salut

Je bloque sur une requete

Je voudrai supprimer les enregistrements qui ont été enregistrés il y a plus de 10 minutes.

J'ai un champ de type "time" qui s'apelle timestamp.

Code:
$heure = date("H:i:s");

$recupip = mysql_query("SELECT * FROM connectes");
while($data =  mysql_fetch_assoc($recupip)){

	$daterec = $data['timestamp'];
	
	if ($daterec == $heure + 600)
	{
	$delete = mysql_query("DELETE FROM connectes WHERE timestamp  >= $heure +600")

	}
}
ca doit ressember a qqch comme ca, mais ca ne marche pas, qq1 saurait m'aider?

Merci :)
Ce que tu veux faire c'est afficher le nombres de conntectés. Un utilisateur est considéré comme déconnecté dès qu'il n'a plus chargé de page pendant 10min.

Petite remarque, il serait optimum de faire une requete MySQL qui se charge de ca.
D'autre part, j'ai moi aussi travaillé avec des timestamps avant de découvrir les fonctions de traitement des dates dispo avec MySQL 4.1. Ca marche bien avec les jours.

Une autre solution est de comparer le timestamps enregistré avec celui d'il y a 10minutes. Et d'effacer tout ce qui est plus ancien que 10minutes.

Par ordre :
- On efface tout ce qui est plus vieux que 10minutes :
"DELETE FROM Your_Table WHERE (UNIX_TIMESTAMP()-time)>600"
- Ensuite on compte le nombre d'entrées présentes dans la table :
"SELECT COUNT(*) FROM Your_Table"

Et le tour est joué.

Liens :
Les fonctions dates de MySQL
Les timestamps avec MySQL
 
1er
OP
DeScH

DeScH

AstaLaVista
c'est bon j'ai trouvé, merci :)

if ($heure-60 > $daterec)
{
$delete = mysql_query("DELETE FROM connectes WHERE timestamp < '".$heure."'");
}


EDIT: je viens de voir aussi ton post, guslinux, bonne idée aussi!
 

oNi-

:baille: Lecteur
Ta logique est bizarre :
- tu vas chercher tous les connectés
- tu boucles en testant timestamp (tu devrais vraiment changer ce nom, ça prête à confusion et c'est pas propre) et si le gars est connecté depuis exactement 10 minutes tu vires tous les connectés de 10 minutes ou plus

Ton select, ta boucle et ton test ne servent à rien (à part rajouter du traitement)
 
1er
OP
DeScH

DeScH

AstaLaVista
oNi- a dit:
Ta logique est bizarre :
- tu vas chercher tous les connectés
- tu boucles en testant timestamp (tu devrais vraiment changer ce nom, ça prête à confusion et c'est pas propre) et si le gars est connecté depuis exactement 10 minutes tu vires tous les connectés de 10 minutes ou plus

Ton select, ta boucle et ton test ne servent à rien (à part rajouter du traitement)
oui mais je vais chercher tous les connectés pour vérifier si l'ip existe deja, si elle existe, je remplace le timestamp et le nom de la page qu'il visite, sinon je crée un enregistrement. Oui je sais pour le timestamp ^^
 

oNi-

:baille: Lecteur
Pas besoin d'aller les chercher tous pour ça :
tu fais un select id_du_gars from ta_table where Col_ip = ip_recherchée limit 1
si 0 ligne
ça n'existe pas donc tu ajoutes le record
sinon
tu fais un update grace à l'id récupéré sur les champs que tu veux
 

guslinux

Gamerz'ien
Ce que tu peux faire c'est effacer toutes les entrées correspondantes à l'ip et tu refais un insert en mettant à jour la date etc ... ainsi pas besoin de test : c'est systématique. Tu peux meme en profité pour effacer les enregistrements datant de plus de 10minutes.
 
1er
OP
DeScH

DeScH

AstaLaVista
Merci a vous deux, je vais faire tt ca :)
 

oNi-

:baille: Lecteur
guslinux a dit:
Ce que tu peux faire c'est effacer toutes les entrées correspondantes à l'ip et tu refais un insert en mettant à jour la date etc ... ainsi pas besoin de test : c'est systématique. Tu peux meme en profité pour effacer les enregistrements datant de plus de 10minutes.
Ouep c'est encore mieux que ce que je propose :)
 
1er
OP
DeScH

DeScH

AstaLaVista
J'aurai encore une petite question:

Je voudrai une requete permettant de supprimer les messages postés le jour d'avant (je ne veux aps h-24 mais tout ce qui est avant minuit).

Qq1 saurait m'aider? :)
 

neku

Codeur roumain
Code:
<?
	$SQL = new MySQL;
	$SQL->Connect($sql_login,$sql_password,$sql_host,$sql_db);
		
	$SQL->Query("SELECT * FROM blog_Infos WHERE ID=1");
	$donnees = mysql_fetch_array($SQL->QueryRep);
	$Viewpages = $donnees['Viewpages'] + 1;
	$Version = $donnees['Version'];
	$Visites = $donnees['Visites'];
	$DayVisites = $donnees['DayVisites'];
	$IP = $HTTP_SERVER_VARS["REMOTE_ADDR"];
	$SQL->Disconnect();
	
	function UpdateViewPages($Pages) {
		include('./modules/config.php');
		$SQLU = new MySQL;
		$SQLU->Connect($sql_login,$sql_password,$sql_host,$sql_db);
		$SQLU->Query("UPDATE blog_Infos SET Viewpages=".$Pages." WHERE ID=1");
		$SQLU->Disconnect();
	}
	
	function VerifIP($IP) {
		include('./modules/config.php');
		$SQLU = new MySQL;
		$SQLU->Connect($sql_login,$sql_password,$sql_host,$sql_db);
		$SQLU->Query("SELECT * FROM infos_IP WHERE IP='".$IP."'");
		$SQLU->Disconnect();
		
		if (mysql_num_rows($SQLU->QueryRep) == 0) {
			return 0;
		}
		else {
			return 1;
		}
	}
	
	function UpdateVisites($Visites, $DayVisites,$IP) {
		include('./modules/config.php');
		
		$SQLU = new MySQL;
		$SQLU->Connect($sql_login,$sql_password,$sql_host,$sql_db);
		
		//On check la date pour le compteur de visite journalière
		$SQLU->Query("SELECT * FROM blog_Infos WHERE ID=1");
		$donnees = mysql_fetch_array($SQLU->QueryRep);
		$Date = $donnees['Date'];
		if ($Date < date("Y-m-d")) {
			//On reset le compteur de visites journalier
			$SQLU->Query("UPDATE blog_Infos SET DayVisites=0 WHERE ID=1");
			$DayVisites = 0;
			//On met à jour la date
			$SQLU->Query("UPDATE blog_Infos SET Date=CURDATE()");
		}
		
		//On supprime toutes les IP qui ont plus de 24h
		$SQLU->Query("DELETE FROM infos_IP WHERE Date<CURDATE()");
		$SQLU->Disconnect();
		
		//Si l'ip du visiteur est pas dans la DB
		if (!VerifIP($IP)) {
			//On l'ajoute
			$SQLU = new MySQL;
			$SQLU->Connect($sql_login,$sql_password,$sql_host,$sql_db);
			$SQLU->Query("INSERT INTO infos_IP (ID,IP,Date) VALUE('','".$IP."',CURDATE())");
			
			//On incrémente le compteur
			$SQLU->Query("UPDATE blog_Infos SET Visites=".($Visites + 1)." WHERE ID=1");
			$SQLU->Query("UPDATE blog_Infos SET DayVisites=".($DayVisites + 1)." WHERE ID=1");
			$SQLU->Disconnect();
		}
	}
?>
Voila le script que j'ai fais pour mon blog, ca log les ip des visiteurs, si l'ip a plus de 24h on l'eject

le fichier chez moi s'appel infos.h

j'ai donc ajouté au début de mon index.php

Code:
include('./modules/Infos/Infos.h');
UpdateVisites($Visites,$DayVisites,$IP);
UpdateViewPages($Viewpages);
inspire toi et modifie comme tu le sens ;)
le timestamp est pas obligatoire, y a des fonctions php et mysql avancée pour traiter les dates ;)
 

Soulsight

Elite
euh ... confondez pas timestamp php et timestamp mysql ...

timestamp agit sur même principe que date, datetime ...

c'est pour ca qu'il existe les fonctions :

UNIX_TIMESTAMP()
FROM_UNIXTIME()

On sait faire déjà pas mal de choses avec les fonctions DATE de mysql !!! ( date_format, addtime, SUBTIME() ... )

CFR : http://dev.mysql.com/doc/refman/5.0/fr/datetime.html
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut