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

Bonjour biduletruck,
J'ai toujours la même erreur Smiley decu au même endroit.
Alors je n'ai pas accès à ta capture (je suis au taf ...)

Mais si cela correspond au passage de ta variable $_SESSION['pseudo'], c'est que ta valeur n’existe pas.

Quand tu arrives sur cette page, l'utilisateur c'est-il déjà connecté à un compte ou c'est-il enregistré ?

Si oui fait un var_dump( $_SESSION) pour voir et affiche moi le résultat stp.


<?php

var_dump( $_SESSION);

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());
}

biduletruck, non, c'est sur
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']));
}

L'erreur est
Fatal error: Call to undefined method PDO::execute() in C:\wamp64\www\monsite\chat_connectes.php on line 24


la ligne 24 corresponds à l'execute.
Merci.
Normal ... Smiley confused

tu fais:

$bdd->prepare('INSERT INTO connect_chat (pseudo, timestamp) VALUES (?, NOW())');
    $bdd->execute(array($_SESSION['pseudo']));


alors qu'il faut préparer la requête dans une variable et exécuter cette variable et non exécuter $bdd:



if ($pseudoExist === false) // Le pseudo ne se trouve pas dans la table, on va l'ajouter.
{
    $req = $bdd->prepare('INSERT INTO connect_chat (pseudo, timestamp) VALUES (?, NOW())');
    $req->execute(array($_SESSION['pseudo']));
}
else // Le pseudo se trouve déjà dans la table, on met juste à jour le timestamp.
{
    $req = $bdd->prepare('UPDATE connect_chat SET timestamp = NOW() WHERE pseudo = ?');
    $req->execute(array($_SESSION['pseudo']));
}
Meilleure solution
Bon, voici un code sécurisé qui fonctionne....Enfin.....!!! Smiley murf
<?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.
{
    $verif = $bdd->prepare('INSERT INTO connect_chat (pseudo, timestamp) VALUES (?, ?)');
	$verif->execute(array($_SESSION['pseudo'], time()));	
}

else // Le pseudo se trouve déjà dans la table, on met juste à jour le timestamp.
{
    $verif = $bdd->prepare('UPDATE connect_chat SET timestamp="'.time().'" WHERE pseudo="'.$_SESSION['pseudo'].'"');
	$verif->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 :

$timestamp_min = time() - (60*2); //  nombre en secondes par minute * 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]);

?>

Un grand MERCI à toi biduletruck...!!!
Bon courage pour la suite Smiley smile te reste plus qu'à te mettre à la POO Smiley cligne
Modifié par biduletruck (20 Mar 2018 - 16:21)
biduletruck a écrit :
Bon courage pour la suite Smiley smile te reste plus qu'à te mettre à la POO Smiley cligne

Oui, et prévoir les tubes d'aspirine, ibuprofène et paracétamol etc...!! Smiley lol
Pages :