首页 > 解决方案 > 带有复选框的乘以数据的表单

问题描述

我有 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!';
      }
  }
?>  

标签: phpsqlcheckbox

解决方案


您只需要数量文本框的唯一字段。尝试这个

<?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]


推荐阅读