Récupération données d'un formulaire à partir d'une boucle

Eléphanteau du PHP | 19 Messages

17 août 2011, 00:09

Bonjour,

Je débute dans le PhP ^^
J'essaye de faire un petit code qui me pose quelques soucis.
Je vais essayer de vous l'exposer :

Sur la page précédente l'utilisateur saisi le nombre de sous-ensemble qui compose sa pièce.
Ce qui va générer le nombre de boucle, ainsi il pourra renseigner le poids de ses différents sous-ensembles.
<form method="post" action="Test.php">
			<?php
			$nombre_sous_ensemble=$_POST['nombre_sous_ensemble'];
			$i=1;
			while ($i <= $nombre_sous_ensemble)
			{ 
			$i++;?>
			<p>
			<fieldset>
				<legend>Définition de la pièce</legend>
				
				<label for="poids_sous_ensemble">Poids (en grammes) ?</label><br />
				<input type="text" name="poids_sous_ensemble" id="poids_sous_ensemble" /><br />
				
			</fieldset>
			<?php
			}
			?>
			<input type="submit"  value="Valider" tabindex="10"/><input type="reset" tabindex="20"/>
			</p>
			</form>
Mon problème c'est que je ne sais pas trop comment récupérer les infos qui sont envoyer par le formulaire.
car si il y a qu'un sous-ensemble, je récupère bien son poids dans $_POST['poids_sous_ensemble'].
Par contre s'il y a plusieurs valeurs dans $_POST['poids_sous_ensemble'], il me donne plus rien.

J'ai essayé de faire des <?php echo $i; ?> au niveau des 'name' et 'id' mais j'ai du mal me débrouiller ça marche toujours pas.
J'ai regardé pas mal de tutorial, mais j'ai pas trouvé un qui soit assez clair pour mon niveau en PhP.

Si quelqu'un peux prendre le temps de m'expliquer ou me rediriger vers un tutorial qui détaille mon problème.
Merci d'avance :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 août 2011, 00:43

salut,

il te faut nommer ton champ avec la notation tableau <input type="text" name="poids_sous_ensemble[]" id="poids_sous_ensemble" />
tu récupère donc un tableau dans $_POST['poids_sous_ensemble'] que tu peux traiter avec foreach

pour info un "id" html doit être unique tu ne peux donc l'utiliser ainsi dans ta boucle, il faut utiliser une classe ;)
=> <input type="text" name="poids_sous_ensemble[]" class="poids_sous_ensemble" />

a la limite tu peux aussi demander un nom pour le sous ensemble en même temps ? dans ce cas même chose utilise la notation tableau pour ce champ.
par exemple
<input type="text" name="nom_sous_ensemble[]" class="nom_sous_ensemble" />
<input type="text" name="poids_sous_ensemble[]" nom="poids_sous_ensemble" />

tu aura deux tableaux avec les même indice ce qui te permet de faire la liaison entre le poids et le nom (le nom et le poids d'un même élément ont le même index, par exemple $_POST['nom_sous_ensemble'][1] et $_POST['poids_sous_ensemble'][1] pour le second, la numérotation commence à zéro ;) )

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 19 Messages

17 août 2011, 09:56

Salut Moogli,

Merci beaucoup pour tes conseils!
J'arrive à récupérer des infos mais pas toutes :'(

Voici ce que j'ai :
		    <form method="post" action="Test.php">
			<?php
			$nombre_sous_ensemble=$_POST['nombre_sous_ensemble'];
			$i=1;
			while ($i <= $nombre_sous_ensemble)
			{ 
			$i++;?>
			<p>
			<fieldset>
				<legend>Définition de la pièce</legend>

				<label for="nom_sous_ensemble">Nom du sous-ensemble ?</label><br />
				<input type="text" name="nom_sous_ensemble[]" class="nom_sous_ensemble" /><br />
				
				<label for="poids_sous_ensemble">Poids (en grammes) ?</label><br />
				<input type="text" name="poids_sous_ensemble[]" class="poids_sous_ensemble" /><br />
				
				<label for="matiere_sous_ensemble">Matière ?</label><br />
				<input type="text" name="matiere_sous_ensemble[]" class="matiere_sous_ensemble" /><br />

				<label for="processus_matiere_sous_ensemble">Processus de réalisation de la matière ?</label><br />
				<input type="text" name="processus_matiere_sous_ensemble[]" class="processus_matiere_sous_ensemble" /><br /> 

				<label for="traitement_matiere_sous_ensemble">Traitement sur la matière ?</label><br />
				<input type="text" name="traitement_matiere_sous_ensemble[]" class="traitement_matiere_sous_ensemble" /><br />				
			
			<input type="hidden" name="nombre_sous_ensemble" value="<?php echo $nombre_sous_ensemble; ?>">
			</fieldset>
			<?php
			}
			?>
			<input type="submit"  value="Valider" tabindex="10"/><input type="reset" tabindex="20"/>
			</p>
			</form>
J'ai bien supprimer l'"id" qui doit être unique de la boucle pour le remplacer par une "class".
Et mis les crochets pour les "name" afin de récupérer toutes les données.

Dans mon fichier Test.php, j'ai fait un truc tout simple pour voir comment je peux utiliser mes données indépendamment un peu plutard :
<p>les données récupérées sont : 
<?php 
echo $_POST['nom_sous_ensemble'][1];
echo $_POST['nom_sous_ensemble'][2];
echo $_POST['nom_sous_ensemble'][3];
echo $_POST['poids_sous_ensemble'][1];
echo $_POST['poids_sous_ensemble'][2];
echo $_POST['poids_sous_ensemble'][3];
echo $_POST['matiere_sous_ensemble'][1];
echo $_POST['matiere_sous_ensemble'][2];
echo $_POST['matiere_sous_ensemble'][3];
echo $_POST['processus_matiere_sous_ensemble'][1];
echo $_POST['processus_matiere_sous_ensemble'][2];
echo $_POST['processus_matiere_sous_ensemble'][3];
echo $_POST['traitement_matiere_sous_ensemble'][1];
echo $_POST['traitement_matiere_sous_ensemble'][2];
echo $_POST['traitement_matiere_sous_ensemble'][3];
?></p>
Malheureusement j'ai toujours des erreurs que je m'explique pas :'(.
Image

Puis-je encore user de ta lumière?
Merci,

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 août 2011, 10:21

Le truc c'est que la numérotation des index commence toujours a zéro donc la si tu décale tous de -1 tu n'aura pas de problème.

Par contre utilise foreach c'est beaucoup plus mieux ;) (essai en remplacement de ton bout de code la tu va voir c'est très pratique et tu t'affranchis tu problème d'index ;) )

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 19 Messages

17 août 2011, 12:53

Merci beaucoup !!!
Je comprend mieux la numérotation des index!

Maintenant ça marche :)

Merci encore :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 août 2011, 16:52

De rien :)
Il en faut peu pour être heureux ......