IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

gestion temps (modifier variable)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2007
    Messages : 130
    Par défaut gestion temps (modifier variable)
    bonjour, je me casse la tete avec un soucis.

    en image :


    le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <?php
    /////---- desactivation
    $renvs=mysql_query("SELECT * FROM panel WHERE  nick_handle='$nick_handle' ORDER BY heure_connect DESC LIMIT 1") or die ('Erreur : '.mysql_error());
    $renv=mysql_fetch_assoc($renvs);
    $heure1=$renv['heure_connect'];
     
    $heure_fin = date("H:i:s", mktime(date("H"), date("i")+'20',  date("s")));
     
    if ($heure1 > $heure_fin)
    {
    $active2="off_line";
    $sql=("UPDATE panel SET  active='$active2' WHERE nick_handle='$nick_handle' AND client='$client'");
    $data=mysql_query($sql) or die (mysql_error());
    }
    ?>
    ce que je cherche a faire c'est mettre a jour la bdd, c'est a dire que toute connexion dépassant 20 minutes pass en off-line hors je n'y arrive pas,
    les temps sont correct :

    $heure1 = heure de connexion du membres sous forme 00.00.00
    $heure_fin = heure du moment + 20 minutes

    donc dans la bdd toutes les connexion dépassant cette heure de fin doivent être désactivé sauf celle en cours.

    merci car la je tourne en rond depuis ce matin voir même tôt/tard dans la nuit ...

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    ce que je cherche a faire c'est mettre a jour la bdd, c'est a dire que toute connexion dépassant 20 minutes pass en off-line
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE panel
    SET active = 'off_line'
    WHERE active = 'on_line' AND heure_connect < NOW( ) - INTERVAL 20 MINUTE

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Plusieurs questions :
    - Pourquoi avoir séparé date et heure ? Un timestamp aurait été tout aussi approprié.
    - Quand tu dis "toutes les connexion dépassant cette heure de fin doivent être désactivé sauf celle en cours", comment sais-tu que celle en cours ne dépasse pas le temps limite ? La session peut avoir été initialisée longtemps auparavant et être encore active ou inactive. Comment le savoir ? Tu devrais avoir un champ du type : activity avec un timestamp.

    Sinon pour ta requête : tu peux le faire directement via les fonctions de MySql, pas besoin de cuisine en local :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "UPDATE panel SET active='off_line' WHERE nick_handle='$nick_handle' AND client='$client' AND TIME_TO_SEC(`heure`) < (TIME_TO_SEC(NOW()) - 20*60)";
    Avec ton approche (séparer date et heure), ça va être mariole si les connexions démarrent la veille genre 23h55 et tu contrôles à 00h10 par exemple... Pour ce cas de figure, il est plus simple de reconstituer un timestamp (qui aurait dû être présent dès le début, mais bon):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "UPDATE panel SET active='off_line' WHERE nick_handle='$nick_handle' AND client='$client' AND TIMESTAMPDIFF(MINUTE, DATE_ADD(`date`, INTERVAL `heure` HOUR_SECOND), NOW()) > 20";
    Sauf boulette de ma part

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2007
    Messages : 130
    Par défaut
    merci

    alors j'ai fais comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "UPDATE panel SET active='off_line' WHERE nick_handle='$nick_handle' AND client='$client' AND TIMESTAMPDIFF(MINUTE, DATE_ADD(`date_connect`, INTERVAL `heure_connect` HOUR_SECOND), NOW()) > 20";
    au début j'avais deux on-line et il me les a bien fermés par contre si je me
    reconnecte je ne passe pas a on-line je reste a off-line même connecté et dans les - de 20mn d’écart, mais je croit que c'est du au passage de 23h00 a 00h00 car les délais sont bizarre car la il m'ajoute 1h30 sur le total:

    Connexion : 23:28:53
    Autorisé : 00:56:22
    alors que tout a l'heure il m'indiquait bien la différence.

    je vais attendre demain pour voir si ca vient vraiment du passage a 00h00

  5. #5
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2007
    Messages : 130
    Par défaut
    alors j'ai réussi a régler ce soucis maintenant j'ai un soucis au niveau d'un comparaison de date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    $etat5 ='fin de durée';
    $etat6 ='actif';
     
    /////-----mise a jour duree
    	$datejour = date('d/m/Y');
    	//la date du fin est stocké dans une base de données
            //on extracte la date du fin depuis la bdd et on la met dans une variable $datefin
    	$datefin= $env['date_fin'];  
     
            //explode pour mettre la date du fin en format numerique: 12/05/2006  -> 12052006
    	$dfin = explode("/", $datefin); 
     
            //explode pour mettre la date du jour en format numerique: 31/05/2009  -> 31052009
            $djour = explode("/", $datejour); 
     
            // concaténation pour inverser l'ordre: 12052006 -> 20060512
    	$finab = $dfin[2].$dfin[1].$dfin[0];
            // concaténation pour inverser l'ordre: 31052009 -> 20090531
    	$auj = $djour[2].$djour[1].$djour[0]; 
     
    	// Ensuite il suffit de comparer les deux valeurs
     
    	if ($auj>$finab)
    	 { $sql=("UPDATE factures SET  etat='$etat5' WHERE nom='$nom' AND client='$client'  ");
           $data=mysql_query($sql) or die (mysql_error());}
     
    	else
         { $sql=("UPDATE factures SET  etat='$etat6' WHERE nom='$nom' AND client='$client'  ");
           $data=mysql_query($sql) or die (mysql_error());}
     
     
    //// fin mise a jour
    tout passe en "fin de durée" alors que certaine date de fin sont encore valide.

    merci

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Pour les dates il faut arrêter la cuisine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $today = new DateTime('now');
    $end   = DateTime::createFromFormat('d/m/Y', $env['date_fin']);
    if ($today > $end) {
     
    }

  7. #7
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2007
    Messages : 130
    Par défaut
    merci,
    j'ai fais comme ca mais la je n'est plus rien ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /////-----mise a jour duree
         $today = new DateTime('now');
         $end   = DateTime::createFromFormat('d/m/Y', $env['date_fin']);
         if ($today > $end) 
     
    	 { $sql=("UPDATE factures SET  etat='$etat5' WHERE nom='$nom' AND client='$client'  ");
           $data=mysql_query($sql) or die (mysql_error());}
     
    	else
         { $sql=("UPDATE factures SET  etat='$etat6' WHERE nom='$nom' AND client='$client'  ");
           $data=mysql_query($sql) or die (mysql_error());}
    ----------------

    j'ai modifier la premiere ligne qui me mettais en default :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /////-----mise a jour duree
         $today = date("d/m/Y");
         $end   = DateTime::createFromFormat('d/m/Y', $env['date_fin']);
         if ($today > $end) 
     
    	 { $sql=("UPDATE factures SET  etat='$etat5' WHERE nom='$nom' AND client='$client'  ");
           $data=mysql_query($sql) or die (mysql_error());}
     
    	else
         { $sql=("UPDATE factures SET  etat='$etat6' WHERE nom='$nom' AND client='$client'  ");
           $data=mysql_query($sql) or die (mysql_error());}
    voila le résultat :



    les deux reste en etat actif alors que l'une des date n'est plus valable.

Discussions similaires

  1. Modifier variable Form1 en temps réél depuis form2
    Par furtif1 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/11/2009, 09h59
  2. [Gestion onglets] Modifier Leurs Tailles ?
    Par MAXXPER dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 12/12/2006, 11h00
  3. Réponses: 3
    Dernier message: 13/04/2006, 21h55
  4. Modifier variable php suite à un clique
    Par budiste dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 29/11/2005, 16h06
  5. [D6] Modifier variable environnement système !?
    Par Lung dans le forum API, COM et SDKs
    Réponses: 32
    Dernier message: 19/05/2005, 19h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo