动态复选框和文本字段到 MySQL 中


Dynamic checkboxes & text fields into MySQL

我正在尝试创建一个库存跟踪器。我的问题是库存可以是从 1 件物品到 1 公制对接(给予或接受)的物品。基本形式是这样的:

问题.php

<form name="form" method="post" action ="issue.e.php">
    <?
        $kit_query = mysql_query("SELECT * FROM eq_kit");
        while($fetch_kits = mysql_fetch_array($kit_query){
        $kitId = $fetch_kits['kit_id'];
        $kitSn = $fetch_kits['kit_sn'];
        $kitQty = $fetch_kits['kit_qty'];
    ?>
    <tr>
        <td>
            <input type="checkbox" name="kit_row[]" value="<?=$kitId?>" id="<?=$kitId?>">
        </td>
        <td>
            <input name="qty[]" type="text" id="<?=$kitQty?>" value="<?=$kitQty?>">
        </td>
        <td>
            <input name="sn[]" type="hidden" id="<?=$kitSn?>" value="<?=$kitSn?>"
        </td>
    </tr>
    <? } ?>
    <input type="submit" name="Submit" id="Submit" value="Submit">
</form>

在接收方:

问题.php

<? // all the database crap
if(is_array($kit_row)){
    foreach($_POST['kitrow'] as $key=>$val){
        $sn=$_POST['sn'];
        $serial = $sn[$val];
        $qty = $_POST['qty'];
        $quant = $qty[$val];
    mysql_query("INSERT INTO eq_issue SET issue_sn = '$serial', issue_qty = '$quant'")or die(mysql_error());

这适用于单个项目以及连续项目。

举个例子作为我的 eq.issue.php 表格:

|Check | Qty | SN  |
==================== 
| X    | 100 |12345| 
|      | 1   |23456| 
|      | 1   |98765| 
| X    | 999 |19283|
==================== 
|Submit|

我的问题是,例如,如果我选择第一个和第 4 个选项,数组现在如下所示:

kit_row => Array
  0 => 4
  1 => 3
qty => Array
  0 => 100
  1 => 1
  2 => 1
  3 => 999
sn => Array
  0 => 12345
  1 => 23456
  2 => 98765
  3 => 19283

因此,当我的脚本运行时,我得到第 4 个选项的值为 kit_row => 3 qty => 1 sn=> 23456,我希望它显示 kit_row=> 3 数量 => 999 sn => 19283。

关于如何完成这项工作的任何建议?为了获得更好的视觉参考,我正在尝试实现与 PHPMyAdmin 的多值插入页面相同的概念,使用复选框来表示我要插入的记录组(或行)。

你可以用 $_POST['qty']$_POST['sn']而不是$_POST['kit_row']

或者使用kit_id作为表单字段的索引,这将使服务器端知道什么是什么:

<input type="checkbox" name="kit_row[<?=$kitId?>]" value="1">
<input name="qty[<?=$kitId?>]" type="text" id="<?=$kitQty?>" value="<?=$kitQty?>">
<input name="sn[<?=$kitId?>]" type="hidden" id="<?=$kitSn?>" value="<?=$kitSn?>">

通过这种方式,您可以使用数据库中的 ID 访问服务器上发布的数据,而不是像这样使用 0、1、2...:

if (is_array($_POST['kit_row']))
{
    foreach ($_POST['kit_row'] as $kitId => $val)
    {
        $sn=$_POST['sn'];
        $serial = $sn[$kitId];
        $qty = $_POST['qty'];
        $quant = $qty[$kitId];

也可以在每个复选框前面添加一个具有相同名称和值 0 的隐藏字段。不过,您必须将kit_row[]替换为实际索引:

<input type="hidden" name="kit_row[<?php echo $i; ?>]" value="0">
<input type="checkbox" name="kit_row[<?php echo $i++; ?>]" value="1">

这样,值在两种情况下都会提交,勾选和取消勾选。