8797 sujets

Développement web côté serveur, CMS

Bonsoir à tous Smiley smile

J'ai un problème avec mon script qui devrait afficher le nombre de visiteurs connectés : je suis avec quelqu'un au téléphone qui est sur mon site, j'y suis aussi, et même après plusieurs actualisations, je reste à 1 visiteur connecté. De plus la seule entrée dans ma BDD qui reste tout le temps est une IP que je ne connais pas, et qui n'est pas la mienne, ni une IP proche de chez moi. Je pense que c'est l'IP du serveur ou quelque chose comme ça. Toujours est-il que mon IP ne se retrouve jamais dans la BDD quand je suis connecté Smiley ohwell

Le script PHP :


<?php
 
        mysql_connect("localhost", "mon_login", "mon_mdp");
        mysql_select_db("ma_base");
 
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'') or die (mysql_error());
$donnees = mysql_fetch_array($retour);
 
if ($donnees['nbre_entrees'] == 0)
{
    mysql_query('INSERT INTO connectes VALUES(\'' . $_SERVER['REMOTE_ADDR'] . '\', ' . time() . ')') or die (mysql_error());
}
else
{
    mysql_query('UPDATE connectes SET timestamp=' . time() . ' WHERE ip=\'' . $_SERVER['REMOTE_ADDR'] . '\'') or die (mysql_error());
}
 
$timestamp_5min = time() - (60 * 5);
mysql_query('DELETE FROM connectes WHERE timestamp < ' . $timestamp_5min) or die (mysql_error());
 
$retour = mysql_query('SELECT COUNT(*) AS nbre_entrees FROM connectes') or die (mysql_error());
$donnees = mysql_fetch_array($retour);
 
if ($donnees['nbre_entrees'] > 1)
{
        echo $donnees['nbre_entrees'] . ' visiteurs connectés.';
}
else
{
        echo $donnees['nbre_entrees'] . ' visiteur connecté.';
}
 
        mysql_close();
 
?>


J'ai deux champs dans ma table : ip en varchar et timestamp en int.

Je vous remercie pour votre aide Smiley lol
Modifié par Leo46 (20 Jan 2008 - 11:19)
Salut Léo Smiley cligne ,

je viens de tester ton script en local et je ne vois rien qui cloche Smiley rolleyes ...

A tout hasard tu pourrais montrer la structure de la table connectes (via phpMyAdmin / Exporter) ?

Cette partie-là est-elle la même ?
a écrit :
--
-- Structure de la table `connectes`
--

CREATE TABLE `connectes` (
`ip` varchar(15) NOT NULL,
`timestamp` int(11) NOT NULL,
UNIQUE KEY `ip` (`ip`)
) DEFAULT CHARSET=latin1;
Merci d'avoir essayé Smiley cligne

J'obtiens


CREATE TABLE IF NOT EXISTS `connectes` (
  `ip` varchar(15) collate latin1_general_ci NOT NULL,
  `timestamp` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

--
-- Contenu de la table `connectes`
--

INSERT INTO `connectes` (`ip`, `timestamp`) VALUES
('212.27.63.204', 1200762305);


L'IP 212.27.63.204 est la fameuse IP que je ne connais pas Smiley ohwell

Merci pour ton aide Smiley cligne
Tu es bien sûr qu'il ne s'agit pas de ton ip ? Pour t'en assurer tu peux aller sur monip.org

Et sinon tu es bien sûr que le script est bien appelé ? Car à priori cette adresse ip inconnue devrait être supprimée depuis le temps...

Et enfin, pour faire un test tu peux aussi mettre un lien vers ta page Smiley smile ...
Biensûr que je suis sûr que ce n'est pas la mienne Smiley cligne J'ai regardé où elle se situe grâce à ce site et c'est en plein centre de Paris ce qui confirme ma théorie que ce serait le serveur (je suis hébergé par Free )... Mais le plus déconcertant est que le timestamp de cet IP se met à jour quand j'accède à cette page, et à chaque fois que je charge le site, le timestamp change...

Je n'ai pas compris ce que tu veux dire dans les deux dernières phrases ? En tout cas le script marche d'une façon ou d'une autre puisqu'il m'affiche "1 visiteur connecté".
Modifié par Leo46 (26 Oct 2010 - 17:40)
Bon ben je viens de faire un test. Peut-être que mon ip sera dans la table...

Et si ça n'est pas le cas je ne vois pas Smiley hmm !
Modifié par Heyoan (19 Jan 2008 - 19:18)
En tout cas si, pour une raison ou pour une autre, l'ip était toujours égale à '212.27.63.204' cela expliquerait ce que tu as dans ta table Smiley langue !

tu pourrais essayer de faire un
echo 'REMOTE_ADDR : '.$_SERVER['REMOTE_ADDR'].'<br />';

A+
Djéà fait, et ça m'écrit 212.etc ... Par contre si je mets sur une page le script PHP seul, ça m'affiche mon IP à moi ! Je n'y comprends rien !
je ne vois pas pourquoi ça fait ça mais tu pourrais essayer de récupérer la valeur de $_SERVER['REMOTE_ADDR'] dans une variable juste avant ton include et de te servir de la variable dans le script.
De plus, même si cela affichait la bonne IP, c'est comme si la table était limitée à 1 IP puisque même quand il y a plusieurs connectés, je reste à une IP dans la table...
Leo46 a écrit :
c'est comme si la table était limitée à 1 IP puisque même quand il y a plusieurs connectés, je reste à une IP dans la table...
Si chaque visiteur a la même fausse ip c'est normal : il y a juste un UPDATE qui est effectué.

Tu as essayé avec la variable ?
Tu veux dire que je déclare une variable $ip par exemple et que je l'utilise ? Déjà fait Smiley ohwell

Je tiens aussi à dire, que j'ai essayé une fois d'interdire l'accès à cette IP via le .htaccess : résultat le site ne marchait plus, probablement donc parce que c'est le serveur... Mais ça ne me dit pas pourquoi je ne peux pas avoir plus d'une IP...
Modifié par Leo46 (19 Jan 2008 - 22:04)
Peut-être une particularité de free.fr ?

Mais puisque tu dis
Leo46 a écrit :
Par contre si je mets sur une page le script PHP seul, ça m'affiche mon IP à moi !
je ne vois pas de raison pour que ça ne marche pas si tu le fais au tout début de ta page finale (index.php ?).

En fait j'ai l'impression que c'est l'include du script qui modifie le REMOTE_ADDR (mais peut-être que tu ne fais pas d'include ou peut-être que ça n'a rien à voir Smiley biggol ).
Que je suis bête Smiley confused Quand je mets le script directement dans la page, il n'y a plus de problème... Il me reste toujours à vérifier si un deuxième visiteur marche, je repasserai poster dans peu de temps...

Merci beaucoup à vous tous !
Leo46 a écrit :
Merci beaucoup à vous tous !
Tu veux dire : moi, je et moi-même Smiley biggol ? Et bien... de rien Smiley lol !
Oups, désolé Smiley lol Dis donc je suis pas en forme en ce moment Smiley lol Merci beaucoup à toi, donc Smiley cligne Ça m'apprendra à mettre des include partout Smiley biggrin mais le pire c'est que j'y avais pensé presque au tout début et je me suis dit que c'était sûrement pas ça Smiley eek
Tu veux dire qu'en supprimant l'include ça fonctionne ? Bizarre quand même Smiley rolleyes ! En tous cas moi aussi je mets des include partout... mais je ne suis pas chez free.fr Smiley cligne !

A+

Edit:
upload/8634-leo46img1.gif
Modifié par Heyoan (20 Jan 2008 - 11:13)