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

AJAX Discussion :

Mise à jour de statut automatiquement


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut Mise à jour de statut automatiquement
    Bonjour !

    J'ai un script qui met à jour automatiquement le statut du membre en ligne suivant un certain temps d'inactivité. Ma fonction testerActivite() fonctionne très bien, cependant je n'arrive pas à mettre à jour le statut en BDD via Ajax :/

    Pouvez-vous m'aidez svp ?

    Voici mon code :

    header.php :
    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
     
    <script type="text/javascript" src="<?php echo ROOTPATH; ?>/js/measure_activity.js"></script>
        </head>
     
        <body onload="refreshChat();" onkeydown="activite_detectee = true;" onmousemove="activite_detectee = true;"> 
    		<div id="page">
    		<div id="statut">
    		<?php
                            if(isset($_SESSION['id']))
                            {
                                    if(isset($_GET['statut']))
                                    {
                                            $statut = $_GET['statut'];
                                            $query = $bdd->prepare('INSERT INTO online(online_status) VALUES(?) WHERE online_members = ?');
                                            $query->execute(array($statut, $_SESSION['id']));
                                    }
                            }
                    ?>
    		</div>
    measure_activity.js :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    // On déclare et initialise la variable
    var activite_detectee = false;
    var intervalle = 100;
    var temps_inactivite = 0;
    var inactivite_persistante = true;
     
    function getXMLHttpRequest() {
    	var xhr = null;
     
    	if (window.XMLHttpRequest || window.ActiveXObject) {
    		if (window.ActiveXObject) {
    			try {
    				xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			} catch(e) {
    				xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			}
    		} else {
    			xhr = new XMLHttpRequest(); 
    		}
    	} else {
    		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
    		return null;
    	}
     
    	return xhr;
    }
     
    function MAJStatut(statut)
    {
    	var xhr = getXMLHttpRequest();
    	xhr.onreadystatechange = function() {
    			if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    					document.getElementById('statut').innerHTML = xhr.responseText; // Données textuelles récupérées
    			}
    	};
     
    	xhr.open("GET", "header.php?statut="+statut, true);
    	xhr.send(null);
    }
     
     
    // On crée la fonction qui teste toutes les x secondes l'activité du visiteur via activite_detectee
    function testerActivite() 
    {
    	// On teste la variable activite_detectee
        // Si une activité a été détectée [On réinitialise activite_detectee]
        if(activite_detectee)
    	{
    		activite_detectee = false;
    		temps_inactivite = 0;
            inactivite_persistante = false;
    		var statut = "actif";
    		MAJStatut(statut);
    	}
        // Si aucune activité n'a été détectée
        else 
    	{
    		// Si l'inactivite est persistante [on met à jour temps_inactivite]
            if(inactivite_persistante) 
    		{
    			temps_inactivite += intervalle;
    		}
            // Si le temps d'inactivite dépasse les 30 secondes
            if(temps_inactivite >= 30000)
    		{
    			statut = "inactif";
    			MAJStatut(statut);
    		}
    		// Si l'inactivite est nouvelle [on met à jour inactivite_persistante]
    		else
    		{
    			inactivite_persistante = true;
    		}
    	}
    	// On relance la fonction ce qui crée une boucle
    	setTimeout('testerActivite();', intervalle);
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	xhr.open("GET", "header.php?statut="+statut, true);
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	xhr.open("GET", "online-statut-update.php?statut="+statut, true);
    Avec online-statut-update.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php session_start();
    header('Content-type:text/html; charset=UTF-8');	// encodage UTF-8
    if(isset($_SESSION['id']) && isset($_GET['statut']))
    {
    	// ----------------
    	// connexion à la BdD
    	require('./connexion_bdd.php'); // (à adapter en fonction de ton mode de connexion)
    	// ----------------
    	// Mise à jour du statut
    	$query = $bdd->prepare('INSERT INTO online (online_status) VALUES(?) WHERE online_members = ?');
    	$query->execute(array($_GET['statut'], $_SESSION['id']));
    }
    ?>

    Par contre :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    					document.getElementById('statut').innerHTML = xhr.responseText; // Données textuelles récupérées
    Que cherches-tu à récupérer/afficher ici ?

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut
    Bonjour, merci pour vos réponses,

    En fait je début en AJAX, je ne dois rien mettre entre les accolades du if ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    De quelles accolades parles-tu ??

    Peux-tu expliquer clairement quel résultat tu souhaites obtenir ?
    1/ Update du statut - OK
    2/ Ensuite ?
    • tu veux afficher quelque chose dans <div id="statut"></div> ?
    • Si oui, Quoi ?
    • ...


    Plus important : as-tu bien compris comment fonctionne Ajax ?
    Dernière modification par Invité ; 25/10/2015 à 14h29.

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut
    En fait, je ne souhaite rien afficher, je veux juste mettre à jour le statut.

    Je débute en AJAX donc mes connaissances sont fragiles encore..

  6. #6
    Invité
    Invité(e)
    Par défaut
    OK.

    Si on se réfère à ce tuto :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function MAJStatut(statut)
    {
    	var xhr = getXMLHttpRequest();
    	xhr.onreadystatechange = function() {
    		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    			// (on ne fait rien ici)
    		}
    	};
    	xhr.open('POST', 'online-statut-update.php', true); // on passe les paramètres en POST
    	xhr.send('statut='+statut);
    }
    et online-statut-update.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php session_start();
    header('Content-type:text/html; charset=UTF-8');	// encodage UTF-8
    if(!empty($_SESSION['id']) && isset($_POST['statut']))
    {
    	// ----------------
    	// connexion à la BdD
    	require('./connexion_bdd.php'); // (à adapter en fonction de ton mode de connexion)
    	// ----------------
    	// Mise à jour du statut
    	$query = $bdd->prepare('INSERT INTO online (online_status) VALUES(?) WHERE online_members = ?');
    	$query->execute(array($_POST['statut'], $_SESSION['id']));
    }

Discussions similaires

  1. Réponses: 10
    Dernier message: 03/03/2009, 11h46
  2. mise à jour sous formulaire automatique
    Par mumu64 dans le forum IHM
    Réponses: 2
    Dernier message: 12/09/2008, 10h12
  3. mise à jour sous formulaire automatique
    Par maxeur dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/01/2008, 09h12
  4. mise à jour de TCD automatiquement
    Par dani317 dans le forum Excel
    Réponses: 11
    Dernier message: 03/04/2007, 16h37
  5. Mise à jour champ texte automatique
    Par Chlo dans le forum Access
    Réponses: 6
    Dernier message: 25/01/2007, 10h20

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