PHP使用循环获取表数据行输入值

时间:2018-04-26 05:14:29

标签: php html

我在从table获取正确值时遇到问题。

我遇到的问题:

  • 当我选择第二个checkbox并输入quantity时,它是未定义的偏移:0

checkbox的价值是正确的。

我期待的是当我选择第二个或其他checkbox(排除第一个checkbox)时,我应该得到该输入字段的值。

HTML

<?php foreach($results as $row) { ?>
<tr>
    <td><input type="checkbox" name="products[]" value="<?php echo $row->items_id; ?>"></td>
    <td><?php echo $row->item_name; ?></td>
    <td><input type="number" name="quantity[]" class="form-control"></td>
</tr>
<?php } ?>
<input type="submit" name="process" class="btn btn-primary" value="Process">

PHP

$quantity = $_POST['quantity'];
$products = $_POST['products'];
$count_selected = count($products);

for($i=0; $i< $count_selected; $i++){
    var_dump($quantity[$i]); exit;
}

sample image of the view

2 个答案:

答案 0 :(得分:1)

复选框的问题在于未经检查的复选框没有提交任何值,因此您的$_POST['products']$_POST['quantity']数组可能会有不同的长度。

我使用hidden input与特定数组索引合并。

例如

<?php foreach($results as $row) : ?>
<tr>
    <td>
        <input type="hidden" name="products[<?= $row->items_id ?>]" value="0">
        <input type="checkbox" name="products[<?= $row->items_id ?>]" value="1">
    </td>
    <td><?= htmlspecialchars($row->item_name) ?></td>
    <td><input type="number" name="quantity[<?= $row->items_id ?>]" class="form-control"></td>
</tr>
<?php endforeach ?>

然后数组将具有相同的索引,您可以使用foreach

进行迭代
foreach ($_POST['products'] as $itemId => $checked) {
    // $checked represents the state of the checkbox
    // you can access quantity via $_POST['quantity'][$itemId]
}

您甚至可以通过

创建一个很好的过滤数量
$selections = $_POST['products'];
$quantities = array_filter($_POST['quantity', function($itemId) use ($selections) {
    return $selections[$itemId];
}, ARRAY_FILTER_USE_KEY);

答案 1 :(得分:-1)

首先,定义数组变量。     $ products = array();     $ quantity = array(); 其他明智的事情似乎很好。