输入动态字段的更好方法


Better manner to enter dynamic fields?

我一直在为我的网站设计一个编辑产品字段,用户可以为某个产品的不同"包装"提供许多价格。我希望用户能够以他们想要的任何顺序订购包裹。所以我列出产品,使用计数器(价格表上的 AI)。如果有人告诉我我这样做的方式是愚蠢的,并告诉我一个更好的设计,我将不胜感激。

<?php
    $UserID = mysqli_real_escape_string($connection, $_SESSION['userID']);
    $PID = mysqli_real_escape_string($connection, $_SESSION['ePID']);
    $findpricesstmt = mysqli_prepare($connection, "SELECT * FROM products WHERE UserID = ? and PID= ?");
    mysqli_stmt_bind_param($findpricesstmt, 'ii', $UserID, $PID);
    mysqli_stmt_execute($findpricesstmt);
    $findpricesresult = mysqli_stmt_get_result($findpricesstmt);
    $findpricesrow = mysqli_fetch_assoc($findpricesresult);
    if(mysqli_num_rows($findpricesresult) == 0) {
        echo('You currently have no prices for this product, meaning it is deactivated. To continue sales, add a price and click reactivate.');
    }
    else{
        $_SESSION['count'] = 50;
        while($_SESSION['count'] > 0)
        {
            $count = mysqli_real_escape_string($connection, $_SESSION['count']);
            $count1stmt = mysqli_prepare($connection, "SELECT * FROM prices WHERE Count = ? and UserID = ? and PID= ?");
            mysqli_stmt_bind_param($count1stmt, 'iii', $count, $UserID, $PID);
            mysqli_stmt_execute($count1stmt);
            $count1result = mysqli_stmt_get_result($count1stmt);
            if(mysqli_num_rows($count1result) != 0) {
                include '../includes/orderpackmanu.php';
            }
            $_SESSION['count']--;
        }
    }
?>

在订单包装.php中,我有:

<?php
$count = mysqli_real_escape_string($connection, $_SESSION['count']);
$displayprimanustmt = mysqli_prepare($connection, "SELECT * FROM prices WHERE Count = ?");
mysqli_stmt_bind_param($displayprimanustmt, 'i', $count);
mysqli_stmt_execute($displayprimanustmt);
$displayprimanuresult = mysqli_stmt_get_result($displayprimanustmt);
if(mysqli_num_rows($displayprimanuresult) != 0) {
    $displayprimanurow = mysqli_fetch_assoc($displayprimanuresult);
    $price = $displayprimanurow['price'];
    $units = $displayprimanurow['units'];
    $ppu = $displayprimanurow['ppu'];
    $dispcode = $displayprimanurow['dispcode'];
}
?>
<div>
    <div style="width:55%;float:left;text-align:center;">
        <?php if(isset($price)){ echo $price . "$ for "; } if(isset($units)){ echo $units; } ?>
        <br>
        <?php if(isset($ppu)){ echo $ppu . "$ per unit"; } ?>
    </div>
    <div style="width:40%;float:left;">
        <input class="orderinput" type="text" name="<?php if(isset($count)){ echo $count; } ?>" placeholder="<?php if(isset($dispcode)){ echo $dispcode; } ?>" maxlength="30">
    </div>
    <div style="clear:both;"></div>
    <br>
</div>

我的问题专门针对输入名称(尽管此设计的任何"整体"解决方案也是可以接受的)。如果我采用这种格式,并且每个输入都有自己的名称dispcode,是否有一种简单的输入过程方法?或者有人告诉我为什么我正在做的事情从根本上是错误的,以及如何解决它。

由于我想将未知数量的字段标识为唯一字段,因此这是一个有趣的难题。我最终使用了类似于发布的内容,除了我在"name"字段的开头添加了一些识别字符,以便我可以在我的代码中循环访问它们:

$x = 1;
while(isset($_POST[$x])){
//input
$x++;
}

这是行不通的,因为变量字段不能以数字开头。这确实有效:

$count;
$x = 'X'.$count;
while(isset($_POST[$x])){
//input
$count++;
$x = 'X'.$count;
}

现在它仍然存在问题,但这是我在这样做时学到的最大/最令人困惑/最容易解释的事情。无论如何,我很快就会更改我的代码,只是回过头来回答我用我学到的东西提出的问题。