|
Dernière réponse | |
---|---|
Sujet : Probleme While, $i et variable | |
THE TRUE -Tinost@r- | :ouch: :ouch: :) Trés bonne explication !! je comprends maintenant !! :) Mes respect :jap: |
Aperçu |
---|
Vue Rapide de la discussion |
---|
THE TRUE -Tinost@r- | :ouch: :ouch: :) Trés bonne explication !! je comprends maintenant !! :) Mes respect :jap: |
youdontcare | >> 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. |
-tinost@r- | :) 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.""; ? |
youdontcare | 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; |
-tinost@r- | :bounce: :bounce: :cry: |
-tinost@r- | :cry: |
-tinost@r- | 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 !! |