boucle For qui ne s'affiche pas

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 : boucle For qui ne s'affiche pas

Re: boucle For qui ne s'affiche pas

par maxgeek » 15 août 2011, 22:41

Et bien j'ai patouillé, j'ai relu la doc, j'ai relu vos aides, et ça fonctionne !! Merci beaucoup :D Bonne continuation à tous et à toutes

Re: boucle For qui ne s'affiche pas

par Alf?> » 15 août 2011, 18:35

Salut !

Moi quand je mets ce code là ça fonctionne :
<form action="enregistrecompositeur.php" method="post">
  <?php
  $nbperso = 5;
  
  for ($nb_perso_demande = 1; $nb_perso_demande <= $nbperso; $nb_perso_demande++)
  {
  ?>
  <label for="pseudo"> Pseudo (ou nom) </label>
  <input type="text" name="pseudo<?php echo $nb_perso_demande; ?>" id="pseudo" />
  <label for="instrument"> Instrument jou&eacute; </label>
  <input type="text" name="instrument<?php echo $nb_perso_demande; ?>" id="instrument" /><br /><br />
  <?php
  }
  ?>
</form>
Evidement, en donnant une valeur à $nbperso en dur. Mais c'est pareil.
Au passage, si tu veux vérifier qu'une valeur passée en POST est numérique je te conseil d'utiliser la fonction is_numeric(), car intval() te renvoi la valeur numérique (entier) du contenu de ta variable.

Exemple :
 echo intval('blabla le chat');
Te retourne 0;

Il est possible que tu ne récupère pas le $_POST['nbperso'] quand t'arrive sur ta page.
Pour t'en assuré, tape à la fin de ton code php :
print_r($_POST);
Ainsi, tu affichera le contenu de toutes tes variables de type POST.

Moi dispo pour répondre à question :mrgreen:

Re: boucle For qui ne s'affiche pas

par maxgeek » 15 août 2011, 16:22

oui c'est ce que j'avais mit ce $nbperso = $_POST['nbperso'] mais ça ne fonctionne pas ...

pour le 3), oui merci c'est bon a savoir ça !

Re: boucle For qui ne s'affiche pas

par sirakawa » 15 août 2011, 15:42

1) l'étude américaine montre que sur les trois façons d'implémenter une boucle, chacun a ses préférences... Avis aux Ayatollahs.
2) remplacer
$nbperso= 18;
par
$nbperso = $_POST['nbperso'];
3) Un champ type='text' peut contenir du texte ou des nombres indifféremment; PHP traite les nombres comme des nombres. Certains Gurus consilleront de passer par $nb_perso = intval($_PST['nbperso']);

Ce que je dis est confirmé par l'obligation faite par le validator d'écrire <input type = 'text' name ='nombre_entier' value = '1' /> avec la valeur entre quotes...
Pour ce genre de questions, je me sers beaucoup de
http://www.w3schools.com/html5/tag_input.asp
plus humain que les docs officielles...

Re: boucle For qui ne s'affiche pas

par maxgeek » 15 août 2011, 12:16

Je n'ai pas tout compris l'étude américaine :? Quel est le rapport ?
Aussi, dans tous les codes que vous m'avez donné, vous indiquez vous meme dans le script la valeur de $nbperso , or moi c'est l'utilisateur qui l'indique via un formulaire a la page précédente.

Voici ce formulaire :
<form action="comptecompositeur.php" method='post'>
		<p>
		<label for="nbperso"> Nombre de Personnes dans le groupe : </label>
		<input type="text" name="nbperso" id="nbperso" maxlength="2"/>
		<input type="submit" value="Envoyer" />
		</p>
	</form>
Et j'ai crois que le problème est que le type du input est "text", dans php le prend-il comme une chaine de caractère ? J'ai cherché comment faire un input avec un nombre, je n'ai pas trouvé, est-ce là le problème ?

Re: boucle For qui ne s'affiche pas

par sirakawa » 15 août 2011, 11:14

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&eacute; </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
...

Re: boucle For qui ne s'affiche pas

par maxgeek » 15 août 2011, 09:14

Oui ok j'ai retiré $nb_perso_demande++;

Oui, $nb_perso_demande vaut toujours 1 avant la boucle, je l'indique dans le code, par contre $nbperso est entré par l'utilisateur, je comptais rajouté des filtres par la suite pour bloquer a que des chiffres et a que des chiffres supérieurs à 1, mais pour l'instant quand je testé mon code je ne donnais que des valeurs supérieures à 1, via le formulaire de ma page précédente.

Re: boucle For qui ne s'affiche pas

par sam12 » 15 août 2011, 00:34

Il parle de
<?php
                                        $nb_perso_demande++;
                                        }
...

Es-tu sur que $nb_perso_demande est inférieur à $nbperso?

Re: boucle For qui ne s'affiche pas

par maxgeek » 15 août 2011, 00:24

stealth35 : oui j'ai laissé le $nb_perso_demande++ parce que tu l'avais mit dans ton message juste avant, j'ai mit exactement la meme ligne que ce que tu m'as dit :
c'etait

for($nb_perso_demande = 1; $nb_perso_demande <= $nbperso; $nb_perso_demande++)

sam12 : oui j'ai essayé aussi en indiquant moi meme les valeurs de $nbperso et de $ne_perso_demande dans le script avant la boucle et ça fonctionne aussi comme ça chez moi, sauf que moi $nbperso est indiqué par l'utilisateur dans la page précédente via un formulaire donc via $_POST['nbperso'], et non décidé par moi-même dans le script. C'est là le pb, quand je défini $nbperso par une variable du POST, ça plante.

Re: boucle For qui ne s'affiche pas

par sam12 » 14 août 2011, 23:58

J'essaye:
<?php
                                $nb_perso_demande = 1;
                                $nbperso = 18;

                                for($nb_perso_demande = 1; $nb_perso_demande < $nbperso; $nb_perso_demande++)
                                        {
                                        ?>

                                        <html><label for="pseudo"> Pseudo (ou nom) </label>
                                        <input type="text" name="pseudo<?php echo $nb_perso_demande; ?>" id="pseudo" />
                                        <label for="instrument"> Instrument jou&eacute; </label>
                                        <input type="text" name="instrument<?php echo $nb_perso_demande; ?>" id="instrument" /><br /><br />
                                        </html>
 <?php 
										
										}
                               

										?>
Ça marche parfaitement.

Re: boucle For qui ne s'affiche pas

par stealth35 » 14 août 2011, 23:55

t'as laissé le $nb_perso_demande++ a la fin, je te conseil d’apprendre les bases du langage avant de te lancer dans un projet

Re: boucle For qui ne s'affiche pas

par maxgeek » 14 août 2011, 23:26

Toujours le meme résultat avec :
<?php
				$nb_perso_demande = 1;
				$nbperso = $_POST['nbperso'];
				echo "avant";
				for($nb_perso_demande = 1; $nb_perso_demande <= $nbperso; $nb_perso_demande++)
					{
					?>
					dans
					<label for="pseudo"> Pseudo (ou nom) </label>
					<input type="text" name="pseudo<?php echo $nb_perso_demande; ?>" id="pseudo" />
					<label for="instrument"> Instrument jou&eacute; </label>
					<input type="text" name="instrument<?php echo $nb_perso_demande; ?>" id="instrument" /><br /><br />
					<?php
					$nb_perso_demande++;
					}
				
				echo "apres";
				echo $nb_perso_demande;
				?>

Re: boucle For qui ne s'affiche pas

par stealth35 » 14 août 2011, 23:18

oui t'as pas bien lu la doc pour le for
c'etait

for($nb_perso_demande = 1; $nb_perso_demande <= $nbperso; $nb_perso_demande++)

Re: boucle For qui ne s'affiche pas

par maxgeek » 14 août 2011, 23:09

J'ai lu la doc et j'ai tout essayé avec for, en vain, alors j'ai changé j'ai utilisé while, voici le code :
<?php
				$nb_perso_demande = 1;
				$nbperso = $_POST['nbperso'];
				echo "avant";
				while ($nb_perso_demande <= $nbperso)
					{
					?>
					dans
					<label for="pseudo"> Pseudo (ou nom) </label>
					<input type="text" name="pseudo<?php echo $nb_perso_demande; ?>" id="pseudo" />
					<label for="instrument"> Instrument jou&eacute; </label>
					<input type="text" name="instrument<?php echo $nb_perso_demande; ?>" id="instrument" /><br /><br />
					<?php
					$nb_perso_demande++;
					}
				
				echo "apres";
				echo $nb_perso_demande;
				?>
J'ai rajouté cette ligne a la fin du code :
echo $nb_perso_demande;
Pour voir où en été $nb_perso_demande à la fin de la boucle, et donc maintenant le code m'affiche
avantapres1
le 1 valant $nb_perso_demande, j'en ai dédui que cette variable ne bougeait pas malgrés l'incrémentation dans la boucle ...

Re: boucle For qui ne s'affiche pas

par sam12 » 14 août 2011, 19:42

Je dirais que ça vient de ton utilisation du for.
La doc: http://php.net/manual/fr/control-structures.for.php