1

在庫トラッカーを作成しようとしています。私の問題は、在庫が 1 アイテムから 1 メトリック バットロード (ギブ オア テイク) のアイテムまでの範囲である可能性があることです。基本的なフォームは次のとおりです。

eq.issue.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>

受信側:

issue.e.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|

私の問題は、たとえば 1 番目と 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

したがって、私のスクリプトが実行されると、kit_row => 3 qty => 1 sn=> 23456 として 4 番目のオプションの値を取得します。ここで、kit_row=> 3 qty => 999 sn => 19283 を表示する必要があります。

これを機能させる方法について何か提案はありますか? 視覚的な参照を改善するために、チェックボックスを使用して、挿入するレコードのグループ (または行) を指定する PHPMyAdmin の複数値挿入ページと同じ概念を実現しようとしています。

4

1 に答える 1

1

$_POST['qty']または$_POST['sn']の代わりにforeach を使用でき$_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?>">

このようにして、次のように 0、1、2... を使用するのではなく、データベースからの ID を使用して、サーバーに投稿されたデータにアクセスできます。

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">

このようにして、値は、チェックされている場合とチェックされていない場合の両方で送信されます。

于 2012-06-09T23:00:33.083 に答える