Probleme While, $i et variable

Probleme While, $i et variable - Programmation

Marsh Posté le 01-02-2002 à 20:33:05    

Bonsoir
 
voila :
 
J'ai un formulaire form.php qui affiche un lot de 2 champs (type="text", type="text" ) , le nombre de fois que ce lot est affiché est defini dans un précédent formulaire nb.php .
 
J'ai donc fait pour le fichier form.php une boucle WHILE qui tourne et affiche les lot de 2 champs le nombre de fois que l'on as defini dans nb.php .
Pour permettre la suite , j'ai nommé le premier champs name="champs1[]" avec des [] pour dire que l'on classe dans un tableau comme des chackbox , et le 2eme champs je l'ai nommé name="champs2<? echo $i; ?>" , $i etant un compteur qui s'autoincrement de 1.
 
Dans le fichier form2.php , j'ai fait une fonction WHILE (list ...) qui va voir tout les champs1 qui ont valeur et qui va les afficher mais aussi afficher les champs2 , la encore j'ai fait appel a un $i.
 
Tout devrait fonctionner , mais non , quand je lui demande d'afficher la valeur de champs2 , il ne m'affiche que le $i du compteur !
 
Si vous n'avez pas trop compris le probleme , je publie mes codes :
FICHIER NB.PHP :
<form>
<input type="text" name="nb">
submit ...
</form>
 
FICHIER FORM1.PHP :
 
$i = "1";
while ($i<=$nb)
  {?>
Nom du lien :
<input type="text" name="lien[]" class="admin_style">
Nom de la page :
<input type="text" name="<? echo "nom_page".$i.""; ?>" class="admin_style  
<?
$i++;  
                 }
?>
 
FICHIER FORM2.PHP :
$i = "1";
while (list(,$ajout)=each($lien))
    {  
 echo $ajout;
 echo "<br>";
 echo "$nom_page".$i++."";
 echo "<br>";
    }
 
 
Je pense que c'est assez comprehensible si l'on comprends la fonction LIST ! Je ne comprends pas , pourtant on lie bien les variables dans l'url ! si je met nom_page1 , au lieu de "$nom_page".$i."" , ca marche !!
help me !!


---------------
Je sais pas faire de revers coupé
Reply

Marsh Posté le 01-02-2002 à 20:33:05   

Reply

Marsh Posté le 01-02-2002 à 20:53:04    

:cry:


---------------
Je sais pas faire de revers coupé
Reply

Marsh Posté le 01-02-2002 à 21:39:23    

:bounce:  :bounce:  :cry:


---------------
Je sais pas faire de revers coupé
Reply

Marsh Posté le 01-02-2002 à 21:49:32    

quand tu fais
 
echo "$nom_page".$i++."";  
 
tu demandes à php d'afficher la variable $nom_page puis la variable $i. $nom_page n'existe pas, tu ne vois donc que $i. il faut en fait reconstruire le nom de la variable :
 
$maVariable = 'nompage' . $i;
 
puis utiliser $ avec ce nom de variable pour afficher son contenu :
 
echo $$maVariable;

Reply

Marsh Posté le 01-02-2002 à 22:07:27    

:)  
 
Ca a l'air de marcher pour l'instant , en fait , ce que je ne comprends pas justement , c'est que vu que c'est un formulaire , le nom des champs s'affiche ensuite par $variable ... mais pourquoi la , il fallait redefinir un $maVariable ?
le nom_page1 etc ... je les vois bien s'afficher dans l'url , alors pour les lire , il ne suffisait pas juste de faire un  
echo $nom_page".$i."";  
 
?


---------------
Je sais pas faire de revers coupé
Reply

Marsh Posté le 02-02-2002 à 11:03:17    

>> pour les lire , il ne suffisait pas juste de faire un  
echo $nom_page".$i."";  
 
non, comme j'ai dit en haut, tu demandes d'afficher deux variables.  
 
si tu veux tout comprendre de A à Z, on va bosser avec la notation polonaise inversée (bouh ), présente sur certaines calculatrices et similaire au fonctionnement interne d'un langage.
 
ie + 1 2 veut en fait dire 'calculer 1 + 2'. dans un langage, c'est représenté sous forme d'une pile, qu'on lit de bas en haut :
 
2
1
+
 
à l'éxécution, php regarde ce qu'il y a dans la pile, voit qu'il y a un opérateur +, et appelle la fonction +. la fonction + se charge de chopper les deux opérandes (paramètres, 1 et 2 ici) avec une fonction interne (qu'on va eppeler getOperand()), fait l'addition, et remplace la stack avec le résultat :
 
3
 
ensuite, tu as la notion de priorité des opérateurs, ie 1 + 2 * 3 sera converti en :
 
2
3
*
1
+
 
la fonction appelle lorsqu'elle choppe ses paramètres getOperand(). getOperand() regarde ce qu'il y a dans la pile, si c'est un nombre (1) elle renvoie ce nombre, si c'est un opérateur (ici, *) elle appelle la fonction liée à cet opérateur, qui va réaliser la même opération que '+' plus haut pour la multiplication. donc après l'appel à *, ta pile ressemblera à :
 
6
1
+
 
maintenant, on appelle +, on a :
 
7
 
hop, tout con.
 
en php, $ charge dans la pile la variable correspondant au symbole contenu dans l'entrée suivante de la pile (un nom, ici nom_page)
 
mettons que nom_page est une variable qui vaut "bonjour" :
 
nom_page
$
 
après éxécution de la fonction associée à $, tu as dans ta pile :
 
"bonjour"
 
comment est éxécuté un echo $nom_page ? pareil, echo est une référence à une fonction interne de php, qui demande une opérande :
 
nom_page
$
echo
 
echo appelle getOperand() qui éxécuté $ et ramène la pile à :
 
"bonjour"
echo
 
echo affiche alors "bonjour".
 
en php, . est l'opérateur de concaténation de deux chaînes, ie "bonjour" . " mario" renvoie "bonjour mario".
 
sur la pile, ça donne :
 
" mario"
"bonjour"
.
 
après éxécution de la fonction ., tu obtiens
 
"bonjour mario"
 
maintenant, quand tu demandes (mettons que nom_page vaut "bonjour", $i vaut 5)
 
echo $nom_page . $i
 
tu demandes en fait la concaténation des deux variables nom_page et i. la pile devient alors
 
i
$
nom_page
$
.
echo
 
à l'éxécution, echo appelle getOperand() qui tombe sur l'opérateur de concaténation . qui a donc besoin de deux paramètres. il appelle deux fois getOperand() :
 
la première fois, il tombe sur un opérateur $ qui va donc chercher la variable $i:
 
5
nom_page
$
.
echo
 
la seconde fois, il tombe à nouveau sur un opérateur $ qui va ici chercher la variable $nom_page :
 
5
"bonjour"
.
echo
 
maintenant que . a ses deux opérandes, il peut réaliser la concaténation :
 
"bonjour5"
echo
 
et passer le résultat à echo qui affiche "bonjour5".
 
//
 
quand tu fais ton code echo $nom_page . $i, nom_page n'existe pas, il concatène une chaîne vide avec la valeur de i, et passe cette valeur à echo.
 
ce que tu veux, c'est recréer le nom de la variable "nom_page" + un entier. par ex si i vaut 1, il faut donc que la pile, en interne, ressemble à :
 
nom_page1
$
echo
 
1 étant la valeur de $i, on veut donc chopper la variable dont le nom est la concaténation de nom_page et de i :
 
i
$
nom_page
.
$
echo
 
soit en php echo $(nom_page . $i)
 
soit la forme 'compactée' de  
 
$maVariable = 'nompage' . $i;  
echo $$maVariable;  
 
qui peut $etre assemblé pour la première ligne par :
 
i
$
nom_page
.
maVariable
$
=
 
qui va créer une nouvelle variable 'maVariable' contenant le nom de la page.
 
la seconde ligne devient :
 
maVariable
$
$
echo
 
echo appelle getOperand(), qui tombe sur la fonction 'va chercher la variable', qui lui même tombe sur la fonction 'va chercher la variable'. cette seconde fonction va retourner :
 
nom_page1
$
echo
 
la première fonction peut donc récupérer la variable appelée nom_page1, et la passer à echo.
 
//
 
tu n'as pas besoin de connaître tout ça pour programmer, ça te sera juste très utile. une fois que tu l'as dans la tête, c'est limpide.

Reply

Marsh Posté le 02-02-2002 à 12:15:16    

:ouch:  :ouch:  
 
 :) Trés bonne explication !! je comprends maintenant !! :)  
 
Mes respect :jap:


---------------
Anti TRK , adherez a la True Koncept ! TTK !!!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed