MultiDimentional массив в $ _POST, контрольная таблица

106
9

Я пытаюсь сделать форму, которая издевается над списком. Позволь мне объяснить:

У меня есть несколько банок. Внутри каждой банки есть несколько желеобразных бобов. Каждый боб отличается. У меня может быть любое количество банок и бобов. Я хочу создать форму так:

    public static function getForm($oData) {
<form action="<?= esc_url($_SERVER["REQUEST_URI"]); ?>" method="post" id="CountForm">
<fieldset>

<?php foreach ($aJars as $oJar) {
$aJellyBeans = JellyBeans::getJellyBeansBase($oJar->Jar_ID); ?>

<p><?= $oJar->JarName; ?></p>

<?php foreach ($aJellyBeans as $oJellyBean) { ?>

<input type="checkbox" name="?" id="CountedFor" value="1">

<input type="hidden" name="?" id="AccountedFor_ID" value="<?= $oData->AccountedFor_ID; ?>">

<input type="hidden" name="?" id="Jar_ID" value="<?= (($oData->Jar_ID) ? $oData->Jar_ID : $oJellyBean->Jar_ID); ?>">

<input type="hidden" name="?" id="JellyBean_ID" value="<?= (($oData->JellyBean_ID) ? $oData->JellyBean_ID : $oJellyBean->JellyBean_ID); ?>">

<label for="Notes">Notes</label>
<textarea name="?" id="Notes" cols="30" rows="5" wrap="soft" placeholder=" "><?= $oData->Notes; ?></textarea>
<?php } ?>

<?php } ?>

<input type="submit" name="Submit" id="Submit" value="<?= (($oData->AccountedFor_ID) ? 'Update' : 'Add' ) ?>">

</fieldset>
</form> <?php
}

Когда $ _POST отправляется, он переходит к функции класса, которая обрабатывает запись в БД. Функция будет искать поле имени и использовать это имя столбца.

    protected function CreateAccountedFor($aData) {
//Process provided data
foreach ($aData as $sKey => $eValue) {
$aSQL[$sKey] = $eValue;
}
}

Я хочу создать список каждого компонента jelly, отсортированный по jar, и иметь возможность проверять каждый из них как "учтенный" и отправляться за один раз.

Я знаю, что поле имени - это то, на что смотрит $ _POST, но есть ли способ манипулировать этим свойством, чтобы сформировать массив:

    ["AccountedFor"]=>
[0]=>
["AccountedFor_ID"]=> "..."
["Jar_ID"]=> "..."
["JellyBean_ID"]=> "..."
[1]=>
["AccountedFor_ID"]=> "..."
["Jar_ID"]=> "..."
["JellyBean_ID"]=> "..."

спросил(а) 2021-01-19T16:18:26+03:00 2 месяца, 3 недели назад
1
Решение
62

Вы можете назначить значения массива во входном имени, использовать цикл for, чтобы подсчитать, в какую итерацию вы сейчас находитесь.

Если вы генерируете несколько из этих входов, у вас будет неверный код, идентификатор для каждого входа будет повторяться, возможно, вместо этого использовать классы или полностью их удалить.

<?php for ($i = 0; $i < count($aJellyBeans); $i++) { ?>

<input type="checkbox" name="AccountedFor[$i][CountedFor]" id="CountedFor" value="1">

<input type="hidden" name="AccountedFor[$i][AccountedFor_ID]" id="AccountedFor_ID" value="<?= $oData->AccountedFor_ID; ?>">

<input type="hidden" name="AccountedFor[$i][Jar_ID]" id="Jar_ID" value="<?= (($oData->Jar_ID) ? $oData->Jar_ID : $aJellyBeans[$i]->Jar_ID); ?>">

<input type="hidden" name="AccountedFor[$i][JellyBean_ID]" id="JellyBean_ID" value="<?= (($oData->JellyBean_ID) ? $oData->JellyBean_ID : $aJellyBeans[$i]->JellyBean_ID); ?>">

<label for="Notes">Notes</label>
<textarea name="?" id="Notes" cols="30" rows="5" wrap="soft" placeholder=" "><?= $oData->Notes; ?></textarea>
<?php } ?>

ответил(а) 2021-01-19T16:18:26+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема