既知の数の列(例:上部直径、下部直径、生地、色、数量)が含まれるphpフォームがありますが、ユーザーは必要に応じて行を追加できるため、行数は不明です。
各フィールド(列)を取得し、独自の配列に配置する方法を発見しました。
<input name="topdiameter['+current+']" type="text" id="topdiameter'+current+'" size="5" />
<input name="bottomdiameter['+current+']" type="text" id="bottomdiameter'+current+'" size="5" />
だから私がHTMLで終わるのは:
<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.
私が今やりたいのは、すべての行と列を多次元配列に入れ、その内容をクライアントにメールで送信することです(できれば、適切にフォーマットされたテーブルで)。これらすべての入力と選択をNice配列に結合する方法を本当に理解することはできませんでした。
この時点で、複数の1D配列を使用することを試みる必要がありますが、単一の2D配列を使用する方が複数の1D配列を使用するよりも良い方法であると考えています。
送信すると、次のように作成されたかのように配列が取得されます。
$_POST['topdiameter'] = array( 'first value', 'second value' );
$_POST['bottomdiameter'] = array( 'first value', 'second value' );
ただし、代わりにフォーム名をこの形式に変更することをお勧めします。
name="diameters[0][top]"
name="diameters[0][bottom]"
name="diameters[1][top]"
name="diameters[1][bottom]"
...
その形式を使用すると、値をループ処理するのがはるかに簡単になります。
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>';
}
このような名前のすべてのパラメーターを送信できます。
params[0][topdiameter]
params[0][bottomdiameter]
params[1][topdiameter]
params[1][bottomdiameter]
その後、このようなことをします:
foreach ($_REQUEST['params'] as $item) {
echo $item['topdiameter'];
echo $item['bottomdiameter'];
}
配列と単一のGETまたは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;
}
例:
$curr_topdiameter = subVal("topdiameter","",TRUE)[3];
$user_name = subVal("user_name","");