Page 1 sur 1

Expliquation d'une fonction

Posté : 14 août 2007, 13:39
par Invité
Bonjour à tous,
Je requiers votre aide afin de m'expliquer ligne par ligne une fonction que j'essaye de déchiffrer :D
function affich_championnats ($champ, $action)
{
  $requete="SELECT phpl_championnats.id, phpl_divisions.nom, phpl_saisons.annee 
            FROM phpl_championnats, phpl_divisions, phpl_saisons 
            WHERE phpl_championnats.id_division=phpl_divisions.id 
            AND phpl_championnats.id_saison=phpl_saisons.id ORDER by annee desc, nom";
  $resultats=mysql_query($requete) or die (mysql_error());
  $i=0;

/*-------------------------------------
 2nd partie */
    while ($row = mysql_fetch_array($resultats))
      {
        $saison=$row[2]+1;
        $gras_fin="</b>";

        for($i=1;$i<=9;$i++)
        {
          //echo "sg";
          $gras = "gras_$i";
          $$gras="</b>";
        }

        if ($action=="equipes" and $champ=="$row[0]"){$gras_1="<b>";}
        elseif ($action=="dates" and $champ==$row[0]){$gras_2="<b>";}
        elseif ($action=="matchs" and $champ==$row[0]){$gras_3="<b>";}
        elseif ($action=="parametres" and $champ==$row[0]){$gras_4="<b>";}
        elseif ($action=="resultats" and $champ==$row[0]){$gras_5="<b>";}
        elseif ($action=="joueurs" and $champ==$row[0]){$gras_9="<b>";}
        elseif ($action=="buteurs" and $champ==$row[0]){$gras_6="<b>";}
        elseif ($action=="generer" and $champ==$row[0]){$gras_7="<b>";}
        elseif ($action=="supp" and $champ==$row[0]){$gras_8="<b>";}

        if ($champ=="$row[0]") {$class="phpl7";}
        elseif (($i%2)==0) {$class="phpl3";}
        else {$class="phpl4";}

        echo "<tr>";
        echo "<td class='$class'>$row[0]</td>";
        echo "<td class='$class'>$row[1]</td>";
        echo "<td class='$class'>$row[2]/$saison</td>";
        echo "<td class='$class' align=\"right\" width=\"75%\">";

        echo " $gras_1<a href=\"?page=championnat&action=equipes&champ=$row[0]\">[".EQUIPE."]</a>$gras_fin";
        echo " $gras_2<a href=\"?page=championnat&action=dates&champ=$row[0]\">[".DATE."]</a>$gras_fin";
        echo " $gras_3<a href=\"?page=championnat&action=matchs&champ=$row[0]\">[".MATCH."]$gras_fin</a>";
        echo " $gras_4<a href=\"?page=championnat&action=parametres&champ=$row[0]\">[".PARAMETRE."]$gras_fin</a>";
        echo " $gras_5<a href=\"?page=championnat&action=resultats&champ=$row[0]\">[".RESULT."]$gras_fin</a>";
        echo " $gras_9<a href=\"?page=championnat&action=joueurs&champ=$row[0]\">[".JOUEURS."]$gras_fin</a>";
        echo " $gras_6<a href=\"?page=championnat&action=buteurs&champ=$row[0]\">[".BUTEUR."]$gras_fin</a>";
        echo " $gras_7<a href=\"?page=championnat&action=generer&champ=$row[0]\">[".GENERER."]$gras_fin</a>";
        echo " $gras_8<a href=\"?page=championnat&action=supp&champ=$row[0]\">[".ADMIN_RENS_8."]$gras_fin</a></td>";
        echo "</tr>";
        $i++;

      }
La premiere partie pas de problème je comprend (jointure)
mais la seconde partie je comprend pas pouruqoi des le début de la boucle on met

$saison=$row[2]+1;

Sinon $row[0] correspond bien à la première entrée (en fonction de l'ordre établie )

Merci d'avance

Posté : 14 août 2007, 13:48
par d0m
$row est un tableau contenant à chaque boucle un ligne résultat de la requête

la requête SQL étant ce qu'elle est, $row contient :
$row[0] //phpl_championnats.id
$row[1] //phpl_divisions.nom
$row[2] //phpl_saisons.annee
donc
$saison = $row[2] + 1
revient à incrémenter de 1 l'année (= l'année d'après quoi).

Posté : 14 août 2007, 13:58
par Snipy
en effet... merci

et peux tu me dire l'interet de la boucle for et de ce qui se passe par la suite (dans les echo) avec la variable $gras.

Merci :)

Posté : 14 août 2007, 14:05
par Genova
On va dire pour être gentil que c'est un code mal pensé et compliqué pour rien, voir même tordu :D
        for($i=1;$i<=9;$i++)
        {
          //echo "sg";
          $gras = "gras_$i";
          $$gras="</b>";
        } 
Litéralement :
fait une boucle de 1 à 9
déclare une variable $gras qui vaut successivement gras_1, gras2, ..., gras_9
créé une variable $gras_1 = '</b>' puis $gras_2 = '</b>' ... jusque $gras_9 = '</b>'

Il s'agit d'une création dynamique de variable.
$toto = 'salut';
$$toto = 'une valeur'; // revient à faire $salut = 'une valeur';

Posté : 14 août 2007, 14:07
par d0m
dans la boucle for, il y a création de variables de variables.
C'est une méthode générique pour éviter d'écrire :
$gras_1 = "</b>";
$gras_2 = "</b>";
$gras_3 = "</b>";
...
$gras_9 = "</b>";
Après, c'est simplement pour mettre en gras l'une des paramètres selon la valeur de $action.

Posté : 14 août 2007, 14:10
par Ryle
En gros le but semble d'être de mettre en gras le lien demandé.. c'est très cochon comme façon de faire (et c'est mal fait) mais bon... voici toujours quelques explications :

En php, tu peux composer et accéder aux variables dynamiquement :
$var_toto équivaut à ${"var_toto"}; , mais aussi $str = 'toto'; ${'var_'.$str}; , ou bien $str = 'var_toto'; $$str;

Aisni la boucle
        for($i=1;$i<=9;$i++) { 
          $gras = "gras_$i"; 
          $$gras="</b>"; 
        }

Va construire 9 variables $gras_1, $gras_2, ... $gras_9 et leur affecter à chacune la valeur '</b>'

Et à mon avis un simple test pour afficher un style gras dans le lien serait nettement plus simple et éviterait de générer un code html plein de </b> qui n'ont pas été ouverts...

Posté : 14 août 2007, 14:51
par Sékiltoyai
Rho, c'est beau ca, 3 réponses identiques à la suite, si avec ca il a pas compris :mrgreen:

Posté : 14 août 2007, 15:00
par Ryle
Et encore, on a été sympa je trouve de donner trois fois la même, on aurait pu tous changer et lui demander de trouver la bonne pour rendre ça un peu plus ludique ;)