Intereting Posts
Автоматически импортировать изображение в форму из URL-адресов изображений в Интернете? PHP PDO Подготовить запросы Преобразовать хорошо известный текст (WKT) из MySQL в полигоны Google Maps с помощью PHP Кэш Symfony 2.7: команда clear проверяет каждое подключение к базе данных Отчеты о доставке и чтение квитанций в PHP-почте Как игнорировать ссылку http в строке и возвращать все остальное? Как обрабатывать пользовательские заголовки с запросом на предварительный рейс CORS? AJAX – CodeIgniter Как вы генерируете случайное число по 32-битовому пределу в PHP? PHP money_format файлы php выполняются параллельно или последовательно? Можете ли вы помочь мне понять функцию солевого хеширования? Список всех путей многомерного массива отображение результата запроса php mysql с отношением один к другому Как совместить символы с акцентом с PHP preg? Как создать токен состояния подделки анти-запроса. В регистрации google + на стороне сервера

Собрать $ _POST из нескольких блоков флажков

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

Related of "Собрать $ _POST из нескольких блоков флажков"

это несколько связано с вопросом, на который я ответил раньше: 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']

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