刷新后,页面选择下拉列表被清除

时间:2019-01-20 16:37:45

标签: php html5 codeigniter-3 shopping-cart

我正在使用CodeIgniter购物车。我正在获取购物车详细信息,例如

Array
(
    [dc54c1ce61893fa725cf87c9e20b4c78] => Array
        (
            [id] => 1
            [name] => wertoiuy
            [qty] => 1
            [price] => 200
            [options] => Array
                (
                    [duration => 0
                )

            [rowid] => dc54c1ce61893fa725cf87c9e20b4c78
        )

    [e5966e762beda1762e461f27f1dc3ef4] => Array
        (
            [id] => 2
            [name] => qwertf 
            [qty] => 1
            [price] => 100
            [options] => Array
                (
                    [duration] => 6m
                )

            [rowid] => e5966e762beda1762e461f27f1dc3ef4
        )

)

请注意,我收到[duration] => 6m[duration] => 12m

我从下拉菜单中获得的持续时间。

<select name="yearDropdown"  class="form-control dropdownDuration" >
 <option selected disabled >Select duration</option>  
 <option value="12m">1 Year</option>
 <option value="6m">6 months</option> 
</select>

现在我要输入的是,选择下拉菜单后,单击“添加到购物车”。产品详细信息已添加到购物车,但是当我刷新页面时,我的下拉列表便被清除。我的意思是下拉列表再次显示Select duration。在将产品添加到购物车中时,它应该显示我选择的内容。

我尝试了一些代码

<?php if (in_array($prim->name_id, array_column($this->cart->contents(), 'id'))){
    foreach ($this->cart->contents() as $product) { 
     if ($product['options']['duration'] == '12m') {
            $yearSelected12='selected="selected"';
        }
     if ($product['options']['duration'] == '6m') {
           $yearSelected6='selected="selected"';
        }
          break;

       }
}?>
   <select name="yearDropdown"  class="form-control dropdownDuration" >
    <option selected disabled >Select duration</option>  
    <option value="12m" <?php echo $yearSelected12;?>>1 Year</option>
   <option value="6m" <?php echo $yearSelected6;?>>6 months</option> 
  </select>
<?php }?>

但是它不起作用。还有其他解决方法吗?

您能在这个问题上帮助我吗?

@Praveen kumar建议答案后。我尝试过

<?php if (in_array($prim->name_id, array_column($this->cart->contents(), 'id'))){
   foreach ($this->cart->contents() as $product) { 
                       //break;
                     } }?>

<select name="memberDuration" class="form-control dropdownDuration">
  <option selected disabled>Select duration</option>
  <option value="12m" <?php if($product['options'][ 'duration']=="12m"){ echo 'selected="selected"';} ?> >1 Year</option>
  <option value="6m" <?php if($product[ 'options'][ 'duration']=="6m" ){ echo 'selected="selected"';} ?>>6 months</option>
</select>

此代码正在刷新,但最初出现错误“未定义变量:产品”。

1 个答案:

答案 0 :(得分:0)

我觉得这有问题

<?php
if (in_array($prim->name_id, array_column($this->cart->contents(), 'id'))) {
  foreach($this->cart->contents() as $product) {
    if ($product['options']['durationActivity'] == '12m') {
      $yearSelected12 = 'selected="selected"';
    }
    if ($product['options']['durationActivity'] == '6m') {
      $yearSelected6 = 'selected="selected"';
    }
    break;
  }
}
?>

首先,您不应该在此处添加break。其次,我希望您在页面上显示$product,因为这是您要显示的内容,并在<option>上进行检查:

<select name="yearDropdown"  class="form-control dropdownDuration" >
  <option selected disabled >Select duration</option>  
  <option<?php echo ($product["duration"] == "12m") ? ' selected="selected"' : ""; ?> value="12m">1 Year</option>
  <option<?php echo ($product["duration"] == "6m") ? ' selected="selected"' : ""; ?> value="6m">6 months</option> 
</select>

说实话,以上$product在以下方面应具有灵活性:

  1. 应具有默认的选定值(不用担心,如果没有)。
  2. 如果用户通过$_POST进行了更改,则应获取该值。

在我看来,在这种完整的情况下,您不需要foreach循环。