Faire une boucle sur des variable POST

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 : Faire une boucle sur des variable POST

par ma_pomme » 30 juin 2008, 19:10

oui merci c'est ce que je vais faire ;)

par guilt92 » 30 juin 2008, 10:20

Tu peux utiliser la boucle for pour générer ton code html :

par exemple :
<form name="formulaire">
<?php
for($i=1;$i<20;$i++)
	{
	?>
	<input type="text" name="champ_<?php echo $i;?>"/>
	<?php
	}
?>
</form>

Cela créera un formulaire avec les champs "champ_1", "champ_2"... jusqu'a champ_19.

Sinon si tu veux faire pareil avec des noms personnalisés tu peux stocker ces noms dans un tableau et utiliser la même procédure.

J espere que cela t aidera.

par ma_pomme » 29 juin 2008, 16:05

oui je sais j'ai un peu de mal a expliqué mon soucis lol

je vais essayé d'être le plus clair possible :s (pas évident)

j'ai ce formulaire
<table align="center" width="100%">
<tr><td colspan="2" align="center">
<h2>Ajout de recette</h2></td></tr>
<form action="ajout_recette_traitement.php" enctype="multipart/form-data" method="post">

<tr><th>
Nom :
</th>
<th><input type="text" name="nom"></th></tr>
<tr></tr>
<tr><th>Ingrédients nécessaires :</th>
<th><input type="text" name="in0">&nbsp;&nbsp;<input type="text" name="in1">&nbsp;&nbsp;<input type="text" name="in2">&nbsp;&nbsp;<input type="text" name="in3">&nbsp;&nbsp;<input type="text" name="in4">&nbsp;&nbsp;<input type="text" name="in5">&nbsp;&nbsp;<input type="text" name="in6">&nbsp;&nbsp;<input type="text" name="in7">&nbsp;&nbsp;<input type="text" name="in8">&nbsp;&nbsp;<input type="text" name="in9">&nbsp;&nbsp;<input type="text" name="in10">&nbsp;&nbsp;<input type="text" name="in11">&nbsp;&nbsp;<input type="text" name="in12">&nbsp;&nbsp;<input type="text" name="in13">&nbsp;&nbsp;<input type="text" name="in14">&nbsp;&nbsp;<input type="text" name="in15">&nbsp;&nbsp;<input type="text" name="in16">&nbsp;&nbsp;<input type="text" name="in17">&nbsp;&nbsp;</th></tr>
<tr></tr>
<tr><th>Style :</th>
<th>Végétalien<input type="radio" name="style" value="V"><br />Végétarien<input type="radio" name="style" value="v"><br />Diététique<input type="radio" name="style" value="d"><br />Classique <input type="radio" name="style" value="c"></th></tr>
<tr></tr>
<tr><th>Economique :</th>
<th>€ € €<input type="radio" name="eco" value="3"><br />€ €<input type="radio" name="eco" value="2"><br />€<input type="radio" name="eco" value="1"></th></tr>
<tr></tr>
<tr><th>Rapidité :</th>
<th>* * *<input type="radio" name="rap" value="3"><br />* *<input type="radio" name="rap" value="2"><br />*<input type="radio" name="rap" value="1"></th></tr>
<tr></tr>
<tr></tr>
<tr><th>Liste des ingrédients détaillée :</th>
<th><textarea name="ingr_det" cols="80" rows="10" size="80" ></textarea></th></tr>
<tr></tr>
<tr><th>Façon :</th>
<th><textarea name="facon" cols="80" rows="10" size="80"></textarea></th></tr>
<tr></tr>
<tr><th></th>
<th><input type="submit" value="Envoyer"></th></tr>
Pour les champs des ingredients nécessaires je voudrais savoir s'il est possible de faire de façon simple un traitement sans ce tapé une ou deux ligne par ingredient avec juste un chiffre qui change

par iclo » 29 juin 2008, 15:47

Hum, un peu confus ton problème...

Pour tester si un champ est vide, tu as la fonction empty()

par ma_pomme » 29 juin 2008, 14:43

en faite je ne veux traiter QUE les champs remplie par l'utilisateur pour ne pas insérer des partie vide dans ma bdd et ne pas me taper des conditions pour tout ces champs.

j'avais pensé faire un truc genre array ($in[0], $in[1], etc..) mais ça ne passe pas en POST a moins que l'on puisse validé l'array avant l'envoie du formulaire :(

par katagoto » 29 juin 2008, 12:20

Je tenterais un truc comme ça :
$i=0;
foreach($_POST as $clef => $valeur){
if(!isset($_POST[$clef]) OR empty $_POST[$clef]) $i++;
}
if($i>0) die("un champ n'est pas remplis");
Chaque fois qu'un champs n'est pas remplis, j'incrémente $i...

Le problème, c'est qu'il faudrait vérifier le nombre de champs et leurs nom :
if(!in_array($clef, $tableau_champs)) die ("champs inéxistant");
else unset($tableau_champs[$clef]); // Pour pas avoir deux fois le même champs

Faire une boucle sur des variable POST

par ma_pomme » 29 juin 2008, 11:51

Bonjour, Bonsoir,

Donc voila mon problème j'ai une vingtaine de champs dans mon formulaire qui ne seront pas forcement tous remplis et pour traité ces champs je voulais faire une boucle pour ne pas forcement vérifier les champs vide. Puis par la suite les envoyé en liste dans ma bdd.

Mes champs son nommé in0, in1, in2, etc... jusqu'à 19

j'ai essayé plein de chose comme considérer les variables comme un tableau dans la boucle sans réussite.

Merci bcp de votre aide par avance