Хранение нескольких значений в массиве $ _SESSION - PullRequest
0 голосов
/ 24 сентября 2019

Я новичок в php, и эта проблема беспокоит меня с недавнего времени.У меня три страницы, 1.classpage.php ---- который содержит,

<?php
session_start();

class addStock{
    public function storeSessArray($stk_code){
         array_push($_SESSION['recentlyView'],$stk_code);
    }
}

?>
logic.php --- который содержит,
<code>$_SESSION['recentlyView']=array();
$checkSession = new addStock;

$chkSession = $checkSession->storeSessArray($val);
echo '<pre>';
print_r($_SESSION);
echo '
';?>

и 3.front.php , который содержит

<!DOCTYPE html>
<html lang="">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title Page</title>
</head>

<body>
<?php
   $val='5';
?>
<?php
   include 'logic.php';
?>
</body>

</html>

Я хочу сохранить массив значений, сохраненный в массиве $_SESSION['recentlyView'], когда кто-то загружает front.php .Но каждый раз, когда я присваиваю $ val другое значение, в массиве $_SESSION['recentlyView'] появляется только последнее значение, которое было сохранено в $ val.Я хочу, чтобы каждое значение, использованное в $val, было сохранено в $_SESSION['recentlyView']

Ответы [ 3 ]

0 голосов
/ 24 сентября 2019

Вы должны позвонить session_start(), прежде чем появится какой-либо вывод. документация примечания

Чтобы использовать сеансы на основе файлов cookie, необходимо вызвать session_start () перед выводом чего-либо в браузер.

Как выМы представили ваш код, самое первое, что загружается, это front.php, который включает logic.php, который вызывает класс в classpage.php.(Я не вижу, как на эту страницу ссылаются - будь то с помощью include или spl.

У вас есть правильная идея отделить вашу презентацию от логики, но вы получили порядок в обратном порядкеСамое первое, что должно произойти, - это выполнение и загрузка соответствующего php-кода, при этом презентация является самой последней вещью, которая происходит. К сожалению, самые первые вещи, которые происходят в вашем скрипте, это то, что он немедленно запускает вывод..

Решение состоит в том, чтобы направлять все запросы через index.php (посмотрите, как сделать seo-friendly URL), и оттуда используйте «front controller» или «router».

Если не считать этого, вам нужно включить короткий раздел php поверх front.php, чтобы запуск сеанса вызывался до вывода.

<?php
    session_start();
    include 'logic.php'; // don't print anything from your logic; pass back a variable to print below.
?>
<!DOCTYPE html>
<html lang="">
....
0 голосов
/ 24 сентября 2019

Вероятно, вы продолжаете перезаписывать массив сеансов.Попробуйте проверить, установлен ли он уже:

if(!isset($_SESSION['recentlyView']))
    $_SESSION['recentlyView'] = array();

Это установит массив только один раз, затем ваш метод просто добавит к нему.

Также, как отмечено в другом ответе, убедитесь, чтопоместить session_start(); на страницу самого верхнего уровня в самом начале.

0 голосов
/ 24 сентября 2019

попробуйте, это должно решить вашу проблему.

class addStock {

public function storeSessArray($stk_code){

   $_SESSION['recentlyView'][] =$stk_code;

}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...