1

次のようなユーザー入力があります。

<form action="special.php" method="post">
    <input name="first1"> <input name="last1"> <input name="age1">
    <input name="first2"> <input name="last2"> <input name="age2">
    <input name="first3"> <input name="last3"> <input name="age3">
    <input name="first4"> <input name="last4"> <input name="age4">
    <input name="first5"> <input name="last5"> <input name="age5">
    <input name="first6"> <input name="last6"> <input name="age6">
    ...

    N
</form>

フォームへのユーザー入力の量は、ユーザーが決定します。つまり、ユーザーは上記のコードに5、10、20行を追加して、必要に応じて新しい入力要素(上記のパターンに従う)を作成できます。

私の質問は、フォームが送信されたら、すべてのSET POST変数を繰り返して印刷する簡単な方法は何ですか?

何かのようなもの:

for($i=0; $i < $numPostVars; $i++){
   if(isset($_POST['first".$i."'])){
       //echo all first names post variables that are set
    }
}

// do the same from last names & age in separate loops
4

2 に答える 2

4

秘訣は、変数に少し異なる名前を付け、それらを配列として解凍するPHPの機能を利用することだと思います。構文を使用してください:first[1]。次に、PHPでは、$ _ POST['first']['1']がそれを見つける場所です。次に、すべての「最初の」入力を次のように繰り返すことができます。

foreach($_POST['first'] as $first_input) {
  // ... 
}

また、ユーザーが送信したときにフィールドが空の場合、ブラウザーはフィールドを送信しない可能性があることに注意してください。

入力はHTMLでどのように表示されるかを次に示します。

<input name="first[1]"> <input name="last[1]"> <input name="age[1]">

ユーザー@DaveRandomが指摘しているように、より階層的な構造も検討してください(データベースのような「行」を考えてください)。

<input name="people[1][first]"> <input name="people[1][last]"> <input name="people[1][age]">
于 2012-12-12T23:44:03.520 に答える
2

入力は、PHPで使用されているものと非常によく似た構文の配列として扱うことができます。

<input name="name[1]" value="value 1">
<input name="name[2]" value="value 2">

これにより、$_POST['name']次のような結果になります。

array(
  1 => "value 1",
  2 => "value 2"
);

この原理を拡張して、多次元の連想配列を組み込むことができます。したがって、入力に次のような名前を付ける場合は、次のようになります。

<input name="rows[1][first]"> <input name="rows[1][last]"> <input name="rows[1][age]">
<input name="rows[2][first]"> <input name="rows[2][last]"> <input name="rows[2][age]">

...コンストラクトを$_POST['rows']使用して簡単に繰り返すことができます。foreachデータ構造は、一連のデータベース結果と非常によく似ています。

foreach ($_POST['rows'] as $row) {
  // do stuff with $row['first'], $row['last'] and $row['age'] here
}

注意すべき点がいくつかあります。

  • PHPとは異なり、HTMLの連想配列キーは引用符を必要とせず、引用符を使用すると、予期しない結果が生じる可能性があります。それは機能しますが、あなたが思うかもしれない方法ではありません。ただし、PHPでは引用符を使用する必要があります。
  • 私の知る限り、この構文はW3C標準ではありません。ただし、PHPは常に期待どおりに処理します。
于 2012-12-13T00:10:49.500 に答える