2012-02-09 5 views
2

私はforeachループを使って表示されている複数のチェックボックスの行を持つフォームを持っています。

$_POSTの情報をどのように取得しますか?私はそれがサブ配列のように、この何とか$_POST[][]に似ていると思いますが、私はそれを設定する方法を見つけ出すカント:

foreach($stakholderArray as $currentEntry) { 
    print "<tr class='$bgcolor'>"; 
    print "<td class='left'>$currentEntry[org]</td>"; 

    if($currentEntry['dataFound']) { 
     //if data was found for current stakeholder, display it 
     print ($currentEntry['Partner']) ? '<td><input type ="checkbox" checked ="checked" /></td>' : '<td><input type ="checkbox" /></td>'; 
     print ($currentEntry['Agreement']) ? '<td><input type ="checkbox" checked ="checked" /></td>' : '<td><input type ="checkbox" /></td>'; 
     print ($currentEntry['Train']) ? '<td><input type ="checkbox" checked ="checked" /></td>' : '<td><input type ="checkbox" /></td>'; 
     print ($currentEntry['Meet']) ? '<td><input type ="checkbox" checked ="checked" /></td>' : '<td><input type ="checkbox" /></td>'; 
    } 
    else { //else...no stakeholder data, display empty columns 
     print "<td><input type ='checkbox'/></td><td><input type ='checkbox'/></td><td><input type ='checkbox'/></td><td><input type ='checkbox'/></td><td><input type ='checkbox'/></td>"; 
     print "</tr>"; 
    }## Heading ## 
+0

入力名は可変配列ですか? と同様に動作します。https://plus.google.com/u/0/photos/102528100285286815171/のスクリーンショットがあります。アルバム/ 5708634782606194689/5708634785261526130 – user718229

答えて

1

それは私が前に答えた質問に幾分関連します:POST an array from an HTML form without javascript

  • は彼らに
  • を提出したときに、彼らはポストの間の配列として終わる「アレイ」名
  • を与える形
  • でそれらを包みます

関連項目は次のようにする必要があります。name="item[collection name][collection name][]" - 簡単な場所のためにセットに関連する最初のインデックスとその中の空のインデックスの意味に注意してください設定すると、(単一の値ではなく)配列があります。ので、あなたのチェックボックス用:要求配列のこのような

<input type="checkbox" name="answers[set1][]" value="apple" /> //imagine checked 
<input type="checkbox" name="answers[set1][]" value="orange" /> //imagine checked 
<input type="checkbox" name="answers[set1][]" value="grape" /> 
<input type="checkbox" name="answers[set2][]" value="airplane" /> //imagine checked 
<input type="checkbox" name="answers[set2][]" value="train" /> //imagine checked 
<input type="checkbox" name="answers[set2][]" value="boat" /> 
<input type="checkbox" name="answers[solo]" value="boar" /> //single type value. note that there is no [] in the end 

終わりまでには、(のようなPOSTを言う):

$_POST[] = array(
    'stakeholder1' => array(
     'partner'=> 'partner', 
     'agreement'=> 'agreement', 
     'train'=> 'train', 
     'meet'=> 'meet' 
    ), 
    'stakeholder2' => array(
     'partner'=> 'partner', 
     'agreement'=> 'agreement', 
     'train'=> 'train', 
     'meet'=> 'meet' 
    ), 
); 
:彼らはように終わるはずです

$_POST[] = array(
    'answers' => array(
     'set1' => array('apple','orange'), //unchecked items won't be included 
     'set2' => array('airplane','train'), //unchecked items won't be included 
     'solo' => 'boar' 
    ) 
); 

<table> 
    <?php foreach($stakeholderArray as $stakeholder): ?> 
    <tr> 

    <?php 

     //declare so these exist regardless of data 
     $partner = ''; 
     $agreement = ''; 
     $train  = ''; 
     $meet  = ''; 

     //if we have data, mark the boxes accordingly 
     if($stakeholder['dataFound']){ 

      $checked = 'checked ="checked"'; 

      //mark as checked or blank 
      $partner = ($stakeholder['Partner']) ? $checked: ''; 
      $agreement = ($stakeholder['Agreement']) ? $checked: ''; 
      $train  = ($stakeholder['Train'])  ? $checked: ''; 
      $meet  = ($stakeholder['Meet'])  ? $checked: ''; 

     } 
    ?> 

     <td><input value='partner' name="stake[<?= $stakeholder ?>][partner]" type ="checkbox" <?= $partner ?> /></td> 
     <td><input value='agreement' name="stake[<?= $stakeholder ?>][agreement]" type ="checkbox" <?= $agreement ?> /></td> 
     <td><input value='train' name="stake[<?= $stakeholder ?>][train]" type ="checkbox" <?= $train ?> /></td> 
     <td><input value='meet' name="stake[<?= $stakeholder ?>][meet]" type ="checkbox" <?= $meet ?> /></td> 

    </tr> 
    <?php endforeach; ?> 
</table> 

+0

https://plus.google.com/ u/0/photos/102528100285286815171/albums/5708634782606194689/5708634785261526130 – user718229

+0

この更新された回答を確認してください。 – Joseph

+0

ありがとうございます。それはあなたが説明したのと同じように機能します。今私はちょうどそれを分割する方法を理解する必要があります。ありがとう – user718229

0

は、すべてのcheckbox要素(あなたがname="WhatEverYouwant"を追加する必要があります)

に異なる nameタグを付けます

、あなたはでそれを得ることができるようになります:

$_POST['ID Of the Element'] 

例:

'<td><input type ="checkbox" name="new" checked ="checked" /></td>' : '<td><input type ="checkbox" /></td>'; 

とによってそれを得る:あなたはすでに<form>に、あなたは、各入力にIDを与える必要があることを持っていると仮定すると

$_POST['new'] 
+0

'$ _POST'が' $ _POST'で取り上げたものではなく、 'name'属性 –

+0

ooppss ...それを編集しました。ありがとう:) –

0

。結果のPHPスクリプトでは、$_POST['whatever_the_name_is']を使用してください(フォームアクションに応じて$_REQUESTまたは$_GETを使用することもできます)。

-1

実際にはidは機能しません。 Josephが言ったように、フォーム要素は名前としてキーとして送られます。だから、適切なタグは次のようになります。

<input type="checkbox" name="some_name" ... />

フォームを送信すると、あなたはあなたが配列name="somearr[someotherarr[some_name]]]"でそれらを置くことができるような場合$_POST['some_name']

などのデータは、コンテンツが利用できるようになります得ることができますin $_POST['somearr']['someotherar']['some_name']

希望に役立ちます。

+0

'somearr [someotherarr [some_name]]]'あなたが思うことを成し遂げません。 – Josh

+0

はい、私は訂正します。単一レベルの配列は 'array [key]'でも動作します。 –

+0

マルチレベルでも機能します。 'somearr ['someotherarr'] ['some_name']'を代わりに使うと、当初期待したことが達成されます。 :) – Josh

0

変更:

<input type ="checkbox" ... 

へ:

<input type="checkbox" name="stakeholderarray[]" ... 

または:PHPで

<input type="checkbox" name="stakeholderarray[KEYNAME]" ... 

アクセス

foreach($_POST['stakeholderarray'] as $this_stakeholderarray){ 
... 
} 

または:name属性の末尾に追加

$_POST['stakeholderarray']['KEYNAME']; 

この動作[]/[KEYNAME]ためPHPでarray項目として見られ、したがって、ループスルーすることができます。あなたは、ネスト配列にもこの方法することができ、あなたは、単一のフォームに複数の利害関係者を持つようにしたいので、もし、このような何か:

<input type="checkbox" name="stakeholderarray[0][0]" ... <!-- Holder 0, item 0 --> 
<input type="checkbox" name="stakeholderarray[0][1]" ... <!-- Holder 0, item 1 --> 
<input type="checkbox" name="stakeholderarray[1][0]" ... <!-- Holder 1, item 0 --> 
<input type="checkbox" name="stakeholderarray[1][1]" ... <!-- Holder 1, item 1 --> 
+0

ここでの問題は、 '$ _POST [stakeholderarray] []'配列のどの要素がチェックボックスのどの行に属するのかわからないことです。チェックされたものだけが配列に格納されます。 –

+0

答えを少し変更しました - それぞれのアイテムにアイテムのリストではなく特定の値が割り当てられているとは思っていませんでした。 – 0b10011

0

ない答えを、しかしyeowch ... HTML重複の一部を削減あなたのロジックで:

print ($currentEntry['Partner'])  ? '<td><input type ="checkbox" checked ="checked" /></td>' : '<td><input type ="checkbox" /></td>'; 

は、あなたがそれからからそれらにアクセスすることができ

<td><input type ="checkbox"<?php ($currentEntry['Partner'] ? ' checked ="checked"' : '' ?> /></td> 
0
$i = 0; 
foreach($stakholderArray as $currentEntry) { 
    print "<tr class='$bgcolor'>"; 
    print "<td class='left'>$currentEntry[org]</td>"; 
    if($currentEntry['dataFound']) { //if data was found for current stakeholder, display it 
    print '<td><input type ="checkbox" name="chkPartner['.$i.']" '.(($currentEntry['Partner'])?'checked ="checked"':'').' /></td>'; 
    //print the rest like this 
    $i++; 
} 

する必要がありますように

if(isset($_POST[chkPartner][$yourIndex])) 
{} 
関連する問題