En premier, un code à ma façon:
<!-- sur id
http://www.w3.org/TR/html4/struct/global.html#adef-id
http://www.w3.org/TR/html4/interact/forms.html#idx-label-2
-->
<?php
$nbperso = 18;
/*
cette variable contiendra tout le texte html à afficher sans aucun cod ephp
ce qui me semble plus claire
*/
$texte = "<html><head></head><body>";
for ($numero_perso_demande = 1; $numero_perso_demande < $nbperso; $numero_perso_demande++)
// changement de nom de variable purement cosmétique
/* la condition < est probablement mal choisie : le value ='$numero_perso_demande' est là pour le montrer
il faut sans doute <=
*/
{
// création préalable de variables donnant leurs noms aux champs
$nom_champ_pseudo = "pseudo_".$numero_perso_demande;
$nom_champ_instrument = "instrument_".$numero_perso_demande;
$texte .= "
<!-- id doit être unique pour avoir du sens, ce qui semble compliquer l'emploi de label;
mais on a le droit de mettre des labels associés implicitement; donc suppression possible des id->
<label> Pseudo (ou nom) </label>
<input type = 'text' name = '$nom_champ_pseudo' id='$nom_champ_pseudo' value = '$numero_perso_demande' />
<label> Instrument joué </label>
<input type = 'text' name = '$nom_champ_instrument' /><br /> <br />";
}
$texte .= "</body></html>";
print "$texte";
?>
Puis deux remarques:
Il ya en pseudo-langage trois façons d'exécuter une boucle:
A la boucle pour(boucle for)
pour toutesles valeurs d'une variable entre une valeur de départ et une valeur d'arrivée faire quelque chose:
for ($i = 1; $i <=5; $i++)
{
print "$i";
}
$i prend la valeur 1
Utilisée toutes les fois où il suffit de connaître la valeur initiale, la valeur finale, et le pas d'incrémentation
afficher les nombres pairs entre 0 et 10
for ($i = 0; $i <=10; $i +=2)
{
print "$i<br />";
}
1) la comparaison a lieu
$i est inférieur à 5
le contenu de la boucle est exécuté
$i prend la valeur 2 ($i+1; les gurus parlent de post-incrémentation)
on repart en 1)
B La boucle tant que (while)
tant que le nom d'utilisateur comprend moins de cinq signes, refaire la saisie
supposons qu'on dispose d'une fonction entree qui permette de saisir un teste:
$nom = entree ();
while (strlen($nom) <5))
{
$nom = entree();
}
// le nom est d'une longueur supérieure ou égale à 5 (application de la loi de de Morgan)
tant que le numéro est inférieur à la limite:
$numero = 1;
$limite = 12;
while ($numero <= $limite)
{
// faire quelque chose
dernière instruction
$numero ++ // ou += quelque chose
}
// le numero est supérieur à limite
Il faut que dans la boucle quelque chose qui influe sur la condition change
Cette boucle peut ne pas être effectuée.
C La boucle jusqu'à ce que
jusqu'à ce que le nom d'utilisateur comprenne cinq signes ou plus, faire la saisie
do
{
$nom = entree()
} while (strlen($nom <5 ));
effectuée une fois au moins.
On montre facilement que la boucle while peut tout faire, et un étude américaine a montré que des étudiants confrontés à des problèmes de constitution de 3 boucles a : pour laquelle on conseille en général une boucle for(ton exemple), b pour laquelle on conseille en général une boucle tant que, c pour lequel on préconise une boucle while avaient produit des résulttas étonnants:
ceux qui avaient choisi une boucle tant que ou jusqua non standard avaient tous un programme juste
ceux qui avaient choisi les boucles appropriées n'avaient pas et de loin que des programmes justes
...