Page 1 sur 2
aide fonction membre online sur tout le site
Posté : 31 déc. 2016, 13:40
par pacphil
Bonjour j'ai créer une script membre online j'aimerais utilisé ce script pour réaliser une fonction membre online avec une puce verte et rouge pour les membre offline , merci d'avance de votre aide. je vous donne le copie du script online.
<?PHP
require("function.php");
$connection = connexion_db ();
header('Content-type: text/html; charset=UTF-8');
if(isset($_SESSION['login'])){
$requete_nombre_connecte = $connection->prepare('SELECT COUNT(*) pseudo FROM online WHERE pseudo=:pseudo');
if($requete_nombre_connecte->execute(array(':pseudo'=> $_SESSION['login']))){
$connecte = $requete_nombre_connecte->fetchColumn();
if($connecte >0){
$udapte_connecte = ('UPDATE online SET timestamp=:timestamp WHERE pseudo=:pseudo');
$req_connecte = $connection->prepare($udapte_connecte);
$req_connecte->execute(array(':timestamp'=> date("Y-m-j H:i:s"),':pseudo'=> $_SESSION['login']));
}else{
$connecte_online = array(
':timestamp'=> date("Y-m-j H:i:s"),
':pseudo'=> $_SESSION['login']);
$values= join(', ',array_keys($connecte_online));
$req=$connection->prepare( 'INSERT INTO online ('.str_replace(':','',$values).') VALUES('.$values.')' );
$req->execute($connecte_online);
}
}
}
$connect = $connection->prepare('SELECT * FROM online');
$connect->execute();
while($result = $connect->fetch()){
$num_connecte = $result['pseudo'];
if(!isset($num_connecte) == FALSE){
echo'<ul class="users"><li data-index="'.$result['pseudo'].'"> '.$result['pseudo'].'</li></ul</b><BR/>';
}
$connection->exec('DELETE FROM online WHERE timestamp< DATE_SUB(NOW(), INTERVAL 2 MINUTE)');
}
?>
Re: aide fonction membre online sur tout le site
Posté : 31 déc. 2016, 18:05
par @rthur
Bonjour,
Il va nous falloir nous en dire davantage.
Nous pouvons t'aider à réaliser le script que tu veux mais pas le faire à ta place, donc voici quelques questions supplméentaires :
- Quel est le problème et où bloques-tu ?
- Qu'as tu déjà essayé ?
- Quels sont les messages d'erreurs rencontrés que tu ne sais pas résoudre ?
Re: aide fonction membre online sur tout le site
Posté : 01 janv. 2017, 18:38
par pacphil
je ne vois pas comment mis prendre simple
je ferais cela
<?PHP
function online($_SESSION['login']){
if ($_SESSION['login'] = '1'){
return '<img src="imdesign/bille_verte.png" width="15" height="15">';
}else{
return '<img src="imdesign/bille_rouge.png" width="15" height="15">';
}
}
?>
Re: aide fonction membre online sur tout le site
Posté : 02 janv. 2017, 14:59
par pacphil
je fait cela
$online_sortie = $connection->prepare('SELECT * FROM online_site');
$online_sortie->execute(array());
while($data_online = $online_sortie->fetch(PDO::FETCH_OBJ)){
$connecte = $data_online->pseudo_site;
function Connecte($connecte)
{
// Test du paramètre d'entrée
if ($connecte == 1){
echo'<img src="imdesign/bille_verte.png" width="15" height="15">';
return true;
}
echo'<img src="imdesign/bille_rouge.png" width="15" height="15">';
return false;
}
}
Re: aide fonction membre online sur tout le site
Posté : 02 janv. 2017, 15:25
par or 1
while($data_online = $online_sortie->fetch(PDO::FETCH_OBJ)){
$connecte = $data_online->pseudo_site;
// Test du paramètre d'entrée
if ($connecte == 1){
echo'<img src="imdesign/bille_verte.png" width="15" height="15">';
}
else{
echo'<img src="imdesign/bille_rouge.png" width="15" height="15">';
}
}
à condition que le statut connecte ou non soit bien dans $data_online->pseudo_site
Re: aide fonction membre online sur tout le site
Posté : 02 janv. 2017, 22:42
par pacphil
petit erreur
Fatal error: Cannot redeclare Connecte() (previously declared in C:\Program Files\EasyPHP-5.3.8.1\www\source\fonction_online.php:7) in C:\Program Files\EasyPHP-5.3.8.1\www\source\fonction_online.php on line 7
Re: aide fonction membre online sur tout le site
Posté : 03 janv. 2017, 02:20
par @rthur
Tu as déclaré 2 fois ta fonction Connecte() ce qui est interdit.
Re: aide fonction membre online sur tout le site
Posté : 03 janv. 2017, 09:27
par Spols
J'ajouterait que comme elle est déclarée 2 fois au même endroit du même fichier, cela doit être un double include (ou require).
essaie de les transformer en include_once() ou require_once() PHP s'assurera alors de l'inclusion que si elle n'est pas encore faite
Re: aide fonction membre online sur tout le site
Posté : 03 janv. 2017, 10:32
par @rthur
J'ajouterait que comme elle est déclarée 2 fois au même endroit du même fichier, cela doit être un double include (ou require).
Bien vu !

Re: aide fonction membre online sur tout le site
Posté : 05 janv. 2017, 13:12
par pacphil
je mélange un peux les pinceaux serais vous me montré svp?
Re: aide fonction membre online sur tout le site
Posté : 05 janv. 2017, 13:34
par moogli
or1 t'as fournit une solution.
ton message d'erreur est du au fait que tu déclares la fonction dans le while (drôle d'idée

)
vu qu'a priori cela ne sera pas réemployable la solution de or1 me semble la plus adaptée.
il faut, ensuite, déboguer un peu pour avancer dans la résolution du problème
@+
Re: aide fonction membre online sur tout le site
Posté : 05 janv. 2017, 15:32
par pacphil
je vois pas bien l'idée et la façon de la mettre en place?
Re: aide fonction membre online sur tout le site
Posté : 05 janv. 2017, 17:40
par moogli
qu'est ce que tu ne comprends pas la dedans ? c'est ton code sans la fonction qui sert a rien.
while($data_online = $online_sortie->fetch(PDO::FETCH_OBJ)){
$connecte = $data_online->pseudo_site;
// Test du paramètre d'entrée
if ($connecte == 1){
echo'<img src="imdesign/bille_verte.png" width="15" height="15">';
}
else{
echo'<img src="imdesign/bille_rouge.png" width="15" height="15">';
}
}
à condition que le statut connecte ou non soit bien dans $data_online->pseudo_site
une version plus concise
<?php
while($data_online = $online_sortie->fetch(PDO::FETCH_OBJ)){
$connecte = $data_online->pseudo_site;
$ballColor = 'rouge';
// Test du paramètre d'entrée
if ($connecte == 1) {
$ballColor = 'verte';
}
echo'<img src="imdesign/bille_' , $ballColor , '.png" width="15" height="15">';
}
ensuite si tu veux afficher la liste de tout les membres avec une puce à coté pour savoir s'il sont en ligne il faut ajouter dans la requête de sélection des membres l'info de en ligne ou nom. Le plus simple étant une sous requête
par exemple
select user_id,pseudo, (select count(1) from online_site os where os.pseudo = u.pseudo) as connected from users u
la colonne connected contient le nombre de ligne dans la table online_site qui correspondent au pseudo de la ligne courante du coup 1 == connecté et zéro == pas connecté.
@+
Re: aide fonction membre online sur tout le site
Posté : 05 janv. 2017, 19:29
par pacphil
Pour jouer sur tout le site avec les membres online la ligne que tu à mise a la fin avec le select tu l'ajoute a quelle table stp?
<?PHP
if(isset($_SESSION['login_site'])){
if(isset($_SESSION['type_site'])){
$requete_nombre_connecte = $connection->prepare('SELECT COUNT(*) pseudo_site FROM online_site WHERE pseudo_site=:pseudo_site');
if($requete_nombre_connecte->execute(array(':pseudo_site'=> $_SESSION['login_site']))){
$connecte = $requete_nombre_connecte->fetchColumn();
if($connecte >0){
$udapte_connecte = ('UPDATE online_site SET timestamp=:timestamp WHERE pseudo_site=:pseudo_site');
$req_connecte = $connection->prepare($udapte_connecte);
$req_connecte->execute(array(':timestamp'=> date("Y-m-j H:i:s"),':pseudo_site'=> $_SESSION['login_site']));
}else{
$connecte_online = array(
':timestamp'=> date("Y-m-j H:i:s"),
':pseudo_site'=> $_SESSION['login_site'],
':type'=> $_SESSION['type_site']);
$values= join(', ',array_keys($connecte_online));
$req=$connection->prepare( 'INSERT INTO online_site ('.str_replace(':','',$values).') VALUES('.$values.')' );
$req->execute($connecte_online);
}
}
}
}
$requete = 'SELECT pseudo_site,type FROM online_site ';
if (!empty($_POST['type'])) {
// si on a reçu un type, on filtre dessus
$requete = $requete.' WHERE type=:type';
// on ajoute la valeur de type aux paramètres d'exécution de la requête
$params['type'] = $_POST['type'];
}
@$connect = $connection->prepare($requete);
@$connect->execute($params);
$typef = 'Femme';
$typeh = 'Homme';
echo'<FORM method="POST" action="'.$_SERVER['PHP_SELF'].'">
<input type="image" src="imdesign/f.png" title="Femme" width="30" height="30" border="0" name="type" value="'.$typef.'" />
<input type="image" src="imdesign/h.png" title="Homme" width="30" height="30" border="0" name="type" value="'.$typeh.'" />
</FORM>';
while($result = $connect->fetch()){
$online = $result['pseudo_site'];
$ballColor = 'verte';
// Test du paramètre d'entrée
if ($online == 1) {
$ballColor = 'rouge';
}
echo'<img src="imdesign/bille_' , $ballColor , '.png" width="15" height="15"><b>'.$result['pseudo_site'].'</b>
<a href="http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/envoyez_message.php?destin='.$result['pseudo_site'].'"><img src="imdesign/envois.png" width="20" height="15" /></a></br>';
$connection->exec('DELETE FROM online_site WHERE timestamp< DATE_SUB(NOW(), INTERVAL 10 MINUTE)');
}
?>
Re: aide fonction membre online sur tout le site
Posté : 06 janv. 2017, 12:01
par moogli
quelque chose comme ça
<?php
if(isset($_SESSION['login_site'])){
if(isset($_SESSION['type_site'])){
$requete_nombre_connecte = $connection->prepare('SELECT COUNT(1) pseudo_site FROM online_site WHERE pseudo_site=:pseudo_site');
if($requete_nombre_connecte->execute(array(':pseudo_site'=> $_SESSION['login_site']))){
$connecte = $requete_nombre_connecte->fetchColumn();
if($connecte > 0){
$udapte_connecte = ('UPDATE online_site SET timestamp=:timestamp WHERE pseudo_site=:pseudo_site');
$req_connecte = $connection->prepare($udapte_connecte);
$req_connecte->execute(array(':timestamp'=> date("Y-m-j H:i:s"),':pseudo_site'=> $_SESSION['login_site']));
}else{
$connecte_online = array(
':timestamp'=> date("Y-m-j H:i:s"),
':pseudo_site'=> $_SESSION['login_site'],
':type'=> $_SESSION['type_site']);
$values= join(', ',array_keys($connecte_online));
$req=$connection->prepare( 'INSERT INTO online_site ('.str_replace(':','',$values).') VALUES('.$values.')' );
$req->execute($connecte_online);
}
}
}
}
$requete = 'SELECT pseudo_site as pseudo ,type,(select count(1) from online_site os where os.pseudo = u.pseudo) as connected FROM online_site os ';
$params = [];
if (!empty($_POST['type'])) {
// si on a reçu un type, on filtre dessus
$requete = $requete.' WHERE type=:type';
// on ajoute la valeur de type aux paramètres d'exécution de la requête
$params['type'] = $_POST['type'];
}
$connect = $connection->prepare($requete);
$connect->execute($params);
$imgF = 'imdesign/f.png';
$imgH = 'imdesign/h.png';
echo <<<form
<form method="post">
<input type="image" src="{$imgF}" title="Femme" width="30" height="30" border="0" name="type" value="Femme" />
<input type="image" src="{$imgH}" title="Homme" width="30" height="30" border="0" name="type" value="Homme" />
</form>
form;
$baseUrl = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
while($result = $connect->fetchObject()){
$ballColor = 'verte';
if ($result->connected == 1) {
$ballColor = 'rouge';
}
$picto = $imgF;
$title = 'Picto Femme';
if(strtolower($result->type) == 'homme'){
$picto = $imgH;
$title = 'Picto Homme';
}
echo <<<line
<img src="imdesign/bille_{$ballColor}.png" width="15" height="15"><b>{$result->pseudo}</b>
<img src="{$picto}" title="{$title}/>
<a href="{$baseUrl}/envoyez_message.php?destin={$result->pseudo}"><img src="imdesign/envois.png" width="20" height="15" /></a></br>
line;
}
// pas la pein de le faire plusieurs fois ;)
$connection->exec('DELETE FROM online_site WHERE timestamp< DATE_SUB(NOW(), INTERVAL 10 MINUTE)');
il est préférable de passer un id dans l'url qu'un pseudo. En règle générale on utilise plutôt une référence qu'une donnée (même unique).
@+