web-dev-qa-db-fra.com

Envoi d'un tableau multidimensionnel via POST avec php

J'ai une forme php qui a un nombre connu de colonnes (ex. Diamètre du haut, diamètre du bas, tissu, couleur, quantité), mais un nombre inconnu de lignes, car les utilisateurs peuvent ajouter des lignes selon leurs besoins. 

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

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

Donc, ce que je trouve dans le HTML, c'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, c’est que toutes les lignes et les colonnes soient placées dans un tableau multidimensionnel et que leur contenu soit envoyé par courrier électronique au client (de préférence dans un tableau bien formaté). Je n'ai pas été capable de vraiment comprendre comment combiner toutes ces entrées et les sélectionner dans un tableau de Nice.

À ce stade, je vais devoir essayer d’utiliser plusieurs tableaux 1D, même si j’ai l’idée qu’il serait préférable d’utiliser un seul tableau 2D plutôt que d’utiliser plusieurs tableaux 1D.

92
Fireflight

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>';
}
137
DisgruntledGoat

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'];
}
16
Laimoncijus

J'ai créé une fonction qui gère les tableaux ainsi que les valeurs simples GET ou POST

function subVal($varName, $default=NULL,$isArray=FALSE ){ // $isArray toggles between (multi)array or single mode

    $retVal = "";
    $retArray = array();

    if($isArray) {
        if(isset($_POST[$varName])) {
            foreach ( $_POST[$varName] as $var ) {  // multidimensional POST array elements
                $retArray[]=$var;
            }
        }
        $retVal=$retArray;
    }

    elseif (isset($_POST[$varName]) )  {  // simple POST array element
        $retVal = $_POST[$varName];
    }

    else {
        if (isset($_GET[$varName]) ) {
            $retVal = $_GET[$varName];    // simple GET array element
        }
        else {
            $retVal = $default;
        }
    }

    return $retVal;

}

Exemples:

$curr_topdiameter = subVal("topdiameter","",TRUE)[3];
$user_name = subVal("user_name","");
0
Szél Lajos