【问题标题】:After refresh the page select dropdown is cleared刷新后页面选择下拉菜单被清除
【发布时间】:2019-01-20 16:37:44
【问题描述】:

我正在使用 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>

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

【问题讨论】:

    标签: php html codeigniter-3 shopping-cart


    【解决方案1】:

    我觉得有问题:

    <?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,因为这就是你要显示的内容,然后检查&lt;option&gt;

    <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 循环。

    【讨论】:

    • 感谢您的回答。给我一些时间检查一下。
    • @user9437856 当然,添加了更多细节。
    • 我为什么要使用每个,因为要找到 id 并从购物车中获取价值。没有foreach还有其他选择吗?
    • 我选择了您的选择代码,但我收到错误“未定义的索引:持续时间”。 $product["duration"] 是正确的显示方式?
    • 我在 SO stackoverflow.com/questions/54280987/… 上又问了一个问题,希望这能帮助您理解我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2022-01-07
    • 1970-01-01
    • 2014-06-13
    • 2015-09-15
    • 2017-11-19
    • 1970-01-01
    相关资源
    最近更新 更多