Problème récupération de données formulaire

fonsgr
Invité n'ayant pas de compte PHPfrance

11 janv. 2013, 22:14

Bonjour, j'ai besoin d'aide pour une récupération de données dans un formulaire j'ai mis un code commenté et j'explique mon problème en dessous (Je ne sais pas si il faut faire comme ça, c'est mon premier post sur un forum d'entraide pour une demande (donc, au cas ou, excusez moi ^^)
<body>
//Ici je recupere mon numero de commande (pour l'acces à la BD)
<?php $id_commande = $_GET['command'];?> 
//Je regarde si il y a un critère de tri de ma table
	<?php if(isset($_GET['critere'])) {
	
		switch($_GET['critere']) {
			case "ref_mpa": $critere = "reference_mpa"; break;
			case "libelle": $critere = "libelle_mpa"; break;
			case "description": $critere = "description_mpa"; break;
			default: $critere = "reference_mpa";		
		}	
	} else {
		$critere = "reference_mpa";	
	}
	//Je selectionne les produits (MPA) necessaires pour ma commande
		$sql = "SELECT mpa.reference_mpa, mpa.libelle_mpa, mpa.description_mpa, mpa_commande.id_mpa, mpa_commande.id_commande
		FROM mpa INNER JOIN mpa_commande ON mpa_commande.id_commande = $id_commande AND mpa_commande.id_mpa = mpa.id_mpa
		ORDER BY $critere";
		$mpa1 = $connect->query($sql) or die ($sql);?>

//J'affiche ma table
<table>
	<thead>
		<tr>
			<th><a  href="?critere=ref_mpa">Référence MPA<a/></th>
			<th><a  href="?critere=libelle">Libéllé</a></th>
			<th><a  href="?critere=description">Description</a></th>
			<th>Quantité</a></th>
		</tr>
	</thead>
	<?php 
		while($mpa = $mpa1->fetch()) {
	?>
		<tr class="row1">
			<td><?php echo $mpa['reference_mpa']; ?></td>
			<td><?php echo $mpa['libelle_mpa']; ?></td>
			<td style="text-align:center"><?php echo $mpa['description_mpa']; ?></td>
  //Pour chaque MPA j'affiche une zone de texte que l'utilisateur va remplir avec les quantitées nécessaire pour chaque produit (non connu a l'avance)
			<td style="text-align:center"><form action="formulaire.php" method="post"><input type="text" name=<?php$mpa1['id_mpa']?>
		</tr>
		<?php 
		?>
</table>

<input type="submit" value="Valider" />
//Bouton pour valider le formulaire
</form>
</body>
Mon problème est qu'il me faut récupérer la valeur de chaque zone de texte (sachant qu'on ne connait pas le nombre de textarea) afin de stocker chaque résultat dans ma BDD en l'associant avec sa MPA.
Cela fait 3 jours que je suis dessus et j'ai vraiment besoin d'aide :)
Merci d'avance pour vos réponses.

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

13 janv. 2013, 12:20

Salut,

Tu créer autant de formulaire que tu as d'article, sans jamais les fermer donc la je pense qu'il te fournit l'info du dernier article ?

La solution c'est d'utiliser la notation tableau dans le nom des champs input comme ça tu aura un tableau à parcourir avec les infos souhaitées.
Pour garder la liaison avec l'article tu peux mettre la clef primaire (souvent appelée id) comme index du tableau.

Par exemple <input type="text" name="article[412]" />
Où 412 est la clef primaire correspondant à l'article courant.

Côté validation tu récupère un tableau dans $_POST['article'], que tu va parcourir avec une boucle foreach

Par exemple
<?php
foreach($_POST['article'] as $idArticle => $qtCmd ){
// la validation, insertion dans une table ou autre
}
?>
La base de ton code d'affichage :

- Affichage de l'entête du formulaire (<form etc etc>)
- Affichage de l'entête de la table
- tant qu'il y a des résultat (boucle while)
- affiche la ligne de tableau
- avec un input de ce style echo '<input type="text" name="article['.$data['id']].'" />';
- fin while
- fin Table
- input submit
- fin formulaire

Pour info, ta requête sql ne devrait pas contenir de prédicat dans la jointure (idTruc=412) mais dans une clause where.

Sur la première ligne tu suppose qu'il y a une info commande dans l'url mais tu ne peux en être certain utilise un if isset (ou empty) pour être que qu'il soit présente dans l'url sinon ça risque de mettre le brin ;)


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