2011-02-02 8 views
1

私はデータベースから保持されるオンラインポーリングを最初から作成しています。私は誰かが新しい投票を作ることができるようにシステムをセットアップすることに取り組んでいます。フィールドの正確な数を知らずにPOSTデータを取得します

私は、ユーザーが質問と回答(いくつかの答えがあるかもしれません)で、単純なHTMLフォームに必要事項を記入持つことになります。ユーザーは、各質問に対して複数の質問と複数の回答を追加することができます。

質問と回答の合計数は、ユーザによって決定されるように、私はこれに対応するためにいくつかの巧妙なPHPを作成する必要がある - があるが、多くの。

質問の静的な数を扱う場合、それは簡単です。しかし、POSTデータを個々のPHP変数に変換して処理できるようにするのは難しいです。

私は、誰もが任意のアイデアを持って、foreachループを使用して考えていましたか?

ごめんなさい。誰かが明確に何かを必要とするなら、私はそうすることを喜んでします。私の問題は、アレイのどの要素に何が含まれているのか正確にわからないときにPOST値を処理する方法について頭を悩ますことができないことです。物事が質問と回答のセット数と静的だったら、私は$_POST[0]はQuestion1だった知っているだろう、など

ありがとうございました! =)

答えて

1

questions[]のような入力フィールドに名前をつけると、questions[]=Q1&questions[]=Q2(クエリ文字列か投稿本体のいずれか)のようなパラメータで渡されます。 PHPはそれらを簡単に反復処理できる配列$_POST['questions']に変換します。複数のフィールドを1つの配列にまとめる必要がある場合は、キーを明示的に指定することもできます。

あなたが巣データに必要がある場合は、この中に美しさが来るので、「質問1は」質問文字列、nは答え、多分設定オプションがあります。

<input type="text" name="questions[0]"> 
<input type="text" name="questions[0][answers][]"> 
<input type="text" name="questions[0][answers][]"> 
<input type="text" name="questions[0][answers][]"> 
<input type="text" name="questions[0][answers][]"> 
<input type="text" name="questions[0][option][foo]"> 

... ...

[questions] => Array 
    (
     [0] => Array 
      (
       [answers] => Array 
        (
         [0] => answer1 
         [1] => answer2 
         [2] => answer3 
         [3] => answer4 
        ) 

       [option] => Array 
        (
         [foo] => bar 
        ) 

      ) 

    ) 
に変換
+0

あなたとmeagarによって実証されたように、私はこのアプローチが好きです。 PHPで質問配列にアクセスするにはどうすればよいですか? – James

+0

"PHPはそれらを' $ _POST ['questions'] 'の配列に変換します。 :) – coreyward

+0

私はここに示すように多次元配列アプローチを使用しているので、解答としてマークしました。 meagarと他の誰もが返信してくれてありがとう。私は理解できる、私のために働く何かを作るために、みんなの投稿を使用しました! - 素晴らしいサイト、素晴らしいコミュニティ!再度、感謝します! – James

1

foreachが動作します。

foreach($_POST as $name => $item) 

$ nameには値の名前が含まれており、その値によって識別できます。 'question1'という名前のフィールドには 'question1'が含まれます。 :)

+0

14分でninja'dを得ました... upvoting y私たちの答えと私の削除 – Serge

2

$_POST は常に配列のインデックスにフォーム要素のマッピングの名前と、連想配列されなければなりません。フォームフィールド0の名前を特に指定していない限り、$_POST[0]にアクセスする必要はありません。代わりに、要素が<input name="field1" />の場合、提出された値は$_POST['field1']になります。

あなたは自分の名前に配列のインデックスを付加することにより、配列の値として入ってくるフォーム要素を解釈するためにPHPを強制することができますに注意してください:

<input name="question[]" type="text" /> 
<input name="question[]" type="text" /> 

あなたに戻って投稿すると、$_POST['questions']は全ての配列が含まれていますquestionフィールド。

あなたは、動的にユーザーが、複数の質問を追加するだけで適切に名前を付けるようにしてくださいとPHPはあなたのためのアレイを構築する処理することができるようにあなたのページにフォーム要素を追加している場合。

あなたは似た何かの着信後のデータをループすることができます:

foreach ($_POST['questions'] as $question) { 
    // sanitize/save your user's question 
} 
+0

あなたはまだ質問配列を歩かなければなりません。これは基本的に同じテクニックです。しかし、これが可能であることを知ってうれしいです。時には便利かもしれません。 – GolezTrol

1

[]で終わる名前を持つ複数の入力フィールド、すなわちを作成します。

ans1: <input type=text name='ans[]'> 
ans2: <input type=text name='ans[]'> 
name: <input name='name'> 

そして、すべての値でしょう$ _POST配列の内部に配列として表示されます。:

array(2) { 
    ["ans"]=> 
    array(2) { 
    [0]=> 
    string(3) "LOL" 
    [1]=> 
    string(3) "WTF" 
    } 
    ["name"]=> 
    string(4) "John" 
} 
+0

あなたの '' の属性の値を引用する必要があります。 'TYPE = "text" の' 'ないタイプは= text' – meagar

+0

@meagar:両方の移行HTML4とHTML5で、それは必要はありません。 – mateusza

+1

ああ。私はあなたのdoctype宣言を見逃しました:p – meagar

関連する問題