2010-08-11 7 views
1

J'ai un formulaire qui demande aux utilisateurs d'entrer des nombres dans plusieurs champs de formulaire. Ils peuvent sélectionner le nombre de champs de formulaire qu'ils souhaitent. J'ai étiqueté les champs de formulaire comme df1, df2, df3 etc. Pour chaque champ de formulaire supplémentaire, l'utilisateur ajoute simplement plus 1 au nombre après df. Mon problème c'est d'essayer de capturer (en utilisant PHP) ces champs et de les mettre dans un tableau. Pour compliquer les choses, l'utilisateur peut ne pas remplir un champ, par ex. df2 ou df15. Je suis à la recherche d'un moyen de trier les champs de formulaire de publication qui commencent df1 mais élimine tous les champs qui ont été laissés en blanc. Ensuite, insérez leurs valeurs (nombres) dans un tableau. Malheureusement, je suis confus quant à la façon de filtrer les champs de formulaire affichés qui sont NULL. J'ai essayé de faire une boucle dans les champs et d'incrémenter le nombre après df mais sans succès.Comment faire une boucle dans les entrées de formulaire dynamique et les insérer dans un tableau

Toute aide serait grandement appréciée.

Un grand merci,

Adam

Répondre

5

Notez que vous pouvez aussi donner vos champs de formulaire noms indexés:

<input type="text" name="df[1]" /> 
<input type="text" name="df[2]" /> 

Ils seront alors disponibles dans un array, par exemple (selon votre méthode de soumission):

foreach ($_GET['df'] as $num => $val) { 
    … 
} 

Si l'index est omis des noms de formulaire, PHP les indexera automatiquement, tout comme quand assigning to an array.

<input name="df[]" /> 
<input name="df[]" /> 

Vous pouvez créer des tableaux multidimensionnels de cette façon:

<label>Foo</label><input name="df[foo][]" /> <!-- $_REQUEST['df']['foo'][0] --> 
<label>Bar</label><input name="df[bar][]" /> <!-- $_REQUEST['df']['bar'][0] --> 

<label>Foo</label><input name="df[foo][]" /> <!-- $_REQUEST['df']['foo'][1] --> 
<label>Bar</label><input name="df[bar][]" /> <!-- $_REQUEST['df']['bar'][1] --> 

Notez que chaque [] Fera incrémente l'index généré. Cela signifie qu'il n'est pas très utile pour les tableaux multidimensionnels, sauf pour le dernier index. Par exemple, supposons que vous vouliez que chaque $_REQUEST['df'] contienne un array('foo'=>..., 'bar'=>...). Ce qui suit ne fonctionnerait pas:

<label>Foo</label><input name="df[][foo]" /> <!-- $_REQUEST['df'][0]['foo'] --> 
<label>Bar</label><input name="df[][bar]" /> <!-- $_REQUEST['df'][1]['bar'] --> 

Au lieu de cela, vous aurez besoin:

<label>Foo</label><input name="df[0][foo]" /> 
<label>Bar</label><input name="df[0][bar]" /> 
+0

Merci pour votre aide. Comment pourrais-je supprimer les valeurs NULL du tableau? Merci beaucoup, Adam –

+0

Il n'y aura pas de valeurs nulles dans le tableau, soit parce que la valeur est une chaîne (probablement vide) ou pas du tout dans le tableau. Vous pouvez vérifier si la chaîne est vide dans votre boucle foreach, par exemple en testant "if (empty ($ val)) ..." ou "if (trim ($ val)) ...". Ce dernier ignore les champs de texte qui ne contiennent que des espaces. – scy

+0

Encore une fois, merci pour votre aide. Utiliser le terme NULL était incorrect de ma part et je voulais dire vide comme vous l'avez fait remarquer. Mon problème est de savoir comment éliminer la position du tableau qui a une valeur vide. Par exemple, turing df [1,7,3,, 4] en df [1,7,3,4]. C'est ce que je suis vraiment en train de lutter, car j'ai besoin d'un tableau "propre" pour les calculs plus tard. Merci beaucoup, Adam –

Questions connexes