foreach循环php与购物车中的html选项标签

时间:2014-01-22 15:29:23

标签: php html foreach option cart

MYSQL查询:

$sql_product = "SELECT * FROM products WHERE product_id= $product_id";
        $sql_result = $dbh->query($sql_product);

PHP:

    foreach($sql_result as $row)
        {
        $product_id=$row['product_id'];
        $product_name=$row['product_name'];
        $price=$row['price'];
        $picture=$row['picture'];

        // output
        echo "
        <div>$product_name</div>
        <div>$price</div>
        <div>
            <form action='cart.php' method='POST' id='buy'> 
                Amount: <select name='amount'>
                         <option value='1'>1</option>
                         <option value='2'>2</option>
                         <option value='3'>3</option>
                    </select>                   

            </form>
        </div>
        ";
        if (isset($_POST['amount']))
            {
            $amount = $_POST['amount'];
            echo $amount, '<br /><br />';
            }
        }
    echo "<button type='submit'class='btn btn-primary' form='buy'>Buy</button>";

PHP foreach循环中的选项标记有问题。这是一个购物车,表格中有一个HTML选项标签。然后将option标签中的值转换为名为$ amount的变量。但每当我按下按钮时,购物车中的所有产品的金额都会发生变化。因此,如果我在购物车中有3个产品,并且我想购买第一个中的1个,第二个和第三个中的2个,则所有产品的变量$ amount变为1。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

在for循环中添加一个计数器或其他东西。

类似

$x=0;
foreach() {

     //your code here

     <form action='cart.php' method='POST' id='buy'> 
            Amount: <select name='amount'".$x.">
                     <option value='1'>1</option>
                     <option value='2'>2</option>
                     <option value='3'>3</option>
                </select>                   

        </form>

      //your code here

      $x++;

}

而不是创建$ x,你可以试试$ row。你只需要添加一些东西 name='amount'".$variable."'>

如果你改变你的foreach

 foreach($sql_result as $row)

 foreach($sql_result as $k => $row)

你可以使用那个$ k

`name='amount'".$k."'>`



//// *更新* ////

如评论中所述,问题可能是表单在foreach中创建。所以我建议在外面创建它。这就是你如何做到的。有一些变化,试着找到它们。

// output is only $html at the end //
$html = '<form action="cart.php" method="POST" id="buy">';
foreach($sql_result as $row) {
    $product_id=$row['product_id'];
    $product_name=$row['product_name'];
    $price=$row['price'];
    $picture=$row['picture'];

    $html.='
        <div>$product_name</div>
        <div>$price</div>
        <div>

                Amount: <select name="amount'.$row.'">
                         <option value="1">1</option>
                         <option value="2">2</option>
                         <option value="3">3</option>
                    </select>
        </div>';
        if (isset($_POST['amount'])) {
            $amount = $_POST['amount'];
            $html.= $amount.'<br /><br />'; //here string concatennation in php is with .
        }
}
$html.='<button type="submit" class="btn btn-primary" form="buy">Buy</button>';
$html.='</form>';

// output happends here
echo $html;

// now all of this above you could wrap in a function and then
// return $html;

答案 1 :(得分:0)

您正在为循环内创建的所有表单分配相同的ID(购买),每页只应有一个ID。 做类似的事情:

<form action='cart.php' method='POST' id='buy_$row@index'>

并将按钮放在循环中,正确为id:

echo "<button type='submit'class='btn btn-primary' form='buy_$row@index'>Buy</button>";