2010-03-12 4 views
90

J'ai un formulaire PHP qui a un nombre connu de colonnes (par exemple diamètre supérieur, diamètre inférieur, tissu, couleur, quantité), mais a un nombre inconnu de lignes, comme les utilisateurs peuvent ajouter des lignes comme ils en ont besoin.Soumission d'un tableau multidimensionnel via POST avec php

J'ai découvert comment prendre chacun des champs (colonnes) et les placer dans un tableau qui leur est propre.

<input name="topdiameter['+current+']" type="text" id="topdiameter'+current+'" size="5" /> 
<input name="bottomdiameter['+current+']" type="text" id="bottomdiameter'+current+'" size="5" /> 

Alors, que je me retrouve avec dans le code HTML est:

<tr> 
    <td><input name="topdiameter[0]" type="text" id="topdiameter0" size="5" /></td> 
    <td><input name="bottomdiameter[0]" type="text" id="bottomdiameter0" size="5" /></td> 
</tr> 
<tr> 
    <td><input name="topdiameter[1]" type="text" id="topdiameter1" size="5" /></td> 
    <td><input name="bottomdiameter[1]" type="text" id="bottomdiameter1" size="5" /></td> 
</tr> 

...and so on. 

Ce que je voudrais faire maintenant est de prendre toutes les lignes et les colonnes les mettre dans un tableau multidimensionnel et courriel le contenu cela au client (de préférence dans une table bien formatée). Je n'ai pas été capable de vraiment comprendre comment combiner toutes ces entrées et les sélectionner dans un bon tableau.

À ce stade, je vais devoir essayer d'utiliser plusieurs tableaux 1D, même si j'ai l'idée que l'utilisation d'un seul tableau 2D serait une meilleure pratique que l'utilisation de plusieurs tableaux 1D.

Répondre

131

Sur présentation, vous obtiendrez un tableau comme si créé comme ceci:

$_POST['topdiameter'] = array('first value', 'second value'); 
$_POST['bottomdiameter'] = array('first value', 'second value'); 

Cependant, je suggère de changer le nom de votre formulaire à ce format:

name="diameters[0][top]" 
name="diameters[0][bottom]" 
name="diameters[1][top]" 
name="diameters[1][bottom]" 
... 

En utilisant ce format, il est beaucoup plus facile de faire défiler les valeurs.

if (isset($_POST['diameters'])) 
{ 
    echo '<table>'; 
    foreach ($_POST['diameters'] as $diam) 
    { 
     // here you have access to $diam['top'] and $diam['bottom'] 
     echo '<tr>'; 
     echo ' <td>', $diam['top'], '</td>'; 
     echo ' <td>', $diam['bottom'], '</td>'; 
     echo '</tr>'; 
    } 
    echo '</table>'; 
} 
+0

Merci! J'avais commencé à m'en approcher, bien que la colonne et les lignes aient été retournées. – Fireflight

+0

Que diriez-vous si vous clonez des champs de texte et n'avez aucun contrôle sur l'ajout de noms tels que 'name =" diameters [0] [top] 'que puis-je faire si j'ai plus d'un nom? gauche et droite? @DisgruntledGoat –

15

vous pouvez soumettre tous les paramètres avec une telle dénomination:

params[0][topdiameter] 
params[0][bottomdiameter] 
params[1][topdiameter] 
params[1][bottomdiameter] 

puis plus tard vous faire quelque chose comme ceci:

foreach ($_REQUEST['params'] as $item) { 
    echo $item['topdiameter']; 
    echo $item['bottomdiameter']; 
} 
Questions connexes