Doubt when using SESSION to store data

0

I'm trying to display n names from a list, I'm making use of sessions for this to be possible. When I use the session via form page elements are added n times to the array, however when I use the even by the class is not returned the expected result, wanted to know where I'm going wrong.

Thank you in advance.

form.php

<?php
        include "Livro.class.php";  

        if($_POST){
            $livro = new Livro;

            // SESSÃO
            if(empty( $_SESSION['books'])){
                $_SESSION['books'] = [];
            }

            array_push($_SESSION['books'], [$_POST['name']]);

            // CLASSE
            $livro->add($_POST['name']);


            // OUTPUT
            echo "Da classe: <br>";
            var_dump($livro->livros);
            echo "<br>";
            echo "Da sessão: <br>";
            var_dump($_SESSION['books']);
        }
?>

<form action="#" method="POST">
    <label for="name">Name:</label>
    <input type="text" name="name" id="name">

    <button type="submit">Enviar</button>
</form>

Book.class.php

<?php

class Livro 
{
    public $livros;

    function __construct(){
        session_start(); 

        if(empty($_SESSION['livros']))
            $_SESSION['livros'] = [];

        $this->livros = $_SESSION['livros'];
    }

    function add($nome){
        array_push($this->livros, [$nome]);
    }

}
    
asked by anonymous 12.03.2018 / 19:25

1 answer

3

You are not updating the session value in your class, see the correction in the "add" method

<?php

class Livro 
{
    public $livros;

    function __construct(){
        session_start(); 

        if(empty($_SESSION['livros']))
            $_SESSION['livros'] = [];

        $this->livros = $_SESSION['livros'];
    }

    function add($nome){
        array_push($this->livros, [$nome]);

        $_SESSION['livros'] = $this->livros;
    }

}

?>
    
12.03.2018 / 19:31