Собрать $ _POST из нескольких строк флажков - PullRequest
2 голосов
/ 10 февраля 2012

У меня есть форма с несколькими рядами флажков, каждый с определенным идентификатором, которые отображаются с помощью цикла 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 ##

Ответы [ 7 ]

1 голос
/ 10 февраля 2012

это в некоторой степени связано с вопросом, на который я отвечал ранее: POST массив из формы HTML без 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(
    '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>

они должны заканчиваться как:

$_POST[] = array(
    'stakeholder1' => array(
        'partner'=> 'partner',
        'agreement'=> 'agreement',
        'train'=> 'train',
        'meet'=> 'meet'
    ),
    'stakeholder2' => array(
        'partner'=> 'partner',
        'agreement'=> 'agreement',
        'train'=> 'train',
        'meet'=> 'meet'
    ),
);
0 голосов
/ 10 февраля 2012
$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++;
}

Вы можете получить к ним доступ из $_POST, например,

if(isset($_POST[chkPartner][$yourIndex]))
{}
0 голосов
/ 10 февраля 2012

Не ответ, но да ... уменьшите часть дубликата 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 голосов
/ 10 февраля 2012

Изменение:

<input type ="checkbox" ...

Кому:

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

Или:

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

Доступ в PHP:

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

Или:

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

Это работает, потому что [] / [KEYNAME], добавленный в конец атрибута name, рассматривается в 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 голосов
/ 10 февраля 2012

На самом деле id не должно работать.Как сказал Джозеф, элементы формы отправляются с именами в качестве ключей.Таким образом, правильный тег должен быть:

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

Когда вы отправляете форму, вы можете получить такие данные, как $_POST['some_name']

Если хотите, вы можете поместить ихв массиве name="somearr[someotherarr[some_name]]]" содержимое будет доступно в $_POST['somearr']['someotherar']['some_name']

Надеюсь, это поможет.

0 голосов
/ 10 февраля 2012

Предполагая, что это уже есть в <form>, вам нужно присвоить каждому входу идентификатор. Затем в полученном сценарии PHP используйте $_POST['whatever_the_name_is'] (вы также можете использовать $_REQUEST или $_GET в зависимости от действия формы).

0 голосов
/ 10 февраля 2012

Дайте различные теги name каждому элементу checkbox (необходимо добавить name="WhatEverYouwant")

и вы сможете получить по:

$_POST['ID Of the Element']

Пример:

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

и получите по:

$_POST['new']
...