Pages :
(reprise du message précédent)

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)
Comme quoi quand tu bosses trop tard tu es bon à rien ... lol
$retour['pseudo'] est vide car c'est $retour qui récupère le résultat du rowCount() donc avec ça
on devrait être bon:


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

Alors, ça fonctionne, mais il me met le nombre de connecté, mais moi, je voudrais qu'il me mette le pseudo au lieu du nombre.
Voici le résultat (toujours avec le var dump en plus :
Il y a actuellement 1 comme visiteurs sur le chat !
Bonjour Ricem

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


Edit : J'ai donc remplacé ton code par celui ci :

$retour = $bdd->query('SELECT pseudo FROM connect_chat')->rowCount();
echo '<p>Il y a actuellement ' . $_SESSION['pseudo'] . ' comme visiteurs sur le chat !</p>';
Et du coup, il m'affiche bien le pseudo Smiley lol
mais crions pas "victoire" trop vite, il faut que je fasse le test avec plusieurs PC connecté dessus, voir si, il affiche tous les pseudos et ensuite si il les "delete" au bout d'un certain temps d'inactivité.
Je vous tiens au courant prochainement et un grand merci de l'aide.
Modifié par ricem (16 Mar 2018 - 07:41)
Alors la il faut faire ça pour afficher tous les pseudo connectés

Ps attention au nom de ta table dans la requête


pchlj a écrit :



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



Modifié par biduletruck (16 Mar 2018 - 07:49)
Re,
J'ai changé le code comme indiqué (en faisant attention au nom de la BDD Smiley lol et à l'appel de la requête) voici le code
$retour = $bdd->query('SELECT GROUP_CONCAT(pseudo SEPARATOR ",") AS existe_pseudo FROM connect_chat')->fetch_assoc();
echo '<p>Il y a actuellement ' . $_SESSION['pseudo'] . ' comme visiteurs sur le chat !</p>';

Mais, là il me refais une erreur avec la page blanche et le vilain tableau orange Smiley hum
Voici l'erreur :
Fatal error: Call to undefined method PDOStatement::fetch_assoc() in C:\wamp64\www\monsite\chat_connectes.php on line 30

Ps:J'ai quand même une bonne nouvelle, je me suis connecté sur un autres PC et dans la BDD, il l'inscrit bien quand une personne se connecte et la "delete" également quand il est inactif...c'est déjà ça Smiley murf , il reste plus que l'affichage Smiley rolleyes .
Attention avec ce code tu ne vas affiché que le pseudo de l'utilisateur connecté "$_SESSION['pseudo']"

echo '<p>Il y a actuellement ' . $_SESSION['pseudo'] . ' comme visiteurs sur le chat !</p>';


Sinon c'est le fetch_assoc() qui n'est pas le bon (mysqli et pas PDO)


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


Je t'invite aussi a jeter un oeil sur la doc PDO de PHP Smiley cligne
PDOStatement::fetchAll
Re biduletruck,
J'ai à nouveau un message quand je mets ton code

Notice: Undefined index: existe_pseudo in C:\wamp64\www\monsite\chat_connectes.php on line 31


mouais, Quand ça veux pas ^^.
Tu as juste fait un copier coller ? si oui c'est peut être juste un espace en trop

$retour ['existe_pseudo ']


essai sans l'espace

$retour['existe_pseudo']


sinon cela ne fonctionne pas fais un
 var_dump($retour);

Modifié par biduletruck (16 Mar 2018 - 16:10)
biduletruck à raison.

Ton existe_pseudo fait partie d'un tableau.

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

Même résultat malheureusement Smiley decu ....
Notice: Undefined index: existe_pseudo in C:\wamp64\www\monsite\chat_connectes.php on line 38
et le var dump
C:\wamp64\www\monsite\chat_connectes.php:40:
array (size=1)
  0 => 
    array (size=2)
      'existe_pseudo' => string 'Ricem' (length=5)
      0 => string 'Ricem' (length=5)

Snif Smiley bawling
C'est un sketch .... lol

oublie la variable on passe en mode tableau ...
echo '<p>Il y a actuellement ' . $retour[0][0] . ' comme visiteurs sur le chat !</p>';
biduletruck, JENCAL,

J'ai une bonne nouvelle Smiley lol , en mode tableau Nickel...!!!

Merci, mais pourquoi, tu me l'as pas dit avant Smiley langue ( je rigole, même si c'est pas très drôle).

Merci....!!!
Une dernière demande concernant ce code, y aurais t'il un moyen de mettre des requête préparé pour la sécurité, j'ai essayé mais, j'y arrive pas Smiley confus

j'ai rajouté un "htmlspecialchars" déjà pour limité :

<?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.

$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 GROUP_CONCAT(pseudo SEPARATOR ", ") AS existe_pseudo FROM connect_chat')->fetchAll();
$utilisateur = htmlspecialchars($retour[0][0]);
?>
 
<!-- <p> Actuellement comme utilisateur<?php if ($visiteur != 1) { echo "s"; } ?> sur la ChatBox : <?php echo '<span style="color: blue">' .$utilisateur. '</span>'; ?> </p>' -->


Merci.
Modifié par ricem (16 Mar 2018 - 21:35)
Voici un petit exemple (il devrait être ok, habituellement cela fait parti d'une de mes méthodes)


$date = new \DateTime();
$sql = "INSERT INTO t_commentaire (COM_DATE, COM_AUTEUR, COM_CONTENU, BIL_ID) VALUES (:COM_DATE, :COM_AUTEUR, :COM_CONTENU, :BIL_ID)";
        $array = [
            "COM_DATE"      => $date->format('Y-m-d H:i:s'),
            "COM_AUTEUR"    => htmlspecialchars($author),
            "COM_CONTENU"   => htmlspecialchars($content),
            "BIL_ID"        => $postId
        ];
$requete = $bdd->prepare($sql);
$retour = $requete->execute($array);
Bonjour,

comme je désirais le faire en requête préparé pour plus de sécurité, je me voit contrait de tout refaire et là, les problèmes commence Smiley rolleyes
voici mon code :
<?php
session_start();

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.

$req = $bdd->prepare('SELECT pseudo FROM connect_chat WHERE pseudo = ?');
$req->execute(array($_SESSION['pseudo']));
$donnees = $req->fetch();

if (isset($donnees['pseudo']))
{
    echo '<p>Cette session existe bien</p>';
}

else
{
    echo'<p> Cette session n\'éxiste pas</p>';
}
?>

résultat du if
https://i.imgur.com/rsKDmKh.jpg et celui du else https://i.imgur.com/3fYATXy.jpg
Comme vous pouvez le constater, il y as encore une erreur Pfff...!!
pourriez-vous me dire d'où ça viens svp ?
Merci.
Bonsoir,

ton erreur est logique.

Dans ton cas du "else" ta variable $_SESSION['pseudo'] n'existe pas.

cependant quelques lignes plus haut tu cherches à utiliser cette variable qui n'existe pas d'où l'erreur renvoyée par PHP.

Mais du coup je comprends pas bien le besoin de ta requête, car à ce niveau là elle n'apporte rien. Au pire elle pourrai avoir sa place DANS le else pour vérifier qu'un pseudo existe dans la base avant de le mettre en session.


if (isset($_SESSION['pseudo']) && !empty($_SESSION['pseudo'])) //si la session existe et si non vide
{
    echo '<p>Cette session existe bien</p>';
}
else //si pas de session alors tu récupères le pseudo via un formulaire (post ou get) ou un autre traitement
{
    echo'<p> Cette session n\'éxiste pas</p>';
}
Bonjour,

Du coup j'ai tous refais (comme j'ai pu)
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.

	$reqpseudo = $bdd->prepare('SELECT pseudo AS existe_pseudo FROM connect_chat WHERE pseudo= ?');
	$reqpseudo->execute(array($_SESSION['pseudo']));
	$pseudoExist = $reqpseudo->fetch();

if ($pseudoExist == 0) // Le pseudo ne se trouve pas dans la table, on va l'ajouter.
{
    $bdd->prepare('INSERT INTO connect_chat (pseudo, timestamp) VALUES (?, ?)');
	$bdd->execute(array($_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 1 minutes.
// On stocke dans une variable le timestamp qu'il était il y a 1 minutes :

$timestamp_min = time() - (60); //  nombre en secondes par 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 GROUP_CONCAT(pseudo SEPARATOR ", ") AS existe_pseudo FROM connect_chat')->fetchAll();
$utilisateur = htmlspecialchars($retour[0][0]);

?>


j'ai une erreur au niveau de la ligne 24, voici le lien du screenshot https://i.imgur.com/FBWMFsZ.jpg
Si vous pouvez m'aider svp.
Salut,

perso je laisserai SQL faire une partie du taf Smiley cligne


<?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.

	$reqpseudo = $bdd->prepare('SELECT pseudo AS existe_pseudo FROM connect_chat WHERE pseudo = ?');
	$reqpseudo->execute(array($_SESSION['pseudo']));
	$pseudoExist = $reqpseudo->fetch();

if ($pseudoExist === false) // Le pseudo ne se trouve pas dans la table, on va l'ajouter.
{
    $bdd->prepare('INSERT INTO connect_chat (pseudo, timestamp) VALUES (?, NOW())');
    $bdd->execute(array($_SESSION['pseudo']));
}
else // Le pseudo se trouve déjà dans la table, on met juste à jour le timestamp.
{
    $bdd->prepare('UPDATE connect_chat SET timestamp = NOW() WHERE pseudo = ?');
    $bdd->execute(array($_SESSION['pseudo']));
}

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

$bdd->query('DELETE FROM connect_chat WHERE timestamp < (current_timestamp - interval 60 second) ');

// É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 GROUP_CONCAT(pseudo SEPARATOR ", ") AS existe_pseudo FROM connect_chat')->fetchAll();
$utilisateur = htmlspecialchars($retour[0][0]);

Pages :