Expliquation d'une fonction

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Expliquation d'une fonction

par Ryle » 14 août 2007, 15:00

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 ;)

par Sékiltoyai » 14 août 2007, 14:51

Rho, c'est beau ca, 3 réponses identiques à la suite, si avec ca il a pas compris :mrgreen:

par Ryle » 14 août 2007, 14:10

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...

par d0m » 14 août 2007, 14:07

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.

par Genova » 14 août 2007, 14:05

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

par Snipy » 14 août 2007, 13:58

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 :)

par d0m » 14 août 2007, 13:48

$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).

Expliquation d'une fonction

par Invité » 14 août 2007, 13:39

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