获取具有相同名称的所有复选框(选中或未选中)的值

时间:2018-06-29 06:45:08

标签: php html checkbox

我正在尝试构建一个列出所有可用项目的表单,用户可以选择一些项目并输入值以在复选框旁边输入元素。

每个复选框旁边都有一个输入文本框。

<?php
    foreach ($items as $item):
        $itemID = $item['item_id'];
        $itemTitle = $item['item'];
?>
    <tr>
        <td>
            <li> 
                <div class="checkbox">
                    <input type="hidden" name="selected_items[]" value="0">
                    <input type='checkbox' name='selected_items[]' value='<?php echo $itemID; ?>'/> 
                <?php echo ucfirst($itemTitle); ?>

                </div>
            </li>
        </td>
        <td><input type='number' name='quantities[]' value="0.00" step="0.01" /> </td>
    </tr>
<?php endforeach; ?>

这是表格的外观:

Available Items    |  Qty
--------------------------
[] Bread           |  [input]
[] Coffee          |  [input]
[] Egg             |  [input]
[] Cake            |  [input]

我希望selected_items[]quantities这两个数组的长度与它们的长度相同,以便可以将它们组合在一起。

如果未选中,则值应保留为0。

因此,combined_array应该如下所示:

0=>0
Coffee=>44
Egg=>56
0=>0

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

在不做更多详细说明的情况下,本示例假设您要在$_POST数据中设置“ combined_array” ...

首先,我将删除“隐藏的” selected_items输入。由于这些是输入数组,因此索引键将无法对齐。

selected_itemsquantities的索引键设置为特定值并添加新的输入item,应有助于像下面这样关联$_POST数据:

<?php foreach ($items as $item):
    $itemID = $item['item_id'];
    $itemTitle = $item['item'];
?>
    <tr>
        <td>
            <li> 
                <div class="checkbox">
                    <input type='checkbox' name='selected_items[<?php echo $itemID; ?>]' value='<?php echo $itemTitle; ?>'/>  <!-- Give your input $itemID key -->
                    <?php echo ucfirst($itemTitle); ?>
                </div>
            </li>
        </td>
        <td><input type='number' name='quantities[<?php echo $itemID; ?>]' value="0.00" step="0.01" /> </td>  <!-- Give your input $itemID key -->
    </tr>
    <input type='hidden' name='available_items[<?php echo $itemID; ?>]' value="<?php echo $itemTitle; ?>" />   <!-- Give your input $itemID value -->
<?php endforeach; ?>


<?php
if(!empty($_POST)){
    foreach($_POST['available_items'] as $itemID=>$itemTitle){ // <-- Loop through your "available_items"
        $itemTitle = (!empty($_POST['selected_items'][$itemID])?$itemTitle:0); // <-- this changes the itemTitle based on whether !empty($_POST['selected_items'][$itemID]) 
        $Qty = (!empty($_POST['selected_items'][$itemID])&&!empty($_POST['quantities'][$itemID])?$_POST['quantities'][$itemID]:0); // <-- Checks for quantities 
        $CombinedArray[$itemTitle] = $Qty;
    }
    print_r($CombinedArray);
}
?>

您的结果将是这样:

"0"=>0
"Coffee"=>44
"Egg"=>56

这是因为您有可能在$CombinedArray中创建重复的密钥。

删除此行$itemTitle = (!empty($_POST['selected_items'][$itemID])?$itemTitle:0);

<?php
if(!empty($_POST)){
    foreach($_POST['available_items'] as $itemID=>$itemTitle){ // <-- Loop through your "available_items"
        $Qty = (!empty($_POST['selected_items'][$itemID])&&!empty($_POST['quantities'][$itemID])?$_POST['quantities'][$itemID]:0); // <-- Checks for quantities 
        $CombinedArray[$itemTitle] = $Qty;
    }
    print_r($CombinedArray);
}
?>

会导致类似的结果

"Bread"=>0
"Coffee"=>44
"Egg"=>56
"Cake"=>0