У меня есть форма с несколькими строками флажков, каждая с определенным идентификатором, которые отображаются с использованием цикла foreach
.
Как вы $_POST
данные $_POST
от чего-то подобного? Я думаю, что это как-то $_POST[][]
, как sub-array, но я не могу понять, как его настроить:
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 ##
это несколько связано с вопросом, на который я ответил раньше: 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' ), );
Дайте тег другого 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']
Предполагая, что у вас это уже есть в <form>
, вам нужно указать каждый вход id. Затем в результирующем скрипте PHP используйте $_POST['whatever_the_name_is']
(вы также можете использовать $_REQUEST
или $_GET
зависимости от действия вашей формы).
Не ответ, но 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>
Изменить:
<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
рассматривается как элемент array
в PHP и поэтому может быть зациклен. Вы можете также вложить массивы таким образом, поэтому, если вы хотите иметь несколько держателей акций в одной форме, сделайте что-то вроде этого:
<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 -->
$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])) {}
Actualy id
не должен работать. Как сказал Джозеф, элементы формы отправляются с их именами в виде ключей. Таким образом, правильный тег должен быть:
<input type="checkbox" name="some_name" ... />
Когда вы отправляете форму, вы можете получить данные как $_POST['some_name']
Если вам нравится, вы можете поместить их в массив name="somearr[someotherarr[some_name]]]"
тогда контент будет доступен в $_POST['somearr']['someotherar']['some_name']
Надеюсь, это поможет.