109 votes

Envoi d'un tableau multidimensionnel via POST avec php

J'ai un formulaire php qui a connu nombre de colonnes (ex. top diamètre, fond de diamètre, en tissu, couleur, quantité), mais a un nombre inconnu de lignes, que les utilisateurs peuvent ajouter des lignes, comme ils en ont besoin.

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

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

Donc j'arrive à la fin avec 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 e-mail le contenu de ce que le client (de préférence dans un bien mis en forme de la table). Je n'ai pas été en mesure de vraiment comprendre comment combiner toutes ces entrées et choisit dans un joli tableau.

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

(edit: petite faute de frappe dans le code)

157voto

DisgruntledGoat Points 21368

Lors de la soumission, vous obtiendrez un tableau comme s'il avait été créé comme ceci:

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

Cependant, je vous suggèrerais de remplacer les noms de vos formulaires par 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 parcourir 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>';
}
 

20voto

Laimoncijus Points 3453

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

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

Ensuite, vous faites quelque chose comme ça:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X