表单将数据发送到 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 和新数据,然后直接从您的数据库中获取其余部分。所以你可以确定隐藏数据没有在客户端被修改和发回错误。
我正在尝试制作一个我或用户可以插入数据的表单。有些部分来自数据库,例如:作品名称和作品价格。在输入字段中可以插入工作量。在每个输入行中都有复选框,如果复选框被选中,该行将在 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 和新数据,然后直接从您的数据库中获取其余部分。所以你可以确定隐藏数据没有在客户端被修改和发回错误。