【问题标题】:Form send data to php with multiple inputs with the same name表单将数据发送到具有相同名称的多个输入的 php
【发布时间】:2021-10-12 08:50:19
【问题描述】:

我正在尝试制作我或用户可以插入数据的表单。有些部分来自数据库,如:作品名称和作品价格。在输入字段中可以插入工作量。在每个输入行中都有复选框,如果选中了复选框,则该行将在 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>';

 ?>

【问题讨论】:

    标签: php html forms loops data-processing


    【解决方案1】:

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

    form(注意我给了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[&lt;?php echo $work-&gt;id?&gt;] 形式的数组键。

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

    【讨论】:

    • 谢谢!它将是安全的,但在客户端有输入,例如来自该金额的金额(m2),php 正在计算总价
    • 它能解决您的问题吗?
    • 是的!非常感谢!
    猜你喜欢
    • 2014-11-28
    • 2020-09-09
    • 2010-10-03
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2013-02-03
    相关资源
    最近更新 更多