0

私は foreach を使用していますが、問題が発生しています。通常ランダムな値を持つ2つのforループがあります(ここでは修正値を入れます)。foreach を使用してフォームから値を取得したい

よりよく説明すると、フォームは次のようになります。

Number 1 : T1 : ----
Number 2 : T2 : ---- and -----
So the user enter for example 2, 3, 4
So
Number 1 : T1 : 2
Number 2 : T2 : 3 and 4

得られる結果は 3 と 4 だけです。値 2 は保存されません。問題は、 foreach のループが再び開始されるため、前に入力した値が削除されるためだと思います。しかし、私はそれを行う方法がわかりません。

これが私のコードです:

<?php
session_start();
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"> 
<?php 
for ($i = 1; $i <= 2; $i++) {
    echo "Numero ";
    echo $i;
    for ($j = 1; $j <= 3; $j++) {
        echo $j;
        echo "<input type='text' name='number3[$j]' id='number3{$j}' />";
    }
}   
?>
<input type="submit" name="submitbutton" value="Confirm!">
</form>

<?php
if (isset($_POST['submitbutton'])) {

    for ($i = 1; $i <= 2; $i++) {
    echo "Numero ";
    echo $i;
    for ($j = 1; $j <= 3; $j++) {
                echo "Lettre ";
                echo $j;
        foreach ($_POST['number3'] as $key => $value) {
            $_SESSION["number3_{$key}"] = $value;
            echo 'The value of $_SESSION['."'".$key."'".'] is '."'".$value."'".' <br />';
        }   

}   
}
    }
?>
4

2 に答える 2

0

私の知る限り、PHP では多次元変数を投稿できます。あなたのコードはどういうわけかこのようになります (私は試していないので、「単なる」スニペットです)。

フォームの生成 (通常は動的):

$numbers=2;
//note: $numbers is normally random (here 2 number records are generated)
for ($i = 1; $i <= $numbers; $i++) {
    echo "Number "+ $i + " <br/>";

    $fields=3;
    //note: $fields is normally random (here three fields per number are generated)
    for ($j = 1; $j <= $fields; $j++) {
        //this names the field by number[number_counter][field_counter]
        echo "<input type='text' label="+ $j +" name='number["+ $i +"]["+ $j +"]' />";
    }
}

投稿されたフォーム変数の抽出:

if (isset($_POST['submitbutton'])) {

    $current_number=1;
    foreach ($_POST['number'] as $number)
    {
        echo "Number " + $current_number +":<br/>";
        $field_counter = 1;
        foreach ($number as $field)
        {
            echo " The value of field #"+ $field_counter +"is "
              + $number[$field_counter] +".<br/>";
        }
    }

}
于 2013-07-18T08:01:38.590 に答える
0

まず第一に、あなたが達成しようとしていることをよく理解していませんが、コードに問題があります。これは、スクリプトによって生成された html マークアップです。

<form action="/so.php" method="post"> 
Numero 1
1<input type='text' name='number3[1]' id='number31' />
2<input type='text' name='number3[2]' id='number32' />
3<input type='text' name='number3[3]' id='number33' />

Numero 2
1<input type='text' name='number3[1]' id='number31' />
2<input type='text' name='number3[2]' id='number32' />
3<input type='text' name='number3[3]' id='number33' />

<input type="submit" name="submitbutton" value="Confirm!">
</form>

ご覧のように、入力の 2 番目のセットは前のものをオーバーライドしますnumber3[1]

HTMLを次のようにするには、多次元配列を使用する必要があります

<input type='text' name='number3[1][1]' id='number31' />

そして、スクリプトの反復部分は次のようになります

if (isset($_POST['submitbutton'])) {
    foreach ($_POST['number3'] as $firstKey => $insideArray) {
    echo "Numero ";
    echo $firstKey;
        foreach ($insideArray as $secondKey => $value) {
            $sessionKey = $firstKey . '_' . $secondKey;
            echo "Lettre ";
            echo $secondKey;
            $_SESSION[$sessionKey] = $value;
            echo 'The value of $_SESSION['.$sessionKey.'] is '."'".$value."'".' <br />';
        }
    }
}
于 2013-07-18T07:55:05.367 に答える