多个文本框附加到php中的当前Objects数组

时间:2013-11-26 02:56:47

标签: php form-submit

我有数据库中的产品列表。我在页面加载时加载产品然后显示。我会要求用户输入每种产品的数量。现在提交表单后,我想针对每个产品检索所有这些数量。以下是我目前的代码。

<?php
$productList;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    echo 'Product form submitted';
    foreach ($productList as $product) {
        // Code to retrieve quantity
    }
} else {
    include_once '../classes/OrderService.php';
    $orderService = new OrderService();
    $productList = $orderService->loadProducts();
}

&GT;

下面是html部分。

    <?php foreach ($productList as $product) { ?>


        <b><a href="#" onclick="displayProductDetails('<?php echo $product->getProductName(); ?>');">
        <?php echo $product->getProductName();?></a></b>
        <br/>
        <?php echo $product->getDescription();?>
        <br/>
        <b>Price:</b> &nbsp;&nbsp;&nbsp;<?php echo $product->getPrice(); ?>
        <br/><br/>
        Qantity: <input type="text" style="padding-left: 5px;" name="<?php echo $product->getQuantity(); ?>" size="3" maxlength="3"/>

<?php } ?>

我这里有两个问题。首先是当我提交表单并且控件去提交if block我的产品列表是空的。如果我在加载页面时已填充,为什么它是空的。另外,如何获取用户输入的每件产品的数量。

提前致谢。

1 个答案:

答案 0 :(得分:2)

首次构建页面后提交的后续请求,即提交每个产品的数量,将不会自动在表单上发布相同的脚本时提供相同的数据。

因此,您需要在持有产品的数据库表上执行更新查询,然后再次选择它们。 (大概使用你已经构建的OrderService对象。

这里有一些帮助 - 虽然我没有关于您的数据存储的大量信息:

include_once '../classes/OrderService.php';
$orderService = new OrderService();
$productList = $orderService->loadProducts();

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    foreach($productList as $product) {
        if(isset($_POST["quantity_" . $product->getId()])) {
            $product->updateQuantity($_POST["quantity_" . $product->getId());
        }
    }
}
如果上述任何一个产生错误,请

道歉。只是快速输入。

快速说明:在您的数字输入标记上,我会使用更具描述性的名称,例如产品ID或甚至数量_&lt;&gt;因此,如果您需要一次更新多个产品数量,则可以区分服务器上的提交。为这些字段赋予相同值的id也是一种好习惯。

这是您的“价值”属性,它想要显示用户订单中的实际产品数量。例如

<input type="text" style="padding-left: 5px;" name="<?php echo $product->getId(); ?>" id="<?php echo $product->getId(); ?>" size="3" maxlength="3" value="<?php echo $product->getQuantity(); ?>"/>