带有复选框的多个数据的表单
form with multiplie data with checkboxes
我有 table 个产品(数据来自数据库)
<?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]
我有 table 个产品(数据来自数据库)
<?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]