【问题标题】:PHP: Adding options to Session arrayPHP:向会话数组添加选项
【发布时间】:2014-07-09 16:14:16
【问题描述】:

在订单过程中,我有一个步骤可以选择多个选项来添加到订单中。我将其存储在会话中,以便它出现在我的购物车和订单摘要中。

我现在的问题是,我的代码只能添加一个选项。但是,要求可以添加多个选项。

目前的情况是排序过程中的每一步都有一个view.html.php和一个default.php(控制器和视图)。

对于过程中的这个特定步骤(添加选项),我最终得到了以下代码:

在view.html.php中:

if(JRequest::getVar('reset')) {
                unset ($_SESSION['selectedoptions'][$plan->id]);    
                $mainframe->redirect(html_entity_decode(JRoute::_( '$url')));
            }
            elseif(JRequest::getVar('add')){
                $_SESSION['selectedoptions'][] = $plan->id;
                $mainframe->redirect(html_entity_decode(JRoute::_( '$url')));
            }

在default.php中:

<?php if(isset($_SESSION['selectedoptions'][$plan->id])): ?>
            <input class="btn-address btn-address-text" type="submit" name="reset" value="Verwijderen" />
        <?php else: ?>
            <input class="btn-address btn-address-text" type="submit" name="add" value="Toevoegen" />
        <?php endif; ?>

我想要向数组添加选项的功能,以便稍后我可以读取数组值以显示所选项目。我做错了什么?

希望有人能帮助我,在此先感谢!

【问题讨论】:

    标签: php arrays multidimensional-array session-variables add


    【解决方案1】:

    你检查值是否以错误的方式存在。

    你这样做:

    <?php if(isset($_SESSION['selectedoptions'][$plan->id])): ?>
    

    你应该这样做

    <?php if(in_array($plan->id, $_SESSION['selectedoptions'])): ?>
    

    编辑

    但也可能寻找unset,你设置这个值的方式错误。

    代替:

    $_SESSION['selectedoptions'][] = $plan->id;
    

    你应该这样做:

    $_SESSION['selectedoptions'][$plan->id] = 1;
    

    然后default.php 中的代码应该可以工作

    EDIT2

    你应该在你的 default.php 文件中添加:

    <input type="hidden" name="plan_id" value="<?php echo $plan->id; ?>" />
    

    在您展示的代码的开头。

    在 viev.html.php 中你应该把你的代码改成:

    if(JRequest::getVar('reset')) {
                    unset ($_SESSION['selectedoptions'][JRequest::getVar('plan_id')]);    
                    $mainframe->redirect(html_entity_decode(JRoute::_( '$url')));
                }
                elseif(JRequest::getVar('add')){
                    $_SESSION['selectedoptions'][JRequest::getVar('plan_id')] =  1;
                    $mainframe->redirect(html_entity_decode(JRoute::_( '$url')));
                }
    

    【讨论】:

    • 您是否在 PHP 文件的同一开头添加了session_start() ;
    • 所以问题可能出在其他地方。也许你在$_SESSION 中没有任何内容,也许你没有进入你的陈述。如果没有 var_dump 和您提供的更多信息,这很难说
    • 我目前正在打印数组 $_SESSION['selectedoptions'] 进行调试,所以我可以看到其中的内容。但它只打印数组。所以我假设向数组中添加项目不起作用。
    • var_dump($_SESSION['selectedoptions']) 打印:array(1) { [1]=> int(1) }。
    • 所以你在这个数组中有一个索引为 1 的元素。所以在 default.php 中,当你检查 if(isset($_SESSION['selectedoptions'][$plan-&gt;id])): ?&gt; 并将 $plan-&gt;id 值设置为 1 时,你应该显示重置按钮
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 2017-01-08
    相关资源
    最近更新 更多