Skip to content
Advertisement

How to create a $_SESSION from an array index?

I am doing a login system and I want to show a welcome message when the user is validated. I explain.

This is the database:

enter image description here

The user when is logging in uses the username but I want in the welcome message to show it’s firstname.

What I have is a function that selects all the information of the username that is logging in.

LoginManager.php

public function obtenirDades($usuari)
    {

        //Obtenim les dades de la base de dades
        $sql = " SELECT * FROM erp_user WHERE username = '$usuari'";


        $cons = (BdD::$connection)->prepare($sql);
        $ok = $cons->execute();
        $cons->setFetchMode(PDO::FETCH_ASSOC);
        $resultat = $cons->fetchAll();

        /*var_dump($resultat);
        die();*/

        return $resultat;

    }

Then in LoginController.php I obtain the $_POST information, I call the function to show database information and also I validate the user with LDAP.

LoginController.php

<?php
if (!isset($_SESSION))
{
    session_start();
}

class LoginController extends Controller
{

    public function process($params)
    {
        //EN EL LOGIN VALIDEM L'USUARI I CONTRASENYA
        if (isset($_POST["login"])) {
            /*HERE WE INSTANTIATE LOGINMANAGER SO WE CAN USE IT'S FUNCTIONS*/
            $manager = new LoginManager();


            /*WE OBTAIN THE POST DATA*/
            $usuari = $_POST["usuari"];
            $password = $_POST["password"];


            //HERE WE USE THE FUNCTION TO OBTAIN INFORMATION FROM THE DATABASE
            $dds = $manager->obtenirDades($usuari); `WE`
            @$this->data["erp_users"] = $dds[0]["firstname"];


            if($manager->valida($usuari, $password)){

                //validació de ldap i redirecció si es professor o alumne
                if ($manager->valida($usuari, $password) && $dds[0]["type"] == "PROFESSORS") {


                    $_SESSION["username"] = $usuari;
                    var_dump($dds);
                    die();

                    header("Location: professor");


                } elseif ($manager->valida($usuari, $password) && $dds[0]["type"] == "ALUMNES") {

                    $_SESSION["username"] = $usuari;

                    header("Location: alumne");

                } else {

                    header("Location: login");

                }
            }else{
                echo "<div class='error'>USUARI i/o CONTRASENYA INCORRECTES! </div>";
            }



        }

        //Destrium la session
        if (isset($_POST['logout'])) {
            session_destroy();
            unset($_SESSION['username']);

            header('location:login');
        }

        $this->getLogin();
    }

    //Funció que ens retorna la vista de login
    public function getLogin()
    {
        $this->twig = "login.html";
    }

}

When I do a var_dumb($dds) I obtaing that:

enter image description here

Also in ProfessorController.php I have to pass the $_SESSION so I can obtain the firstname in professor.html

<?php
if (!isset($_SESSION)) {

    session_start();

}


class ProfessorController extends Controller{

    public function process($params)
    {
        /*var_dump($params);
        die();*/

        if(empty($params[0])){

            /*echo $_SESSION["username"];*/

            $this->getProfessor();

        }elseif(isset($params[0]) && $params[0] == "crearNivell"){

            $this->twig = "crearNivell.html";
        }

    }

    public function getProfessor(){

        $this->twig = "professor.html";
    }

}

So how can I create a $_SESSION with the firstname in order to show it in my views?

Advertisement

Answer

Your session data contains the username. You need to create a session with the firstname. The function obtenirDades() returns multiple rows because you’re using the fetchAll() method. Since it is a login function, use the fetch() method, which returns a single key/value array. Then to store in a session you would do the following

 $_SESSION["firstname"] = $dds['firstname'];

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement