Estoy teniendo problemas con mi primer proyecto php. un amigo me ayudó un poco con este proyecto escolar y ahora estoy estancado.

Me gustaría leer los valores de mi base de datos y usarlos en mi sesión.

Esta es mi configuración de database.php

<?php session_start(); ?>
<?php
//DB Config
define('DB_USER', 'user');
define('DB_PASS', 'password');
define('DB_NAME', 'KBZ');
define('DB_HOST', 'localhost');
$odb = new PDO('mysql: host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS);



//Other Configs
if (!empty($_SERVER['HTTP_CF_CONNECTING_IP']))
{
    $userIP = $_SERVER['HTTP_CF_CONNECTING_IP'];
}
else if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
    $userIP = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else if(!empty($_SERVER['HTTP_CLIENT_IP']))
{
    $userIP = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
    $userIP = $_SERVER['REMOTE_ADDR'];
}
?>

Entonces tengo un archivo connection.php

$user = new user($odb); 
class user
{
var $odb;

function __CONSTRUCT($odb)
{
    $this -> odb = $odb;
}
function loggedIn()
{
    if (isset($_SESSION['username'], $_SESSION['ID']))
    {
        return true;
    }
    else
    {
        return false;
    }
}

Y mi login.php

<form id="form-login" role="form" action="" method="post">
    <?php
    if (isset($_POST['LoginButton'])){
 $DBchkusr = $odb -> prepare("SELECT * FROM `Users` WHERE `username` = :username AND `password` = :password LIMIT 1");
        $DBchkusr -> execute(array(':username' => $username, ':password' => hash('SHA256', $password)));
        $valid = $DBchkusr -> fetchColumn(0);
        if ($valid)
        {

          $DBGetID = $odb -> prepare("SELECT `ID`, FROM `Users` WHERE `username` = :username LIMIT 1");
          $DBGetID -> execute(array(':username' => $username));

          $_SESSION['username'] = $username;

          $_SESSION['ID'] = $DBGetID -> fetchColumn(0);
        }

¿Cómo puedo mostrar el nombre del usuario que inició sesión correctamente? ¿Es posible almacenar información de la base de datos como una variable de sesión como esta?

Por ejemplo:

Bienvenida de vuelta <?php> $_SESSION['Name']?>!

-1
Vezh 27 sep. 2017 a las 13:45

2 respuestas

La mejor respuesta

Sí, use esto cuando un usuario inicie sesión correctamente:

session_start();
$_SESSION["name"] = $name; // $name is received from database

Ahora usa esto en bienvenida de nuevo:

session_start();
echo "welcome back" . $_SESSION["name"];

Dit: Use esto en la declaración if ($ valid):

if ($valid) {
    $stmt = $odb->prepare("SELECT * FROM `Users` WHERE `username` = :username LIMIT 1");
    if ($stmt->execute(array($username))) {
        while ($row = $stmt->fetch()) {
            // remove any of this session variables as you want
            $_SESSION["id"] = $row["id"];
            $_SESSION["username"] = $row["username"];
            $_SESSION["password"] = $row["password"];
            $_SESSION["name"] = $row["name"];
        }
    }
}
0
Mr Pro Pop 27 sep. 2017 a las 19:44

Muy buenas noticias. lo tengo funcionando.

if ($loginCheck)
        {
          $SQLGetID = $odb -> prepare("SELECT * FROM `Account` WHERE `username` = :username LIMIT 1");
          $SQLGetID -> execute(array(":username" => $username));
          if ($SQLGetID->execute(array($username))); { //had to add an ; and it worked


            while ($row = $SQLGetID->fetch()) { // THIS IS LINE 92


                $_SESSION["id"] = $row["ID"];
                $_SESSION["username"] = $row["username"];
                $_SESSION["password"] = $row["password"];
                $_SESSION["vorname"] = $row["vorname"];
                $_SESSION["nachname"] = $row["nachname"];
                $_SESSION["email"] = $row["email"];
                $_SESSION["handy"] = $row["handy"];
            }
        }

Ahora solo hay un problema más, sigo recibiendo este error al iniciar sesión, el resto funciona ahora con la visualización de datos Error Iniciar sesión

Solo lo arreglé. Solución: $ SQLGetID -> execute (array (": username" => $ username)); Fue innecesario eliminar esa línea de código y funciona. Gif de la solución de trabajo

0
Vezh 27 sep. 2017 a las 14:07