it-swarm.com.de

Senden eines mehrdimensionalen Arrays über POST mit php

Ich habe ein PHP-Formular mit einer bekannten Anzahl von Spalten (z. B. oberer Durchmesser, unterer Durchmesser, Stoff, Farbe, Menge), aber eine unbekannte Anzahl von Zeilen, da Benutzer Zeilen nach Bedarf hinzufügen können. 

Ich habe herausgefunden, wie man die einzelnen Felder (Spalten) in ein eigenes Feld einfügt.

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

Was ich am Ende im HTML bekomme, ist: 

<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.

Was ich jetzt tun möchte, ist, alle Zeilen und Spalten in ein mehrdimensionales Array zu bringen und den Inhalt per E-Mail an den Client zu senden (vorzugsweise in einer schön formatierten Tabelle). Ich konnte nicht wirklich verstehen, wie ich all diese Eingänge und Auswahlmöglichkeiten in einem Nice-Array kombinieren kann.

An diesem Punkt muss ich versuchen, mehrere 1D-Arrays zu verwenden, obwohl ich die Idee habe, dass die Verwendung eines einzelnen 2D-Arrays eine bessere Praxis ist als die Verwendung mehrerer 1D-Arrays.

92
Fireflight

Beim Senden erhalten Sie ein Array, das so erstellt wurde:

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

Ich würde jedoch vorschlagen, stattdessen Ihre Formelnamen in dieses Format zu ändern:

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

Bei Verwendung dieses Formats ist es viel einfacher, die Werte zu durchlaufen.

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

sie können alle Parameter mit einer solchen Benennung übergeben:

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

dann machst du später so etwas:

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

Ich habe eine Funktion erstellt, die sowohl Arrays als auch einzelne GET- oder POST - Werte behandelt

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;

}

Beispiele:

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