本文介绍了$_SESSION 似乎只保留最后一个值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请在此处查看测试页面 https://wintoweb.com/sandbox/question_3.php我使用 $_SESSION 来存储数据库搜索的结果,但只有最后一个值存储在会话中.看起来后者在每次搜索时都被清空.

Please see the test page here https://wintoweb.com/sandbox/question_3.phpI use $_SESSION to store results of DB searches but only the last value is stored in the session. Looks like the latter is emptied upon each search.

我之前在该服务器上使用过 session,没有任何问题.我的代码可能有问题,但我无法弄清楚.session_start 在文件顶部调用.

I've used session before on that server and had no problems. My code is probably faulty but I cannot figure it out. session_start is called at top of file.

<?php
if(isset($_GET['search'])){

} else if(isset($_GET['display_this'])){
    $rets = getNames(); //The $rets will hold the value returned by your function getName().
    if(!empty($rets)){
        echo '</br><b>Your selections so far :</b></br></br>';
    }

    //But yet, only the last search is stored in the session (why?)
    echo "Echo of session array : " . $_SESSION['author'] . "<br>";
}

function getNames(){
    $rets = '';
    if(isset($_GET['choices']) and !empty($_GET['choices'])){
        foreach($_GET['choices'] as $selected){
            $rets .= $selected . ' -- ';

    // This should add every $rets to the session array. Right?
    $_SESSION['author'] = $rets;
    //session_write_close();

        }
    }

    return $rets;
}
?>

我希望会话保留来自后续搜索的所有信息,但只存储最后一个值.

I expect the session to retain all info from subsequent searches but only the last value is stored.

推荐答案

一些事情.我会在代码中解释.

A couple of things. I'll explain within the code.

// make sure that the function is before it is called.
// computers execute code top to bottom, and so getNames wouldn't even exist yet
// so therefore your if statement (below) will always evaluate to false
function getNames($choices){
    // use parameters instead of $_GET inside of a function
    $rets = '';
    if(isset($choices) && !empty($choices)){
        foreach($choices as $selected){
            $rets .= $selected . ' -- ';

            // you need to append using '.=' not '=' otherwise all the data will be overwritten
            $_SESSION["author"] .= $rets;
        }
    }

    return $rets;
}

// you shouldn't be checking if something isset and then doing nothing about it
// you might as well just be checking if it isn't.
if(!isset($_GET["search"]) && isset($_GET['display_this'])){
    $rets = getNames($_GET["choices"]);
    if(!empty($rets)){
        echo '</br><b>Your selections so far :</b></br></br>';
    }

    echo "Echo of session array : " . $_SESSION['author'] . "<br>";
}

// you need to move this to the end of your script, otherwise the session will be closed
// before the second iteration of your loop begins and you won't be able to change values
// or access them later on (like in the above if statement)
session_write_close();

这篇关于$_SESSION 似乎只保留最后一个值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!