Récupérer variable en sortie de boucle ?

Petit nouveau ! | 2 Messages

21 mars 2007, 14:06

Bonjour et d'avance merci pour vos réponses !

Alors voilà mon problème je fais une boucle où je récupère plusieurs infos dans ma base pour chaque joueur :

$ligne_show_players["flags"] ;
$ligne_show_players["kills"] ;
$ligne_show_players["deaths"] ;

Et j'ai besoin de ces variables après ma boucle pour afficher un graphique, est-ce qu'il y a un moyen simple de tout récupérer ?


Le code n'est certainement pas trés propre mais je débute ;)
<?php

	if (isset($_GET['tri'])) { $tri = $_GET['tri'] ; } 
  else                     { $tri = "id_player" ;	}
	$i = 0 ;
$connect2 = "SELECT * 
             FROM ".$INFO['sql_tbl_prefix']."wars_players 
             WHERE id_match=".$section."
             ORDER BY ".$tri." DESC " ;
$ligne2 = mysql_query($connect2) ; 
while ($ligne_show_players = mysql_fetch_array($ligne2))
    {
          $i++ ;
          $ratio = $ligne_show_players["kills"] / $ligne_show_players["deaths"] ;
?>
<tr id="ligne01">
       <td id="player"><? $connect3 = "SELECT name
                                       FROM ".$INFO['sql_tbl_prefix']."members 
                                       WHERE id=".$ligne_show_players["id_player"]." " ; 
                          $my_query3 = mysql_query($connect3) ;
                          $query_pseudo = mysql_fetch_array($my_query3) ;
                          
                    //      $player_$i_name = $query_pseudo['name'] ;
                          $toto = $ligne_show_players["deaths"] ;
                          echo $query_pseudo['name'] ; ?>
       </td>
       <td id="flags"><? echo $ligne_show_players["flags"] ; ?></td>
       <td id="kills"><? echo $ligne_show_players["kills"] ; ?></td>
       <td id="deaths"><? echo $ligne_show_players["deaths"] ; ?></td>
       <td id="ratio"><? echo substr($ratio, 0, 4) ; ?></td>
       <td id="deaths"><? echo $i ; ?></td>
</tr>
<?
}
?>

Mammouth du PHP | 543 Messages

21 mars 2007, 15:02

Il faudrait utiliser les tableaux a plusieurs dimensions :

Avant la boucle, tu crées un tableau global.
$stats = array();
Ensuite apres l'affichage des stats du joueur, dans la boucle, tu crées une nouvelle entrée dans le tableau global :
$stats[$id_joueur] = array(
  "kills"=>$ligne_show_players["kills"],
"deaths"=>$ligne_show_players["death"],
"flags"=>$ligne_show_players["kills"]);
Ainsi, une fois la boucle fini, tu auras une variable $stats de type tableau contenant tout.

Par contre, je te recommande vivement de supprimer la requete $connect3, et de faire une jointure dans la requete $connect2, afin de recuperer en une seule requete les noms et stats des joueurs, et surtout pour eviter l'immondisme qu'est une requete select dans une boucle.
$connect2 = "SELECT w.id_player as id_player,w.flags as flags,w.kills as kills,w.deaths as deaths,m.name as name 
             FROM ".$INFO['sql_tbl_prefix']."wars_players w
             JOIN ".$INFO['sql_tbl_prefix']."members m
             ON m.id_player = w.id_player
             WHERE w.id_match=".$section."
             ORDER BY w.".$tri." DESC " ;
Ainsi, nous pouvons modifier la ligne qui insere les infos du joueur dans $stats pour la remplacer par :
$stats[$id_player] = array(
"name"=>$ligne_show_players["name"],
"kills"=>$ligne_show_players["kills"],
"deaths"=>$ligne_show_players["death"],
"flags"=>$ligne_show_players["kills"]);
Ceci permet d'avoir l'id du joueur comme indice dans le tableau. C'est plus propre que son pseudo.

@+

Petit nouveau ! | 2 Messages

21 mars 2007, 16:32

Merci pour ta réponse, je vais regarder tout ça ce soir, en attendant j'ai trouvé une solution hyper crade je pense, mais qui a le mérite de marcher :
<?php

	if (isset($_GET['tri'])) { $tri = $_GET['tri'] ; } 
  else                     { $tri = "id_player" ;	}
  
	$i = 0 ;
$connect2 = "SELECT * 
             FROM ".$INFO['sql_tbl_prefix']."wars_players 
             WHERE id_match=".$section."
             ORDER BY ".$tri." DESC " ;
$ligne2 = mysql_query($connect2) ; 
while ($ligne_show_players = mysql_fetch_array($ligne2))
    {
          $i++ ;
          $ratio = $ligne_show_players["kills"] / $ligne_show_players["deaths"] ;
?>
<tr id="ligne01">
       <td id="player"><? $connect3 = "SELECT name
                                       FROM ".$INFO['sql_tbl_prefix']."members 
                                       WHERE id=".$ligne_show_players["id_player"]." " ; 
                          $my_query3 = mysql_query($connect3) ;
                          $query_pseudo = mysql_fetch_array($my_query3) ;
                          ${'player_'.$i.'_name'} = $query_pseudo['name'] ;
                          ${'player_'.$i.'_flags'} = $ligne_show_players["flags"] ;
                          ${'player_'.$i.'_kills'} = $ligne_show_players["kills"] ;
                          ${'player_'.$i.'_deaths'} = $ligne_show_players["deaths"] ;
                          echo $query_pseudo['name'] ; ?>
       </td>
       <td id="flags"><? echo $ligne_show_players["flags"] ; ?></td>
       <td id="kills"><? echo $ligne_show_players["kills"] ; ?></td>
       <td id="deaths"><? echo $ligne_show_players["deaths"] ; ?></td>
       <td id="ratio"><? echo substr($ratio, 0, 4) ; ?></td>
</tr>

<?php   
 ; }
?>
</table></br>
<?php
include("fusioncharts/Includes/FusionCharts.php");
$a = 0 ;
$b = 0 ;
$c = 0 ;
$d = 0 ;
   //Create an XML data document in a string variable
$strXML  = "";
$strXML .= "<graph xaxisname='Joueurs' yaxisname='Flags-Kills-Deaths'
hovercapbg='DEDEBE' hovercapborder='889E6D' rotateNames='0'
yAxisMaxValue='120' numdivlines='10' divLineColor='CCCCCC'
divLineAlpha='80' decimalPrecision='0' showAlternateHGridColor='1'
AlternateHGridAlpha='30' AlternateHGridColor='CCCCCC' caption='Graphique détaillé'
subcaption=''>";
$strXML .= "<categories font='Arial' fontSize='11' fontColor='000000'>";
while ($a <= $i-1 )
    {
    $a++ ;
    $strXML .= "<category name='".${'player_'.$a.'_name'}."' />";  
    }
$strXML .= "</categories>";
$strXML .= "<dataset seriesname='Flags' color='FDC12E'>";
while ($b <= $i-1 )
    {
    $b++ ;
    $strXML .= "<set value='".${'player_'.$b.'_flags'}."' />";  
    }
$strXML .= "</dataset>";
$strXML .= "<dataset seriesname='Kills' color='56B9F9'>";
while ($c <= $i-1 )
    {
    $c++ ;
    $strXML .= "<set value='".${'player_'.$c.'_kills'}."' />";  
    }
$strXML .= "</dataset>";
$strXML .= "<dataset seriesname='Deaths' color='C9198D'>";
while ($d <= $i-1 )
    {
    $d++ ;
    $strXML .= "<set value='".${'player_'.$d.'_deaths'}."' />";  
    }
$strXML .= "</dataset>";
$strXML .= "</graph>";
   //Create the chart - Column 3D Chart with data from strXML variable using dataXML method
   echo renderChartHTML("../fusioncharts/FCF_MSColumn3D.swf", "", $strXML, "myNext", 550, 300);
?>
Si tu pouvais me dire ce que tu en penses, merci ;)