11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Voilà, j'utilise ce script pour actualiser ma div dynamiquement :

URL = "nb_connect.php";   
     var xhr=null; 
     function rafraichir()  
     { 
        if (window.XMLHttpRequest)  
   { 
   xhr = new XMLHttpRequest(); 
   } 
        else if (window.ActiveXObject)  
   { 
   xhr = new ActiveXObject('Microsoft.XMLHTTP'); 
   } 
        else alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...'); 
   
        xhr.open('GET',URL,true); 
        xhr.onreadystatechange = ajaxReponse; 
        xhr.send(null); 
     } 

     function ajaxReponse()  
     { 
        if (xhr.readyState == 4)  
        { 
                document.getElementById("connectes").innerHTML=xhr.responseText; 
                var timer=setTimeout(rafraichir,2000); 
        } 
     } 
rafraichir();  



Explication simple du code : Le fichier nb_connect.php s'exécute et son contenu est mis dans la div "connectes" (qui se trouve dans un autre fichier.php) toutes les 2 secondes.

Voilà maintenant je suis confronter à un problème. J'aimerais ne plus passer par un autre fichier php. J'aimerais que la div et le script à actualisé se trouve dans le même fichier. Auriez-vous une solution à me proposer ?
Bonjour,

milf905 a écrit :
son contenu est mis dans la div "connectes" (qui se trouve dans un autre fichier.php)

Comment ça, «se trouve dans un autre fichier.php»?
Si tu fais référence à un script PHP qui renvoie un code HTML de page complète, code qui est analysé par le navigateur pour construire le DOM de la page, je ne vois pas trop quel souci ça peut poser. En passant, quand tu mets à jour le contenu de ta DIV, tu mets à jour le DOM actuellement en mémoire dans le navigateur. Il n'y a pas de nouvelle requête HTTP pour ton «fichier.php» effectuée par le navigateur.

milf905 a écrit :
J'aimerais ne plus passer par un autre fichier php.

Sauf erreur de ma part tu ne repasses pas par un autre fichier.

milf905 a écrit :
J'aimerais que la div et le script à actualisé se trouve dans le même fichier.

Tu veux dire que tu aurais un script nommé par exemple "mapage.php", et que si tu fais une requête HTTP simple il renvoie un code HTML de page complète, tandis que si tu fais une requête XHR (Ajax) il renvoie un fragment de code HTML correspondant au contenu que tu veux mettre à jour? C'est possible, mais ça me semble pas terrible comme conception.
Je vous réexplique mieux dans ce message :

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

	
	
}

?>