如何在php中不断重命名变量?

时间:2015-10-25 07:21:08

标签: php html html5

我道歉,因为我相信我的问题可能会让人感到困惑。

我有三个不同的PHP文件。第一个询问您需要多少种不同的产品(1-20),其中变量称为$quantity。从下拉框中选择一个数字后,您将进入下一个自动生成$quantity行数的表的PHP页面,每行中都有一个从数据库中填充的下拉框。还有另一列有数量空文本框。

以下是代码:

<?php
            $quantity = "";
            $i = 1;
            if (isset($_POST['quantity'])) {
                $quantity= $_POST['quantity'];
                $var = "";
                while($row = mysqli_fetch_array($result1)){
                        $var = $var . "<option>" . $row['product_name'] . "</option>";
                    }
                echo "<left><table border='1' width='1%'><tr><td><center>Product</td><td>Quantity</center></td></tr>";
                while ($i <= $quantity){
                echo "<tr><td><select name='product[]' size='1'>";
                echo $var;
                echo "</select></td><td><input name='quant[]'  size='5' /></td></tr>";
                $i++;
                }
                echo "</table></left>";
            }
        ?>

输入每个产品及其所需数量后,用户单击“提交”并将其转到最终的PHP页面。此PHP页面应该是一个包含所有客户信息及其选定产品和数量的确认页面。但是,我的代码只从第二个PHP页面中打印出表中的最新产品和数量。例如,如果表是:

Product Quantity
Bed     1
Chair   2
Couch   3

我的确认页打印出一行表,其中只包含Couch的信息,而不是包含所有这三种产品的多行。这是我最后一个PHP页面的代码:

<body>
    <?php
        $curTime= "";
        $customerbox= "";
        $region= "";
        $products = $_POST['product']; //I changed this (edit 2)
        $quants  = $_POST['quant']; //I changed this (edit 2)

        if (isset($_POST['curTime'])) $curTime= $_POST['curTime'];
        if (isset($_POST['customerbox']))$customerbox= $_POST['customerbox'];
        if (isset($_POST['region']))$region= $_POST['region'];
        if (isset($_POST['product']))$product= $_POST['product'];
        if (isset($_POST['quant']))$quant= $_POST['quant'];

        $error= false;
        $done=false;

        if ((isset($curTime) && empty($curTime))) {
            print "Please enter the date.<br/>";
            $error = true;
        }
        if (!isset($_POST['customerbox'])) {
            print "Please select your customer.<br/>";
            $error = true;
        }
        if (!isset($_POST['region'])){
            print "Please select your region.<br/>";
            $error = true;
        }
        if (!isset($_POST['product'])){
            print "Please select your product.<br/>";
            $error = true;
        }
        if ((isset($quant) && empty($quant))){
            print "Please enter the quantity.<br/>";
            $error = true;
        }
        else{
            $error = true;
            $done = true;
        }
        for ($i =0; $i < count($products); $i++){
            echo $products[$i]; //I changed this
            echo $quants[$i]; //I changed this
        }

    ?>

    <br>
    <table style= border-collapse:collapse width="1%"border="2" align="center" <?php if (!$done){ echo "hidden";}?>
        <tr>
        <th>Date</th>
        <th>Customer</th>
        <th>Region</th>
        <th>Product</th>
        <th>Quantity</th>

        </tr>
        <tr>
        <td><center><?php print $curTime?></td></center>
        <td><center><?php print $customerbox?></td></center>
        <td><center><?php print $region?></td></center>
        <td><center><?php print $product?></td></center>
        <td><center><?php print $quant?></td><center>

        </tr>
    </table>
</body>

我相信这个问题正在发生,因为当我创建包含$quantity行的表时,它会不断命名每个下拉框$product,因此它将最后一个值设为$product并打印这一点。

是否有打印出各自数量的所有产品?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

对于您的产品和数量下拉框,您应该使用name="product[]"name="quant[]"

这将发送一个数组而不是一个值作为$_POST变量,然后您可以使用

循环遍历此数组
$products = $_POST[product];
$quants  = $_POST[quant];
for ($i =0; $i < count($products); $i++){
     echo $products[$i]; //echo one product
     echo $quants[$i]; //echo one quantity
     //etc..
}