Version imprimable du sujet
Cliquez ici pour voir ce sujet dans son format original
Forum TourDeJeu > Programmer > Pb Pour Raffraichir Une Partie De Page


Ecrit par: TiFred Mardi 27 Novembre 2007 à 20h53
Bonjour,

Je m'explique !
En fait, je voudrais afficher le déroulement d'un match de basket
Donc je cherche à rafraichir la page toutes les 5s en actualisant le score, le temps restant, les fautes, ...
Le pb est que cela repart à 0 tout le temps

Qq'un peut-il m'aider SVP ?
Merci

Ecrit par: Mr Pompkik Mardi 27 Novembre 2007 à 22h46
Faut la mettre au frigo.


MOUAHAHAHAHAHAHAHA

Oui bon ok j'ai compris =====> je sors

Ecrit par: Manest Mardi 27 Novembre 2007 à 23h44
Tu veux quoi exactement!? faire le replay d'un match qui à eu lieu? En fonction de quoi? Si tu fais un replay c'est que tu as un marqueur pour chaque étape. Un id, une action de joueur, une date, une numéro de tour... quelque chose quoi.

Il te suffit alors de rafraichir la page en passant le paramètre suivant à chaque fois...

Tu n'aurais pas un exemple à nous proposer?

Ecrit par: TiFred Mercredi 28 Novembre 2007 à 11h19
Je lis le compte-rendu du match et je le restitue action par action (d'où le refresh de 5s)

En fait en affichant cette page, je mets aussi à jour la table jeu1_equipes pour debutmatch (d'où le pb car en rafraichissant la page, je rafraichis cette valeur aussi)

Plus clairement il faudrait que j'arrive à faire $temps_jeu = $temps_jeu + 5 à chaque fois que je rafraichis (et il me semble que quand je faisais simplement ça, il considérais à chaque fois que $temps_jeu=0 au début)

Qq'un a une idée ?


Mon code
CODE
<?
session_start();
?>
<LINK href="styles/defaut.css" rel="stylesheet">
<html>
<body onLoad="window.setTimeout('history.go(0)', 5000)"></body>
<?  //cette page est rafraichie automatiquement par le script au-dessus

//on ouvre le fichier texte de sauvegarde en lecture et on récupère les données
$fichier = 'cr/cr_'.$nummatch.'.php';
$fp = fopen($fichier,"r");  
$donnees = fread($fp,filesize($fichier));
fclose($fp);

require_once ("admin/fonctions.php");
$db = Ouvrebase();  //ouverture de la base

//on récupère l'heure de début de visualisation
$req = Envoierequette("SELECT debutmatch FROM jeu1_equipes WHERE equipe='".$equipe."'");
while($data = mysql_fetch_array($req))
  {$debut = $data[debutmatch];
  }
 
//on calcule le temps de jeu  
$temps_jeu = date("U") - $debut;        
$min = floor($temps_jeu/60);
$sec = $temps_jeu - $min*60; $sec2 = 5 * floor($sec/5);
if ($sec2<10) $sec2 = '0'.$sec2;
$temps_jeu = $min."'".$sec2;

$pos = strpos($donnees,$temps_jeu);
if (($min*60+$sec)>60) $temps_jeu2 = ($min-1)."'".$sec2;
else $temps_jeu2 = "0'00";
$pos2 = strpos($donnees,$temps_jeu2);
//affichage du CR du match sur une période donnée
$affichage = substr($donnees,$pos2,$pos-$pos2);
$donnees2 = substr($donnees,0,$pos);

//on recherche le score
$part = substr($donnees,0,$pos);
$pos5 = strpos($part,'points');
$pos5b = strpos($part,'lancer-franc');
if ($pos5b>$pos5) $pos5 = $pos5b;
while ($pos5>0)
  {$pos3 = strpos($part,'(',$pos5);
   $pos4 = strpos($part,')',$pos5);
   $score = substr($part,$pos3+1,$pos4-$pos3-1);
   $part = substr($part,$pos4);
   $pos5 = strpos($part,'points');
   $pos5b = strpos($part,'lancer-franc');
   if ($pos5b>$pos5) $pos5 = $pos5b;
  }
   
$pos6 = strpos($score,'-');
$score1 = trim(substr($score,0,$pos6));
$score2 = trim(substr($score,$pos6+1));
if ($score1=='') $score1 = 0;
if ($score2=='') $score2 = 0;
if ($score1<10) $score1 = '0'.$score1;
if ($score1<100) $score1 = '0'.$score1;    
if ($score2<10) $score2 = '0'.$score2;    
if ($score2<100) $score2 = '0'.$score2;

$req2 = Envoierequette("SELECT equipe1, equipe2, score FROM jeu1_calendrier WHERE id='".$nummatch."'");
while($data = mysql_fetch_array($req2))
  {$equipe1 = $data[equipe1]; $equipe2 = $data[equipe2]; $score_final = $data[score];
   $nb_joueurs[$equipe1] = 0; $nb_joueurs[$equipe2] = 0;
  }
 
$req3 = Envoierequette("SELECT pays FROM jeu1_equipes WHERE equipe='".$equipe1."'");
while($data = mysql_fetch_array($req3))
  {$pays1 = $data[pays];
  }
$req3b = Envoierequette("SELECT pays FROM jeu1_equipes WHERE equipe='".$equipe2."'");
while($data = mysql_fetch_array($req3b))
  {$pays2 = $data[pays];
  }

//on recherche les différentes infos pour afficher le nb de fautes et autres infos
$req1 = Envoierequette("SELECT * FROM jeu1_stats".$numsaison."_".strtolower($pays1)." WHERE id_match='".$nummatch."'");
while($data = mysql_fetch_array($req1))
  {$nb_joueurs[$data[equipe]] = $nb_joueurs[$data[equipe]] + 1;
   $joueur[$nb_joueurs[$data[equipe]]][$data[equipe]] = stripslashes($data[joueur]);
   $fautes[$joueur[$nb_joueurs[$data[equipe]]][$data[equipe]]] = 0;
  }
if ($pays2<>$pays1)
  {$req1b = Envoierequette("SELECT * FROM jeu1_stats".$numsaison."_".strtolower($pays2)." WHERE id_match='".$nummatch."'");
   while($data = mysql_fetch_array($req1b))
      {$nb_joueurs[$data[equipe]] = $nb_joueurs[$data[equipe]] + 1;
       $joueur[$nb_joueurs[$data[equipe]]][$data[equipe]] = stripslashes($data[joueur]);
       $fautes[$joueur[$nb_joueurs[$data[equipe]]][$data[equipe]]] = 0;
      }
  }
$pos7 = strpos($donnees2,'Faute de <font color=');
$partie = $donnees2;
while ($pos7>0)
  {$partie = substr($partie,$pos7);
   $pos8 = strpos($partie,'>');
   $pos9 = strpos($partie,'</font>',$pos8);
   $nom_joueur = substr($partie,$pos8+1,$pos9-$pos8-1);
   $partie = substr($partie,$pos9);
   $pos10 = strpos($partie,'(');
   $pos11 = strpos($partie,'e faute)');
   $fautes[$nom_joueur] = substr($partie,$pos10+1,$pos11-$pos10-1);
   $partie = substr($partie,$pos11+8);
   $pos7 = strpos($partie,'Faute de <font color=');
  }


//
if (($min*60+$sec2)<10*60)
  {$periode = '1er quart-temps'; $fin = 10*60;
  }    
else if (($min*60+$sec2)<20*60)
  {$periode = '2ème quart-temps'; $fin = 20*60;
  }
else if (($min*60+$sec2)<30*60)
  {$periode = '3ème quart-temps'; $fin = 30*60;
  }
else if (($min*60+$sec2)<40*60)
  {$periode = '4ème quart-temps'; $fin = 40*60;
  }
else {$nbprol = 1;
   while (($min*60+$sec2)>(40+5*$nbprol)*60)
      {$nbprol = $nbprol + 1;
      }
   $periode = $nbprol.'e prolongation';
   $fin = (40+5*$nbprol)*60;
  }

//calcul du temps restant
$temps_restant = $fin - ($min*60+$sec2);
if ($pos=='')
  {$periode = 'Match terminé !'; $temps_restant = 0;
   //on affiche le CR du match
   echo('<br />'.$donnees.'<br />');
   
   //on recherche le score
   $part = substr($donnees,0);
   $pos5 = strpos($part,'points');
   $pos5b = strpos($part,'lancer-franc');
   if ($pos5b>$pos5) $pos5 = $pos5b;
   while ($pos5>0)
      {$pos3 = strpos($part,'(',$pos5);
       $pos4 = strpos($part,')',$pos5);
       $score = substr($part,$pos3+1,$pos4-$pos3-1);
       $part = substr($part,$pos4);
       $pos5 = strpos($part,'points');
       $pos5b = strpos($part,'lancer-franc');
       if ($pos5b>$pos5) $pos5 = $pos5b;
      }

   $pos6 = strpos($score,'-');
   $score1 = trim(substr($score,0,$pos6));
   $score2 = trim(substr($score,$pos6+1));
   if ($score1=='') $score1 = 0;
   if ($score2=='') $score2 = 0;
   if ($score1<10) $score1 = '0'.$score1;
   if ($score1<100) $score1 = '0'.$score1;
   if ($score2<10) $score2 = '0'.$score2;
   if ($score2<100) $score2 = '0'.$score2;
  }
     
$minr = floor($temps_restant/60);
$secr = $temps_restant - $minr*60;
if ($secr<10) $secr = '0'.$secr;
if ($minr<10) $minr = '0'.$minr;
$temps_restant = $minr."'".$secr;

//affichage du tableau de score
$part1 = substr($temps_restant,0,1);
$part11 = substr($score1,0,1); $part21 = substr($score2,0,1);
$part2 = substr($temps_restant,1,1);
$part12 = substr($score1,1,1); $part22 = substr($score2,1,1);
$part3 = substr($temps_restant,3,1);
$part13 = substr($score1,2,1); $part23 = substr($score2,2,1);
$part4 = substr($temps_restant,4,1);

echo('<div class="centr2">Voir les <a class="liens" href="index.php?page2=matchstats&equipe1='.$equipe1.'&equipe2='.$equipe2.'&id_match='.$nummatch.'&score='.$score_final.'">stats finales du match</a></div>');

echo('<table name="score" align="center" width="95%" heigh="100%" border="2" cellspacing="0" bordercolor="gray" bgcolor="white">');

echo('<tr align="center" valign="middle"><td width="35%" colspan="2"><font size="4" color="red"><b>'.$equipe1.'</b></td>');
echo('<td width="15%"><img src="images/'.$part11.'.gif" border="0"><img src="images/'.$part12.'.gif" border="0"><img src="images/'.$part13.'.gif" border="0"></td>');
echo('<td width="15%"><img src="images/'.$part21.'.gif" border="0"><img src="images/'.$part22.'.gif" border="0"><img src="images/'.$part23.'.gif" border="0"></td>');
echo('<td width="35%" colspan="2"><font size="4" color="blue"><b>'.$equipe2.'</b></td></tr>');

echo('<tr align="left" valign="middle">');
$numeq = 1;
include('tablequipe.php');
echo('<td width="30%" colspan="2"><font size="3"><center><b>'.$periode.' :<br /><br />');
echo('<img src="images/'.$part1.'.gif" border="0"><img src="images/'.$part2.'.gif" border="0"> : <img src="images/'.$part3.'.gif" border="0"><img src="images/'.$part4.'.gif" border="0"></td>');
$numeq = 2;
include('tablequipe.php');
echo('</tr>');
echo('<tr><td colspan="6">'.$affichage.'</td></tr>');

echo('</table>');

Fermebase($db);  //fermeture de la base
?></html>

Ecrit par: Sybler Jeudi 29 Novembre 2007 à 00h04
Bon, comme toujours j'y vais de mémoire, mais en gros:

- Utilise la librairie PROTOTYPE ( c'est une librairie javascript ) et utilise les fonctions concernant AJAX

Place la zone de ta page qui doit être rafraichi dans un DIV, puis tu la recharge avec la fonction updater de prototype pour mettre a jour le contenu du DIV uniquement.

Documentation : http://www.sergiopereira.com/articles/prototype.js.html#Ajax.Updater

Ensuite il te suffit de mettre un timer javascript qui appelle la fonction dans laquelle tu aura mis ton code de rafraîchissement.



ATTENTION, 5 seconde me parerait un délais très faible. Moindrement que le serveur ou la connexion connaîtra des raté, et que le contenu prendrais plus de 5 secondes à transférer, ca pourrait poser problème. Et si jamais sa se produit, tu aura droit à un effet boule de neige.

Assure-toi que ton serveur peut supporter cela, et que les joueurs pourront désactiver cette option.

Ecrit par: TiFred Jeudi 29 Novembre 2007 à 13h11
Merci je vais regarder ça !

La librairie il faut la renseigner qq part ?
Tu n'aurais pas un petit exemple STP ?
Merci

Ecrit par: TiFred Jeudi 29 Novembre 2007 à 13h22
Pour ce que ça intéresse, j'ai trouvé en français http://dcabasson.developpez.com/articles/javascript/ajax/documentation-prototype-1.4.0/

Ecrit par: Sybler Jeudi 29 Novembre 2007 à 22h02
Le lien que je t'ai donné documente la version 1.5.0 de la librairie.
Et pour utiliser tout ca, il te suffit d'inclure le fichier prototype.js sur la page avant de l'utiliser par la suite.

Ecrit par: TiFred Vendredi 30 Novembre 2007 à 10h35
Tu n'aurais pas un exemple de script STP
Je n'ai pas trop de temps pour tout lire

Merci

Ecrit par: Sybler Mardi 04 Décembre 2007 à 18h48
"Pas de bras, pas de biscuit !"

Je vais quand même pas faire toute les recherches et/ou ton codage à ta place...


Je peux juste te dire que ce que tu recherche tiens en 1 ligne:
CODE


new Ajax.PeriodicalUpdater('items', '/items', {   method: 'get', frequency: 3, decay: 2 });


Source: http://www.prototypejs.org/api/ajax/periodicalUpdater


La documentation depuis prototype 1.5 est extrèment claire et bien faite. (Indexé par classe, avec mention des héritages et définition de chaque attribut...)

S'il manque peut-être d'exemple, voilà qui est fait smile.gif

Ecrit par: Draedrus Mercredi 27 Février 2008 à 17h57
QUOTE (Mr Pompkik @ Mardi 27 Novembre 2007 21h46)
Faut la mettre au frigo.


MOUAHAHAHAHAHAHAHA

Oui bon ok j'ai compris =====> je sors

Quel enfoiré suilà quand il s'y met biggrin.gif whistling.gif

Ecrit par: Mr Pompkik Mercredi 27 Février 2008 à 18h19
QUOTE (Draedrus @ Mercredi 27 Février 2008 17h57)
QUOTE (Mr Pompkik @ Mardi 27 Novembre 2007 21h46)
Faut la mettre au frigo.


MOUAHAHAHAHAHAHAHA

Oui bon ok j'ai compris =====> je sors

Quel enfoiré suilà quand il s'y met biggrin.gif whistling.gif

laugh.gif
J'aime quand tu parles ainsi biggrin.gif

Ecrit par: TiFred Jeudi 26 Juin 2008 à 21h27
Désolé de relancer ce sujet
En fait j'ai voulu faire un test et ça ne marche
Voici le script qui s'appelle test_update.php

CODE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>EBASKET</title>
<link href="styles/defaut.css" type="text/css" rel="stylesheet" />
<meta name="Description" content="EBASKET, un jeu de gestion d'équipe sur le basket" />
<meta http-equiv="content-Script-Type" content="text/javascript" />
</head>
<body>

<h1>Test PeriodicalUpdater !</h1><div>
<script type='text/javascript' src="prototype-1.4.0.js"></script>
<script type='text/javascript'>
   Event.observe(window, 'load', UpdatePage);
   function UpdatePage ()
      {new Ajax.PeriodicalUpdater('monDiv', 'test_update.php', {method: 'get', frequency: 10 } );
      }
</script><div id='monDiv'>
<?php
@$time = $time+10;
echo "<br/>time=$time</div>";
?>
</div></body>
</html>

Ecrit par: Sybler Mardi 14 Septembre 2010 à 15h47
Bon ca date de longtemps, mais juste au cas ou quelqu'un lira ca dans le futur:
JQuery semble prendre le pas sur Prototype et Mootools, donc ne suivez plus me conseil sur l'utilisation de prototype.

Ce sont tous de bien bonne librairies, mais la tendance et le choix des modules va avec JQuery.

Note au passage, je n'ai aucune idée de pourquoi le dernier message ne fonctionne pas, mais le plugin FireBug de firefox permet --entre autre-- de débugger les requêtes ajax et d'en savoir plus sur ce qui cloche.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)