Probleme requete date

Discussion dans 'Web, design' créé par DeScH, 25 Février 2007.

Statut de la discussion:
Fermée.
  1. Offline
    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 :)
    DeScH, 25 Février 2007
    #1
  2. Offline
    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)
    II phl II, 25 Février 2007
    #2
  3. Offline
    oNi- Elite
    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
    oNi-, 25 Février 2007
    #3
  4. Offline
    guslinux Gamerz'ien
    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
    guslinux, 25 Février 2007
    #4
  5. Offline
    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!
    DeScH, 25 Février 2007
    #5
  6. Offline
    oNi- Elite
    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)
    oNi-, 25 Février 2007
    #6
  7. Offline
    DeScH AstaLaVista
    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 :p
    DeScH, 25 Février 2007
    #7
  8. Offline
    oNi- Elite
    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
    oNi-, 25 Février 2007
    #8
  9. Offline
    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.
    guslinux, 25 Février 2007
    #9
  10. Offline
    DeScH AstaLaVista
    Merci a vous deux, je vais faire tt ca :)
    DeScH, 25 Février 2007
    #10
  11. Offline
    oNi- Elite
    Ouep c'est encore mieux que ce que je propose :)
    oNi-, 25 Février 2007
    #11
  12. Offline
    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? :)
    DeScH, 26 Février 2007
    #12
  13. Offline
    DeScH AstaLaVista
    DeScH, 26 Février 2007
    #13
  14. Offline
    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 ;)
    neku, 28 Février 2007
    #14
  15. Offline
    Soulsight Touriste
    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
    Soulsight, 28 Février 2007
    #15
Statut de la discussion:
Fermée.