表单将数据发送到 php 具有多个同名输入

Form send data to php with multiple inputs with the same name

我正在尝试制作一个我或用户可以插入数据的表单。有些部分来自数据库,例如:作品名称和作品价格。在输入字段中可以插入工作量。在每个输入行中都有复选框,如果复选框被选中,该行将在 php.

中看到
<table class="table">

        <thead>
            <tr>
                <th scope="col">*</th>
                <th scope="col">Work name</th>
                <th scope="col">Quantity</th>
                <th scope="col">Price for unit</th>
                <th scope="col">Total price</th>
            </tr>
        </thead>

        <form method="POST" action="process/pdf.process.php">
        <tbody>
            <?php
            $works = ORM::for_table('work')->find_many();
            foreach($works as $work){
            ?>
                <tr id="<?php echo $work->id; ?>">
                    <td><input type="checkbox" name="useit[]" value="<?php echo $work->id; ?>"/></td>
                    <td><?php echo $work->name; ?></td>
                    <td><input type="text" placeholder="" class="amount"/> <?php echo $work->unit; ?></td>
                    <td class="work_price" data="<?php echo $work->price; ?>"><?php echo $work->price.'€/'.$work->unit; ?></td>
                    <td class="total_price">0€</td>

                    <input type="" name="work_id[]" value="<?php echo $work->id; ?>" />
                    <input type="hidden" name="work_name[]" value="<?php echo $work->name; ?>" />
                    <input type="hidden" name="amount[]" class="<?php echo $work->id; ?>_copy_amount" value="" />
                    <input type="hidden" name="unit[]" value="<?php echo $work->unit; ?>" />
                    <input type="hidden" name="unit_price[]" value="<?php echo $work->price; ?>€" />
                    <input type="hidden" name="unit_total[]" class="<?php echo $work->id; ?>_copy_total" value="" />

                </tr>

            <?php
            }
            ?>
        </tbody>
            <input type="submit" name="do_pdf" value="Pga jkāuztaisa ar jquery" />
        </form>

    </table>

现在,有 php,但我如何才能在 while 循环中只显示选中的行?

<?php

 $data = array();
 $work_id = array();
 $work_names = $_POST['work_name'];
 $amounts = $_POST['amount'];
 $units = $_POST['unit'];
 $units_prices = $_POST['unit_price'];
 $units_total = $_POST['unit_total'];


 if(isset($_POST['useit'])){
  $work_id = $_POST['useit'];


 }

 $data = array($work_id, $work_names, $amounts, $units, $units_prices, $units_total);

 echo '<pre>';
 echo htmlspecialchars(print_r($data, true));
 echo '</pre>';

 ?>

如何做到这一点有不同的可能性。一个建议(我只限于相关的部分)

表单(注意我给了 work_name id 作为索引,use_it 没有(但它可能有)

<td><input type="checkbox" name="useit[]" value="<?php echo $work->id; ?>"/></td>
<input type="hidden" name="work_name[<?php echo $work->id?>]" value="<?php echo $work->name; ?>" />

表单仅提交数组中选中的复选框值,其他均被省略。因此我们可以像这样遍历选中的复选框值

foreach($_POST['useit'] as $work_id){
    $work_name = $work_names[$work_id]; 
    //do something with the checked rows only (all others are not looped over)
}

这是唯一可能的,因为给定的 id 作为 work_name[<?php echo $work->id?>].

形式的数组键

关于更好(和更安全)代码的一般旁注:请注意,您的数据可能会被用户修改,并返回错误的数据(或更糟)。因此,请确保清理您的输入,或者在这种情况下可能更好,只提交有问题的 ID 和新数据,然后直接从您的数据库中获取其余部分。所以你可以确定隐藏数据没有在客户端被修改和发回错误。