aide fonction membre online sur tout le site

Eléphant du PHP | 257 Messages

31 déc. 2016, 13:40

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'].'">&nbsp;'.$result['pseudo'].'</li></ul</b><BR/>';

}
$connection->exec('DELETE FROM online WHERE timestamp< DATE_SUB(NOW(), INTERVAL 2 MINUTE)');
}

?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

31 déc. 2016, 18:05

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 ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 257 Messages

01 janv. 2017, 18:38

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">';
		   }
}
?>

Eléphant du PHP | 257 Messages

02 janv. 2017, 14:59

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

Mammouth du PHP | 2703 Messages

02 janv. 2017, 15:25

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

Eléphant du PHP | 257 Messages

02 janv. 2017, 22:42

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 janv. 2017, 02:20

Tu as déclaré 2 fois ta fonction Connecte() ce qui est interdit.
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 1967 Messages

03 janv. 2017, 09:27

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
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

03 janv. 2017, 10:32

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 ! ;-)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 257 Messages

05 janv. 2017, 13:12

je mélange un peux les pinceaux serais vous me montré svp?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 janv. 2017, 13:34

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


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 257 Messages

05 janv. 2017, 15:32

je vois pas bien l'idée et la façon de la mettre en place?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 janv. 2017, 17:40

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


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 257 Messages

05 janv. 2017, 19:29

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)');
	  }
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 janv. 2017, 12:01

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

@+
Il en faut peu pour être heureux ......