Comment exécuter un script php après la fermeture d'une page web?

16 réponses


vald
Réponse acceptée

Bonjour,
tu peux faire un enregistrement a chaque connection dans une table qui memorise la date et lheure de l'utilisateur avec son ip ou son id d'utilisateur,
ensuite quand la page ou le chat est chargé tu affiche le nombre d'utilisateur ou les personnes connecté depuis moins de tant de temps.
la page qui calcul tout ca se charge deffacer les utilisateur deconnecté depuis trop longtemps.

une page : connected.php

<?php
// Connexion à MySQL
require('connexion.php');
// -------
// ÉTAPE 1 : on vérifie si l'IP se trouve déjà dans la table.
// Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "ip" est l'adresse IP du visiteur.
$retour = /*$bdd->query*/mysql_query('SELECT COUNT(*) AS nbre_entrees FROM albumsconnected WHERE ip=\'' . $_SERVER'REMOTE_ADDR'] . '\'');
$donnees = mysql_fetch_array($retour);
//$donnees = $reponse->fetch();
if ($donnees'nbre_entrees'] == 0) // L'IP ne se trouve pas dans la table, on va l'ajouter.
{
    mysql_query('INSERT INTO albumsconnected VALUES(\'' . $_SERVER'REMOTE_ADDR'] . '\', ' . time() . ')');
}
else // L'IP se trouve déjà dans la table, on met juste à jour le timestamp.
{
    mysql_query('UPDATE albumsconnected SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER'REMOTE_ADDR'] . '\'');
}
// -------
// ÉTAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 5 minutes.
// On stocke dans une variable le timestamp qu'il était il y a 5 minutes :
$timestamp_5min = time() - (60 * 5); // 60 * 5 = nombre de secondes écoulées en 5 minutes
mysql_query('DELETE FROM albumsconnected WHERE timestamp < ' . $timestamp_5min);
// -------
// ÉTAPE 3 : on compte le nombre d'IP stockées dans la table. C'est le nombre de visiteurs connectés.
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM albumsconnected');
$donnees = mysql_fetch_array($retour);
?>

ton code a placer ou tu veux :

<?php
include ('connected.php');
echo '<p>' . $donnees'nbre_entrees'] . ' visiteur(s) connecté(s)</p>';
?>

la page connexion.php contient tes parametres de connexion.

J'espere t'avoir aidé

Tu ne peux pas, il faudrait bloquer la fermeture du site en Javascript (mais très chiant pour l'utilisateurs)

En ajax avec un evenement sur la fermeture de la page ?
Même si comme le précise Grafikart c'est pas opti pour les utilisateurs

bakoly25
Auteur

J'ai essayé les évènements onbeforeunload et onunload mais a chaque fois que j'actualise la page, une boite dialogue me demande si je veux quitter le site.

Voila tu met le doigt sur le problème :)

bakoly25
Auteur

Et comment contourner se problème?

bakoly25
Auteur

Sinon est ce qu'on pourait mettre un timer pour chaque requete qui déconnecte l'utilisateur s'il n'envoie aucun données ($_POST)

Ah en fait tu veut déconnecter automatiquement les utilisateurs quand il ferme la page ?

bakoly25
Auteur

Oui. En fait, il ya un script en php que je voudrais exécuter quand il ferme la page ou le navigateur. Ce script met à jour un champs dans une base de données.

il met quoi à jour ?

A mon avis c'est pour tracer le delog du site...

bakoly25
Auteur

Il met a jour l'état de la session. Quand un utilisateur parvient à se connecter l'état de la session est initialisé à 1. Et quand il se déconnecte ou quitte le navigateur sans se déconnecter l'état de la sesssion est réinitialisé à 0.

la session est détruite automatiquement quand la page est fermé il me semble.

Ce qu'il te faudrait je pense c'est ajouter à ton système d'identification une gestion par cookies

On ne peut pas contourner le problème faut que tu trouver un autre système pour ce que tu cherche à faire.

bakoly25
Auteur

Est-il possible de mettre un timer sur une requete MySQL? Si oui, comment? Exemple exécuter une requete après x secondes.

bakoly25
Auteur

Merci pour votre aide > vald