Pages :
Bonjour,

Après avoir tenté "Affichez le nombre de visiteurs connectés" et résolu https://forum.alsacreations.com/topic-1-83001-1-Resolu-Affichez-le-nombre-de-visiteurs-connectes.html je viens maintenant pour un problème similaire "Affichez les utilisateurs connectés sur un chat" voici mon code :

require "#require/connet_bdd.php"; //Connexion à la base de données

// ÉTAPE 1 : on vérifie si le pseudo se trouve déjà dans la table.
// Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "pseudo" le pseudo du visiteur.

$retour = $bdd->query('SELECT pseudo AS existe_pseudo FROM connect_chat WHERE pseudo="'.$_SESSION['pseudo'].'"');
$donnees = $retour->fetch();

if (!isset($_SESSION['pseudo'])) // Le pseudo ne se trouve pas dans la table, on va l'ajouter.
{
  $bdd->query('INSERT INTO connectes (pseudo, timestamp) VALUES ("'.$_SESSION['pseudo'].'", "'.time().'")');
}

else // Le pseudo se trouve déjà dans la table, on met juste à jour le timestamp.
{
    $bdd->query('UPDATE connectes SET timestamp="'.time().'" WHERE pseudo="'.$_SESSION['pseudo'].'"');
}

// ÉTAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 2 minutes. 
// On stocke dans une variable le timestamp qu'il était il y a 5 minutes :

$timestamp_min = time() - (60 *2); //  nombre en secondes multiplié par nombre de minute
$bdd->query('DELETE FROM connectes WHERE timestamp<"'.$timestamp_min.'"');

// ÉTAPE 3 : on compte le nombre de pseudo stockées dans la table. C'est le nombre de visiteurs connectés.

$retour = $bdd->query('SELECT pseudo AS existe_pseudo FROM connectes');
while ($donnees = $reponse->fetch())
{
	echo '<p>Il y a actuellement ' . $donnees['existe_pseudo'] . ' comme visiteurs sur le chat !</p>';
}

	$reponse->closeCursor();
	
?>
mais j'ai deux erreur la 1ère "Notice: Undefined variable: reponse in...." et la 2ème "Fatal error: Call to a member function fetch() on null in....." j'ai essayé plusieur truc sans résultat Smiley decu

Merci de votre aide.
Modifié par ricem (15 Mar 2018 - 11:49)
Bonjour,

alors il aurai été bien de voir l'ensemble du message d’erreur mais bon Smiley cligne

Sinon:

A cette ligne:
 while ($donnees = $reponse->fetch()) 


tu fais appel à la variable $response qui n'est définie nul part dans ton code, tu voulais peut-être utiliser la variable $retour Smiley cligne .
Modifié par biduletruck (15 Mar 2018 - 12:36)
Merci biduletruck,

j'ai remplacé comme ça

$retour = $bdd->query('SELECT pseudo AS existe_pseudo FROM connectes');
while ($retour = $reponse->fetch())
{
	echo '<p>Il y a actuellement ' . $donnees['existe_pseudo'] . ' comme visiteurs sur le chat !</p>';
}

	$reponse->closeCursor();

mais ça change rien...
oula non,

Là tu écrases ta requête.

$retour = $bdd->query('SELECT pseudo AS existe_pseudo FROM connectes');
while ($retour = $reponse->fetch())


essai comme ça


$retour = $bdd->query('SELECT pseudo AS existe_pseudo FROM connectes');
foreach ($retour->fetch() as $donnees)
{
	echo '<p>Il y a actuellement ' . $donnees['existe_pseudo'] . ' comme visiteurs sur le chat !</p>';
}

Modifié par biduletruck (15 Mar 2018 - 13:11)
Mon fichier de connexion à la base de données :


		try
		
		{
			$bdd = new PDO('mysql:host=localhost;dbname=monsite;charset=utf8', 'root', '');
			array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
			
		}
		
		catch(Exception $e)
		{
				die('Erreur : '.$e->getMessage());
		}
		
?>

Modifié par ricem (15 Mar 2018 - 13:46)
biduletruck,

J'ai testé, il me met une erreur "Fatal error: Call to a member function fetch() on boolean in..."
attends je viens de percuter (trop fatigué), Fetch ne récupère d'une ligne.



$retour = $bdd->query('SELECT pseudo AS existe_pseudo FROM connectes');
foreach ($retour->fetchAll(\PDO::FETCH_ASSOC) as $donnees)
{
	echo '<p>Il y a actuellement ' . $donnees['existe_pseudo'] . ' comme visiteurs sur le chat !</p>';
}



et stp met le message d'erreur en entier, cela me donnera plus d'infos
"Fatal error: Call to a member function fetch() on boolean in..."
Toujours une erreur, voici l'erreur complète :

Fatal error: Call to a member function fetchAll() on boolean in C:\wamp64\www\monsite\chat_connectes.php on line 30
essai comme ça, après je vois pas Smiley ohwell


$retour = $bdd->query('SELECT pseudo AS existe_pseudo FROM connectes');
foreach ($retour->fetchAll() as $donnees)
{
	echo '<p>Il y a actuellement ' . $donnees['existe_pseudo'] . ' comme visiteurs sur le chat !</p>';
}
salut...

pour l'affichage je pense que ce serait plutôt ça que tu veux faire Smiley smile


$retour = $bdd->query('SELECT count(pseudo) AS existe_pseudo FROM connectes')->fetch_assoc()['existe_pseudo'];
echo '<p>Il y a actuellement ' . $retour . ' comme visiteurs sur le chat !</p>';

holala fatigué Smiley smile

non plus simple Smiley smile


$retour = $bdd->query('SELECT pseudo FROM connectes')->num_rows;
echo '<p>Il y a actuellement ' . $retour . ' comme visiteurs sur le chat !</p>';


pchlj a écrit :
holala fatigué Smiley smile

non plus simple Smiley smile


$retour = $bdd-&gt;query('SELECT pseudo FROM connectes')-&gt;num_rows;
echo '&lt;p&gt;Il y a actuellement ' . $retour . ' comme visiteurs sur le chat !&lt;/p&gt;';




Ouai, je sais pas pourquoi j'étais parti sur l'affichage des pseudo Smiley ohwell connectés
Modifié par biduletruck (15 Mar 2018 - 15:43)
et si tu veux une liste


$retour = $bdd->query('SELECT pseudo AS existe_pseudo FROM connectes');
while ($donnees= $retour->fetch_assoc())
{
	echo '<p>Il y a actuellement ' . $donnees['existe_pseudo'] . ' comme visiteurs sur le chat !</p>';
}



ou plus propre


$retour = $bdd->query('SELECT GROUP_CONCAT(pseudo SEPARATOR ",") AS existe_pseudo FROM connectes')->fetch_assoc();
echo '<p>Il y a actuellement ' . $retour['existe_pseudo'] . ' comme visiteurs sur le chat !</p>';


Merci pchlj et biduletruck,

Déjà il y as de l'amélioration, la page s'affiche contrairement à la page blanche et la grosse erreur toute moche dans un tableau orange.
Bon, j'ai toujours une erreur avec ce tableau orange tout moche, mais au moins j'ai mon affichage d'origine Smiley lol , je vous mets l'erreur
Notice: Trying to get property of non-object in C:\wamp64\www\monsite\chat_connectes.php on line 29

et le code entier modifié
<?php

	require "#require/connet_bdd.php"; //Connexion à la base de données

	// ÉTAPE 1 : on vérifie si le pseudo se trouve déjà dans la table.
	// Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "pseudo" le pseudo du visiteur.

	$retour = $bdd->query('SELECT pseudo AS existe_pseudo FROM connect_chat WHERE pseudo="'.$_SESSION['pseudo'].'"');
	$donnees = $retour->fetch();

	if (!isset($_SESSION['pseudo'])) // Le pseudo ne se trouve pas dans la table, on va l'ajouter.
	{
	  $bdd->query('INSERT INTO connectes (pseudo, timestamp) VALUES ("'.$_SESSION['pseudo'].'", "'.time().'")');
	}

	else // Le pseudo se trouve déjà dans la table, on met juste à jour le timestamp.
	{
		$bdd->query('UPDATE connectes SET timestamp="'.time().'" WHERE pseudo="'.$_SESSION['pseudo'].'"');
	}

	// ÉTAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 2 minutes. 
	// On stocke dans une variable le timestamp qu'il était il y a 5 minutes :

	$timestamp_min = time() - (60 *2); //  nombre en secondes multiplié par nombre de minute
	$bdd->query('DELETE FROM connectes WHERE timestamp<"'.$timestamp_min.'"');

	// ÉTAPE 3 : on compte le nombre de pseudo stockées dans la table. C'est le nombre de visiteurs connectés.

	$retour = $bdd->query('SELECT pseudo FROM connectes')->num_rows;
echo '<p>Il y a actuellement ' . $retour . ' comme visiteurs sur le chat !</p>';
?>


Merci de votre aide.
biduletruck a écrit :
Essai comme ça

$retour = $bdd-&gt;query('SELECT pseudo FROM connectes')-&gt;rowCount();


heu...c'est pire Smiley bawling , c'est le retour de la page blanche avec cette erreur
 Fatal error: Call to a member function rowCount() on boolean in C:\wamp64\www\monsite\chat_connectes.php on line 29


Je déteste ce tableau orange...!!! Smiley langue Smiley ohwell

Edit : Je viens de me rendre compte que ma table étais nommé "connect_chat" et non "connectes" Smiley confused , pourtant je l'avais bien nommé au départ et après je sais pas ce qui c'est passé Smiley lol

je viens de rectifier, je vais refaire tous vos test parce que là j'ai comme message
 Notice: Undefined property: PDOStatement::$num_rows in C:\wamp64\www\monsite\chat_connectes.php on line 29

merci.
Modifié par ricem (15 Mar 2018 - 18:37)
Re,

Je vous remet le code modifié de
include('chat_connectes.php')

Voici le code :

<?php
	try	
		{
			$bdd = new PDO('mysql:host=localhost;dbname=monsite;charset=utf8', 'root', '');
			array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);	
		}
		
		catch(Exception $e)
		{
				die('Erreur : '.$e->getMessage());
		}

	// ÉTAPE 1 : on vérifie si le pseudo se trouve déjà dans la table.
	// Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "pseudo" le pseudo du visiteur.

	$retour = $bdd->query('SELECT pseudo AS existe_pseudo FROM connect_chat WHERE pseudo="'.$_SESSION['pseudo'].'"');
	$donnees = $retour->fetch();

	if (!isset($_SESSION['pseudo'])) // Le pseudo ne se trouve pas dans la table, on va l'ajouter.
	{
	  $bdd->query('INSERT INTO connect_chat (pseudo, timestamp) VALUES ("'.$_SESSION['pseudo'].'", "'.time().'")');
	}

	else // Le pseudo se trouve déjà dans la table, on met juste à jour le timestamp.
	{
		$bdd->query('UPDATE connect_chat SET timestamp="'.time().'" WHERE pseudo="'.$_SESSION['pseudo'].'"');
	}

	// ÉTAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 2 minutes. 
	// On stocke dans une variable le timestamp qu'il était il y a 2 minutes :

	$timestamp_min = time() - (60 *2); //  nombre en secondes multiplié par nombre de minute
	$bdd->query('DELETE FROM connect_chat WHERE timestamp<"'.$timestamp_min.'"');

	// ÉTAPE 3 : on compte le nombre de pseudo stockées dans la table. C'est le nombre de visiteurs connectés.

	$retour = $bdd->query('SELECT pseudo FROM connect_chat')->rowCount();
		echo '<p>Il y a actuellement ' . $retour['existe_pseudo'] . ' comme visiteurs sur le chat !</p>';
?>


Et j'ai rajouté ceci dans la page de test
<?php
session_start(); 
	include('chat_connectes.php');
  
  echo 'Bonjour' .' ' .$_SESSION['pseudo']; 
        var_dump($_SESSION)
?>


Et voici le résultat affiché
Il y a actuellement comme visiteurs sur le chat !
Bonjour Ricem

C:\wamp64\www\monsite\test.php:6:
array (size=2)
  'password' => string 'kangou' (length=6)
  'pseudo' => string 'Ricem' (length=5)


donc il y a bien un souci de code et rien n'est enregistré dans la BDD.

Merci de m'aider SVP.
Modifié par ricem (15 Mar 2018 - 20:05)
bonsoir,

lors de ton premier test tu ne te sers pas de ton résultat et ta boucle n'est pas utilisée

essai avec ça


<?php
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=monsite;charset=utf8', 'root', '');
    array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
}

catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

// ÉTAPE 1 : on vérifie si le pseudo se trouve déjà dans la table.
// Pour faire ça, on n'a qu'à compter le nombre d'entrées dont le champ "pseudo" le pseudo du visiteur.

$pseudo = $bdd->query('SELECT pseudo AS existe_pseudo FROM connect_chat WHERE pseudo="'.$_SESSION['pseudo'].'"');
$pseudoExist = $pseudo->rowCount();

if ($pseudoExist === 0) // Le pseudo ne se trouve pas dans la table, on va l'ajouter.
{
    $bdd->query('INSERT INTO connect_chat (pseudo, timestamp) VALUES ("'.$_SESSION['pseudo'].'", "'.time().'")');
}

else // Le pseudo se trouve déjà dans la table, on met juste à jour le timestamp.
{
    $bdd->query('UPDATE connect_chat SET timestamp="'.time().'" WHERE pseudo="'.$_SESSION['pseudo'].'"');
}

// ÉTAPE 2 : on supprime toutes les entrées dont le timestamp est plus vieux que 2 minutes.
// On stocke dans une variable le timestamp qu'il était il y a 2 minutes :

$timestamp_min = time() - (60 *2); //  nombre en secondes multiplié par nombre de minute
$bdd->query('DELETE FROM connect_chat WHERE timestamp<"'.$timestamp_min.'"');

// ÉTAPE 3 : on compte le nombre de pseudo stockées dans la table. C'est le nombre de visiteurs connectés.

$retour = $bdd->query('SELECT pseudo FROM connect_chat')->rowCount();
echo '<p>Il y a actuellement ' . $retour['pseudo'] . ' comme visiteurs sur le chat !</p>';


à oui là il y avait une petite coquille aussi -> ta variable $retour['existe_pseudo'] n'existe pas dans ta requête.


// ÉTAPE 3 : on compte le nombre de pseudo stockées dans la table. C'est le nombre de visiteurs connectés.

	$retour = $bdd->query('SELECT pseudo FROM connect_chat')->rowCount();
		echo '<p>Il y a actuellement ' . $retour['existe_pseudo'] . ' comme visiteurs sur le chat !</p>';

Modifié par biduletruck (15 Mar 2018 - 21:31)
biduletruck,

Déjà beaucoup d'amélioration, bon, il n'inscrit pas encore le pseudo, mais, il l'enregistre sur la BDD voici la réponse avec "l'include" et le" var dump"
Il y a actuellement comme visiteurs sur le chat !
Bonjour Ricem

C:\wamp64\www\monsite\test.php:6:
array (size=1)
  'pseudo' => string 'Ricem' (length=5)

voici un lien screen de la BDD https://i.imgur.com/nhFTYIR.jpg
Merci.
Modifié par ricem (15 Mar 2018 - 21:58)