Un bug dans les test conditionnel if en php

Résolu/Fermé
Profil bloqué - 11 mai 2010 à 08:28
 Profil bloqué - 11 mai 2010 à 11:32
Bonjour a tous.

Je suis en train de me fabriquez un script pour affichez les pseudo des membres connectes et du nombres de visiteurs.

Le probleme, il ne veut pas fonctionner :p

le script fonctionne avec une table mysql (ip, timestam, pseudo) et les sessions pour determiner si la personne est connecter ou non.

Les requetes en elle même fonctionne mais les test conditonnel if ne veulent pas fonctionner. (il y en a 2).

Merci de votre aide pour m'aider a trouver ce fichu probleme.
Voila la code.

<?php
echo '<br><b><u>Membres connectes:</u></b><br>';
$ip = $_SERVER['REMOTE_ADDR'];
if(isset($_SESSION['pseudo'])){
	$querypseud = "SELECT * FROM connectes WHERE ip='".$ip."'";
	$resultpseud = mysql_query($querypseud);
		if($resultpseud){
			$lastquerytime = time();
			$querytime = "UPDATE connectes SET timestam='".$lastquerytime."', pseudo='".$_SESSION['pseudo']."' WHERE ip='".$ip."'";
			mysql_query($querytime);
			echo '1<br>';
		}else{
			$lastquerytime = time();
			$querytime = "INSERT INTO connectes VALUES ('".$ip."', '".$lastquerytime."', '".$_SESSION['pseudo']."')";
			mysql_query($querytime);
			echo '2<br>';
		}
}else{
	$querypseud = "SELECT * FROM connectes WHERE ip='".$ip."' AND pseudo='NULL'";
	$resultpseud = mysql_query($querypseud);
		if($resultpseud == FALSE){
			$lastquerytime = time();
			$querytime = "INSERT INTO connectes VALUES ('".$ip."', '".$lastquerytime."', 'NULL')";
			mysql_query($querytime);
			echo '3<br>';
		}else{
			$lastquerytime = time();
			$querytime = "UPDATE connectes SET timestam='".$lastquerytime."' WHERE ip='".$ip."' AND pseudo='NULL'";
			mysql_query($querytime);
			echo '4<br>';
		}
}
$timeago = time() - 1 * 60;//5*60 soit 5 minutes
$queryago = "SELECT pseudo FROM connectes WHERE timestam>'".$timeago."' AND pseudo!='NULL'";
$resultago = mysql_query($queryago);
while ($rowpseud = mysql_fetch_array($resultago)){
	echo "<b><i>".$rowpseud[0]."</i></b><br>";
}
$querycont = "SELECT COUNT(*) AS total FROM connectes WHERE timestam>'".$timeago."' AND pseudo='NULL'";
$resultcont = mysql_query($querycont);
$retourcont2=mysql_fetch_array($resultcont);
$total=$retourcont2['total'];
?>
<br /><b><u>Visiteurs:</u></b><br />
Il y à <?php echo $total; ?> visiteurs sur le site.<br />
<br />
(basées sur les utilisateurs actifs des 5 dernières minutes)
<?php
$querysup = "DELETE FROM connectes WHERE timestam<'".$timeago."'";
mysql_query($querysup);
?>
A voir également:

4 réponses

thunder413 Messages postés 167 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 16 novembre 2012 23
11 mai 2010 à 10:06
bonjour est-ce que t'a mis session_start() avant de travailler avec les variables session je demande parce que je l'ai pas vu dans ton code
0
Profil bloqué
11 mai 2010 à 10:19
bien entendu. :p je le met dans ma page index qui include le reste, mon session_start() est du coup toujours actif.

Petit precision sur le fonctionnement du script:

le if session pseudo sert a verifier si il y a un pseudo donc si la personne est loguer, alors on regarde si elle est dans la base avec son ip, si oui on met a jour sa ligne d'ip en timestamp et en pseudo sinon on l'inscrit dedans (personne ayant un log auto prevu pour plus tard) Si il n'y a pas de session pseudo, la personne n'est pas logue, on fait alors presque es meme manip pour savoir si ele est dans la table oui on modifie la timestamp non on l'inscrit dedans.

Apres on regarde uniquement ceux qui ont mis a jour depuis (1 minute dans le script) et on afficher leur pseudo i ils sont different de null puis on compte le nombre de ligne ou pseudo = null

Ainsi on devrait pouvoir afficher les pseudo des membres connecter et le nombre de visiteur en simultanee.

Seul probleme, les if imbrique qui ne verifie pas comme si l'ip est deja dans la table ou pas.

(Je precis que je le fais en local donc mon ip est 127.0.0.1 mais je ne pense pas que cela joue dan sle fonctionnement du script.)
0
thunder413 Messages postés 167 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 16 novembre 2012 23
11 mai 2010 à 10:34
re-bonjour le probleme venait du fait que tu tester si la requete c'est bien executer au lieu de tester si oui ou non elle a retourner un resultat donc je reposte ton code corriger
<?php

echo '<br><b><u>Membres connectes:</u></b><br>';
$ip = $_SERVER['REMOTE_ADDR'];
if(isset($_SESSION['pseudo'])){
	$querypseud = "SELECT * FROM connectes WHERE ip='".$ip."'";
	$resultpseud = mysql_query($querypseud)or die(mysql_error());
		if(mysql_num_rows($resultpseud)== 0){
			$lastquerytime = time();
			$querytime = "UPDATE connectes SET timestam='".$lastquerytime."', pseudo='".$_SESSION['pseudo']."' WHERE ip='".$ip."'";
			mysql_query($querytime)or die(mysql_error());
			echo '1<br>';
		}else{
			$lastquerytime = time();
			$querytime = "INSERT INTO connectes VALUES ('".$ip."', '".$lastquerytime."', '".$_SESSION['pseudo']."')";
			mysql_query($querytime)or die(mysql_error());
			echo '2<br>';
		}
}else{
	$querypseud = "SELECT * FROM connectes WHERE ip='".$ip."' AND pseudo='NULL'";
	$resultpseud = mysql_query($querypseud)or die(mysql_error());
		if(mysql_num_rows($resultpseud)== 0){
			$lastquerytime = time();
			$querytime = "INSERT INTO connectes VALUES ('".$ip."', '".$lastquerytime."', 'NULL')";
			mysql_query($querytime)or die(mysql_error());
			echo '3<br>';
		}else{
			$lastquerytime = time();
			$querytime = "UPDATE connectes SET timestam='".$lastquerytime."' WHERE ip='".$ip."' AND pseudo='NULL'";
			mysql_query($querytime)or die(mysql_error());
			echo '4<br>';
		}
}
$timeago = time() - 1 * 60;//5*60 soit 5 minutes
$queryago = "SELECT pseudo FROM connectes WHERE timestam>'".$timeago."' AND pseudo!='NULL'";
$resultago = mysql_query($queryago)or die(mysql_error());
while ($rowpseud = mysql_fetch_array($resultago)){
	echo "<b><i>".$rowpseud[0]."</i></b><br>";
}
$querycont = "SELECT COUNT(*) AS total FROM connectes WHERE timestam>'".$timeago."' AND pseudo='NULL'";
$resultcont = mysql_query($querycont)or die(mysql_error());
$retourcont2=mysql_fetch_array($resultcont);
$total=$retourcont2['total'];
?>
<br /><b><u>Visiteurs:</u></b><br />
Il y à <?php echo $total; ?> visiteurs sur le site.<br />
<br />
(basées sur les utilisateurs actifs des 5 dernières minutes)
<?php
$querysup = "DELETE FROM connectes WHERE timestam<'".$timeago."'";
mysql_query($querysup);
?>

0
Profil bloqué
11 mai 2010 à 11:32
Yes! Merci thunder413.
Ça fonctionne correctement a présent.

Merci encore.
0