【发布时间】:2015-11-16 03:15:19
【问题描述】:
我的购物车系统使用 cakephp + bootstrap 模式时出现问题。问题是当我单击/选择我的一张图片时,它会添加到购物车中,但它总是会显示我数据库中的最后一项/数据。即使我选择了第一项,它仍然会显示我数据库中的最后一项/数据。请帮我解决这个问题。
CartsController.php
class CartsController extends AppController {
public $uses = array('Sidedish','Cart');
public function add() {
$this->autoRender = false;
if ($this->request->is('post')) {
$this->Cart->addProduct($this->request->data['Cart']['product_id']);
}
echo $this->Cart->getCount();
}
public function view() {
$carts = $this->Cart->readProduct();
$side_dishes = array();
if (null!=$carts) {
foreach ($carts as $productId => $count) {
$side_dish = $this->Sidedish->read(null,$productId);
$side_dish['Sidedish']['count'] = $count;
$side_dishes[]=$side_dish;
}
}
$this->set(compact('side_dishes'));
print_r($carts);
print_r($side_dishes);
}}
views/Orders.ctp -> 这是我需要点击商品以显示在购物车中的地方。
<div class="col-sm-12">
<?php echo $this->Form->create('Cart',array('id'=>'add-form','url'=>array('controller'=>'carts','action'=>'add')));?>
<ul class="list-inline">
<?php foreach ($side_dish as $sidedish):?>
<li>
<?php echo $this->Form->hidden('product_id',array('value'=>$sidedish['Sidedish']['sidedish_id'])); ?>
<?php
echo $this->Form->submit(//$sidedish['Sidedish']['sidedish_id'],
'',array(
'name'=>'submit',
'style'=>'height:130px;width:200px;'
. 'background-repeat:no-repeat;'
. 'border:none;'
. 'background-image:url(/webapp' .$sidedish['Sidedish']['sidedish_img']. ')'));
?>
<h5 class="text-center"><?php echo $sidedish['Sidedish']['sidedish_name'];?></h5>
<h5 class="text-center">$<?php echo $sidedish['Sidedish']['sidedish_price'];?></h5>
</li>
<?php endforeach;?>
</ul>
<?php echo $this->Form->end();?>
</div>
有些人告诉我问题出在我的views/orders.ctp 中的foreach 循环,有些人告诉我问题出在控制器中。我不确定问题出在哪里。请需要帮助的人。
【问题讨论】:
-
问题出在视图中:您正在循环浏览您的产品,但您创建了许多隐藏的输入,它们都具有相同的名称
product_id。当您提交表单时,每个输入都会覆盖最后一个输入,最后只会将最后一个输入发送到操作。 -
我明白了。是的。我也注意到它,但我想不出一个简单的方法来解决它。如果你有什么想法,可以分享给我吗?
-
如果您想使用 POST 发送数据,您可以使用
Form->postlink()。但我会简单地使用链接而不是按钮,通过查询字符串发送数据。 -
您好,感谢您的建议。我会尝试并希望它会奏效。
标签: cakephp shopping-cart bootstrap-modal