php - 带有复选框的乘以数据的表单
问题描述
我有 procuts 表(数据来自数据库)
<?php
while($row3 = mysqli_fetch_array($result2)) {
$prodname = $row3['name'];
$supid = $row3['supplier'];
$prodid = $row3['id'];
$prodprice = $row3['price'];
?>
<tr class='listtable'>
<td><input type="checkbox" name="prod[]" id="prod[<?php echo $prodid; ?>]" value="<?php echo $prodid; ?>"><label for="prod[<?php echo $prodid; ?>]"><?php echo $prodname; ?></label>
</td>
<td><label for="prod[<?php echo $prodid; ?>]"><?php echo $prodprice; ?> NIS
</td></label>
<td><input type="text" name="qty" placeholder="Qty" minlength="1" maxlength="3" size="2">
</td>
</tr>
<?php
}
?>
如果选中了复选框,我想发送每一行的数据...我可以发送复选框值(我发送了产品 ID 以从数据库中获取每个选中的数据,但我无法发送数量文本框值(我只想发送那些被选中的)
<?php
include "db.php";
if(isset($_POST['submit'])){
if(!empty($_POST['prod'])){
foreach($_POST['prod'] as $pid){
$proddetail = mysqli_query($con,"SELECT * FROM `products` WHERE id = $pid");
while($prod = mysqli_fetch_array($proddetail)) {
$pname = $prod['name'];
$pprice = $prod['price'];
echo $pname;
echo $pprice;
echo "<br>";
}
}
} else {
echo 'no items selected!';
}
}
?>
解决方案
您只需要数量文本框的唯一字段。尝试这个
<?php
while($row3 = mysqli_fetch_array($result2)) {
$prodname = $row3['name'];
$supid = $row3['supplier'];
$prodid = $row3['id'];
$prodprice = $row3['price'];
?>
<tr class='listtable'>
<td><input type="checkbox" name="prod[]" id="prod[<?php echo $prodid; ?>]" value="<?php echo $prodid; ?>"><label for="prod[<?php echo $prodid; ?>]"><?php echo $prodname; ?></label>
</td>
<td><label for="prod[<?php echo $prodid; ?>]"><?php echo $prodprice; ?> NIS
</td></label>
<td><input type="text" name="qty_<?php echo $prodid; ?>" placeholder="Qty" minlength="1" maxlength="3" size="2">
</td>
</tr>
<?php
}
接着
<?php
include "db.php";
if(isset($_POST['submit'])){
if(!empty($_POST['prod'])){
foreach($_POST['prod'] as $pid){
$proddetail = mysqli_query($con,"SELECT * FROM `products` WHERE id = $pid");
while($prod = mysqli_fetch_array($proddetail)) {
$pname = $prod['name'];
$pprice = $prod['price'];
$pqty = filter_input(INPUT_POST, 'qty_' . $pid, FILTER_SANITIZE_NUMBER_INT);
printf('Name: %1$s<br>', $pname);
printf('Price: %1$s<br>', $pprice);
printf('Quantity: %1$d<br>', $pqty);
}
}
} else {
echo 'no items selected!';
}
}
我使用该filter_input
功能而不是$_POST
直接访问,因为它有助于确保恶意攻击者破坏您的代码的机会更少,但实际上是相同的$_POST['qty_' . $pid]
推荐阅读
- excel - 在 Excel 中将表格剪切到一半
- c# - 从 .NET Web 应用程序向连接用户推送数据的最佳方式
- visual-studio - 如何使 MSBuild 不会因 .NET 解决方案上的错误而停止
- reactjs - 无法修复未处理的拒绝错误 -
- python-3.x - 将缺少的标题添加到数据框第一列
- javascript - 为单个文件禁用更漂亮
- asp.net - 如何在 IIS 8.5 上为 asp.net 项目启用 HSTS
- python - 检查字符串中是否存在字符串,无论是大写/小写/混合?
- javascript - 两个渲染函数都有相同的代码,但只有一个可以工作,为什么?
- core-data - 计算行之间的 CoreData 查询