Partage
  • Partager sur Facebook
  • Partager sur Twitter

Rafraichir le contenu d'une div

    27 novembre 2011 à 17:34:18

    Bonjour à tous, je suis en train de créer un jeu de carte en ligne et j'ai un souci pour mon espace joueur.

    Mon problème : Voici un exemple :

    Par exemple les personnes connectés qui seront dans cette div :

    echo'<div id="connectes">'.$pseudo->afficheMembresCo().'</div>';
    


    J'aimerais que le contenu de la div id="connectes" s'actualise toutes les secondes afin que les personnes connectés s'affichent dynamiquement. Je sais qu'il existe un fonction en jquery load() ou avec AJAX mais je n'arrive pas à l'adapter à mon modèle.

    Auriez vous une solution ou un exemple qui se rapproche du mien ?
    Merci de votre aide



    Voila la page d'affichage


    <?php
    session_start();
    include'connect_bdd.php'; 
    include_once 'membre.class.php';
    $pseudo = new Membre($_SESSION['pseudo']); 
    ?>
    <html>
    <head>
    <link href="styles/style.css" rel="stylesheet" type="text/css" />
    </head>
    <body>  
    <?php
    if(isset($_SESSION['pseudo']) && $_SESSION['pseudo'] != "")
    {
    echo'<div class="espace_profil">';
    // Partie gauche
    echo'<div class="profil_gauche">';
    echo'<div class="titre_profil"> <b> Bienvenue '.$pseudo->getPseudo().'</b> </div>';
    echo'<br><br>';
    include'classement.php'; 
    echo'</div>';
    // Partie droite
    echo'<div class="profil_droite">';
    echo'<div id="connectes">'.$pseudo->afficheMembresCo().'</div>';
    echo'<br><br>';
    echo'<div class="titre_profil"><b>Espace de demande</b></div>';
    $pseudo->afficheDemande();
    echo'<br><br>';
    echo'<div class="titre_profil"><b>Espace de reception</b></div>';
    $pseudo->afficheReception();
    $pseudo->afficheRedirection();
    echo'</div>';
    // Fin Partie droite
    echo'</div>';
    }
    else echo'Accès refusée';
    ?>
    </body>
    </html>
    



    Voila ma classe membre


    <?php
    
    Class Membre
    {
    	private $pseudo;
    	
    	public function __construct($session)
    		{
    			include'connect_bdd.php';
    			$this->pseudo = $session;
    			$pseudo_online = $bdd->query('select count(pseudo) as nb from cpt_connectes where pseudo="'.$session.'"')->fetchColumn();
    				if($pseudo_online<=0)
    				{
    					$bdd->exec('insert into cpt_connectes (pseudo) values ("'.$session.'")');
    				}		
    		}
    		
    	public function getPseudo()
    		{
    		return $this->pseudo;
    		}
    		
    		
    	public function afficheMembresCo()
    		{
    			include'connect_bdd.php';
    			$inter = $bdd->query('select pseudo from cpt_connectes'); 
    			$nb_online = $inter->rowCount();
    			$membre_dispo = $nb_online-1;
    			if($nb_online == 1)
    				echo '<div class="membres_dispo"><b>Il y a aucun membre disponible</b></div><br>';
    			else 
    				echo '<div class="membres_dispo"><b>Membres disponibles ('.$membre_dispo.')</b></div><br> ';
    			if($nb_online>0)
    				{
    				echo'<table>';
    				while($donnees = $inter->fetch())
    					{
    					if( $donnees['pseudo'] != $this->pseudo)
    						echo '<tr><td><font style="font-family:Verdana; font-size:13px">'.$donnees['pseudo'].'</font></td><td><img onclick="demande_jeu(\''.$donnees['pseudo'].'\');" style="margin-left:5px;cursor:pointer" src="img/demande_jeu.jpg" width="28px"/></td></tr>';
    					}
    				echo'</table>';
    				}
    		}
    		
    	public function afficheDemande()
    		{
    			include'connect_bdd.php';
    			$emetteur = $this->pseudo;
    			$verif_demande = $bdd->query("SELECT id FROM demande_jeu WHERE emetteur = '$emetteur'");
    			$count = $verif_demande->rowCount(); 
    			if($count ==1)
    				{
    				$verif_dest = $bdd->query("SELECT * FROM demande_jeu WHERE emetteur = '$emetteur'");
    				while ($donnees = $verif_dest->fetch()) 
    					{
    					if($donnees['reponse_dest'] == 'attente' )	
    						echo '<br>Attente du joueur '.$donnees['destinataire'].'';	
    					else 
    						echo '<br>'.$donnees['destinataire'].' a accepté !';
    					}
    				}
    			else
    				echo '<br>Aucune demande de jeu';
    		
    			$verif_demande->closeCursor();	
    		}
    		
    	public function afficheReception()
    		{
    			include'connect_bdd.php';
    			$destinataire = $this->pseudo;
    			// On recherche si une demande a été faite
    			$verif_destinataire = $bdd->query("SELECT id FROM demande_jeu WHERE destinataire = '$destinataire'");
    			$count = $verif_destinataire->rowCount();
    				if($count ==1)
    				{
    				// Si la demande a été faite, on affiche la demande avec l'emetteur
    				$verif_em = $bdd->query("SELECT * FROM demande_jeu WHERE destinataire = '$destinataire'");
    				while ($donnees = $verif_em->fetch()) 
    					{
    					if($donnees['partie_prete']!= 'oui' && $donnees['reponse_dest']!='oui' )
    						{
    						echo 'Vous avez une demande de '.$donnees['emetteur'].'<br> Voulez-vous accepter ? <br>
    						<input type="submit" value="Oui" onclick="demande(\'acceptation.php\');rafraichir_rec();"/><input type="submit" onclick="demande(\'sup_dem.php\');" value="Non"/> ';
    						}
    			
    					if($donnees['reponse_dest']=='oui' && $donnees['partie_prete']!= 'oui')
    						echo 'Création de la partie, veuillez patienter ...';
    					}
    				$verif_em->closeCursor();
    				}
    				else
    					echo '';
    			
    		}
    		
    		
    		public function afficheRedirection()
    		{
    		include'connect_bdd.php';
    		$joueur = $this->pseudo;
    		$redirection_joueur1 = $bdd->query("SELECT * FROM demande_jeu WHERE emetteur = '$joueur'");
    		while ($donnees = $redirection_joueur1->fetch()) 
    			{
    			$verif_redirection_j1 = $donnees['reponse_dest'];
    			if($verif_redirection_j1=='oui')
    			echo'<a href="creation_jeu.php"> Démarrer la partie</a>'; 
    			}
    		$redirection_joueur2 = $bdd->query("SELECT * FROM demande_jeu WHERE destinataire = '$joueur'");
    		while ($donnees = $redirection_joueur2->fetch()) 
    			{
    			$verif_redirection_j2 = $donnees['partie_prete'];
    			if($verif_redirection_j2=='oui')
    			echo'<a href="creation_jeu.php"> Démarrer la partie</a>'; 
    			}
    		}
    
    	
    	
    }
    
    ?>
    
    • Partager sur Facebook
    • Partager sur Twitter
      27 novembre 2011 à 17:48:57

      Voici un début de solution :
      $(document).ready(function() {
          $.ajax({
              url: 'fichier.php',
              success: function(html) {
                   $('#connectes').html(html);   
              }
          }); 
      });
      


      Mais ne fais pas ce traitement toutes les secondes, ton serveur va planter...
      • Partager sur Facebook
      • Partager sur Twitter
        27 novembre 2011 à 17:51:38

        Merci pour ce début de réponse. Mais comment vais-je faire pour que les personnes connectés apparaissent dynamiquement ?
        • Partager sur Facebook
        • Partager sur Twitter
          27 novembre 2011 à 17:58:02

          Je t'ai donné la réponse, faut mettre ce code dans un événement ou une fonction. Si ne sais pas de quoi je veux parler tu dois te débrouiller, j'en ai déjà fait trop.
          • Partager sur Facebook
          • Partager sur Twitter
            27 novembre 2011 à 18:02:51

            Le problème c'est que dans le code que tu m'a donné c'est la page 'fichier.php' qui va s'actualisé dans la div id="connectes". De ca, j'en ai bien conscience. Mais moi mon problème c'est que tout se passe dans le même fichier.

            Si tu veux il faudrait que se soit
            $pseudo->afficheMembresCo()
            
            qui s'actualise dans la div.
            • Partager sur Facebook
            • Partager sur Twitter
              27 novembre 2011 à 18:06:34

              C'est pas possible, tu dois faire un fichier à part. Qui récupère $pseudo->afficheMembresCo() et qu'il l'affiche avec un bel echo.
              • Partager sur Facebook
              • Partager sur Twitter
                27 novembre 2011 à 18:08:45


                $(document).ready(function() {
                    $.ajax({
                        url: 'fichier.php',
                        success: function(html) {
                             $('#connectes').html(html);   
                        }
                    }); 
                });
                


                Ce code s'éxécute toutes les X secondes ?
                • Partager sur Facebook
                • Partager sur Twitter
                  27 novembre 2011 à 18:13:57

                  Non une seule fois, au chargement du DOM.

                  Pour l'exécuter toutes les X secondes, faut le mettre dans une fonction et utiliser setInterval(). Mais je ne le conseille pas ou alors tu vas utiliser beaucoup de bande passante de ton hébergeur.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 novembre 2011 à 18:15:43

                    Alors mais comment afficher quand quelqu'un se connecte, il faut bien rafraichir la div non ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 novembre 2011 à 18:18:02

                      Tu peux faire d'une manière moins gourmande, quand quelqu'un se connecte, mets à jour un fichier .txt qui contiendra le nombre de connectés. Ensuite tu fais un appel Ajax dessus toutes les 3 minutes par exemple, pas moins. Tu feras déjà moins d'aller-retour avec la bdd.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 novembre 2011 à 18:21:13

                        Citation : Desolation

                        Tu peux faire d'une manière moins gourmande, quand quelqu'un se connecte, mets à jour un fichier .txt qui contiendra le nombre de connectés. Ensuite tu fais un appel Ajax dessus toutes les 3 minutes par exemple, pas moins. Tu feras déjà moins d'aller-retour avec la bdd.



                        Si quelqu’un se connecte , je vais devoir donc attendre 3 minutes avant de le voir dans la liste des connectés o_O ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 novembre 2011 à 18:41:20

                          C'est exact ! ;)
                          et s'il part avant 3minutes, tu ne le verra même pas d'ailleurs ^^
                          Tu peux faire la méthode de Desolation, mais si toi tu veux voir quelqu'un dés qu'il se connecte, il te faudrait utiliser les sockets php en plus je pense ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Le Python, il n'y a que ça de bon. Le C, il n'y a que ça de vrai. Le PHP, j'ai adoré ! Les femmes ... ah ça, ça rame !

                          Rafraichir le contenu d'une div

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown