Portail PHP

Forum de discussion et d'aide au php

Vous n'êtes pas identifié.

Annonce

Regles d'utilisation des forums : pensez à toujours les respecter si vous désirez obtenir des réponses rapides.
FAQ : pensez à toujours chercher dedans si la réponse à votre question est dedans.
Proposez vos news : si vous avez un evenement à annoncer
le chat : venez discuter de php.
 

#1 14-02-2008 14:54:12

Vyk12
Membre
Date d'inscription: 14-02-2008
Messages: 3

Exécuter script php lors de la fermeture de la page

Bonjour,

Je voudrais faire un script PHP qui compte le nombre de visiteurs actuellement connectés. Je voudrais qu'il soit le plus exacte possible, autant dire : l'utilisateur ouvre la page, on ajoute son IP dans la BDD, on lit combien il y a d'IP sur la table, on affiche ce nombre. L'utilisateur ferme la page, on supprime son IP.
Tout ce script est plutôt facile à faire, sauf la dernière étape : supprimer son IP quand il ferme la page. J'ai essayé de faire comme suit :

<html>
<head>
<script type="text/javascript">
function destroy_ip() {
<?php mysql_connect(...) tout le code ... mysql_close(); ?>
}
</script>
</head>
<body onunload="javascript:destroy_ip();">
la page ...
</body>
</html>

Mais ça ne marche pas ! Pourtant je sais qu'on peut mettre du PHP dans du javascript ...
Si ça se trouve, je n'ai même pas besoin de passer par du javascript.
Si quelqu'un a une solution à se problème, javascript ou non, je suis preneur !

@+ !

PS : j'ai aussi essayé <body onunload="<?php destroy_ip(); ?>"> et <body onunload="<?php tout le code ?>"> mais sans succes.

Hors ligne

 

#2 15-02-2008 03:08:52

lolo3129
Membre
Lieu: Paris
Date d'inscription: 10-05-2005
Messages: 543
Site web

Re: Exécuter script php lors de la fermeture de la page

hello,

le php s'exécute côte serveur (dont avant que l'utilisateur ne voit la page). Donc aucun code php ne peut être exécuter lors d'un appel javascript.
Par contre, avec javascript, tu peux appeler une nouvelle page qui ne servira qu'à mettre à jour ta base de donnée. Ca s'appelle l'Ajax.

++

Hors ligne

 

#3 15-02-2008 14:44:04

Vyk12
Membre
Date d'inscription: 14-02-2008
Messages: 3

Re: Exécuter script php lors de la fermeture de la page

Bonjour lolo3129,

Tout d'abord merci de ta réponse smile
Si j'ai bien compris, uniquement avec PHP c'est impossible. Je dois utiliser Javascript qui appelle ma page qui détruira l'IP du visiteur, c'est ça ?
Si j'ai bien compris, alors peux-tu me dire comment procéder ?
Sinon ben ... si tu peux me réexpliquer ... smile

Encore merci ! ++

Hors ligne

 

#4 18-02-2008 03:27:00

lolo3129
Membre
Lieu: Paris
Date d'inscription: 10-05-2005
Messages: 543
Site web

Re: Exécuter script php lors de la fermeture de la page

hello,

effectivement, php tout seul, c'est impossible, puisque ton code php est appelé uniquement AVANT que la page ne soit affichée.

donc ce qu'on fait, c'est qu'avec javascript, on appelle des pages php qui exécute donc du code php. Cela permet d'exécuter du code quand on veut. Par contre, ça nécessite un appel supplémentaire sur le serveur.

cherche un peu du côté de ajax et xmlhttprequest sur google : http://www.google.fr/search?q=ajax+xmlh … =firefox-a
et tu auras plein de tutos.

Hors ligne

 

#5 07-03-2008 12:17:17

Vyk12
Membre
Date d'inscription: 14-02-2008
Messages: 3

Re: Exécuter script php lors de la fermeture de la page

Bonjour,

Désolé de répondre un peu tard, mais j'ai un petit problème.
J'ai essayé sans JS/Ajax d'ouvrir la page destroy_ip.php, et elle marche parfaitement, donc mon problème ne vient pas de cette page.
J'ai fais ma page compteur_live.php, et voici mon code (qu'est-ce qui ne va pas ?) :

Code:

<html>
<head>
<title>Compteur connectés en temps réel</title>
<script type="text/javascript">
function destroy_ip ()
{
    var xhr;
    if (window.XMLHttpRequest)
    { 
        xhr = new XMLHttpRequest();
    } 
    else
    {
        if (window.ActiveXObject)
        {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    request.onreadystatechange = function();
    xhr.open("", "destroy_ip.php", true);
}
</script>
</head>
<body onunload="javascript:destroy_ip();">
<?php
    mysql_connect('localhost','root','');
    mysql_select_db('testsphp');
    $ip = $_SERVER['REMOTE_ADDR'];
    $retour = mysql_query("SELECT * FROM connectes WHERE ip = '$ip'") OR DIE (mysql_error());
    $donnees = mysql_fetch_array($retour);
    if ($donnees == 0)
    {
        mysql_query("INSERT INTO connectes VALUES('$ip')") OR DIE (mysql_error());
    }
    $retour = mysql_query("SELECT COUNT(*) AS nbre_ip FROM connectes") OR DIE (mysql_error());
    $donnees = mysql_fetch_array($retour);
    $connectes = ($donnees['nbre_ip'] == 1) ? 'Il y a 1 visiteur connecté.' : 'Il y a ' . $donnees['nbre_ip'] . ' visiteurs connectés.';
    echo $connectes;
    mysql_close();
?>
</body>
</html>

J'ai de bonnes connaissances en PHP mais JS n'est vraiment pas mon domaine.
Si quelqu'un pouvait me refaire ma fonction destroy_ip() qui fonctionne, j'en serais très reconnaissant.

PS : je ne sais vraiment pas comment m'y prendre pour appeler cette page sachant que je veux n'envoyer de données, que ce soit GET ou POST, est-ce possible ?

Merci à tous ceux qui m'aideront ! @+ !

Dernière modification par Vyk12 (07-03-2008 12:18:04)

Hors ligne