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:
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:
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'];