4
respostas

Nome do usuário

Boa tarde agradeceria ajuda. Não estou conseguindo informar na página o nome do usuário depois de logado,eu utilizo o email e senha do pefil.php. Já fiz várias tentativas mas todas sem sucesso, não sei onde estou errando. o var dump da session na pagina index.php retorna:

object(Post)#2 (4) { ["id"]=> NULL ["conteudo"]=> string(36) "ola terceiro post que estou enviando" ["perfil"]=> string(21) "getId();?>" ["status"]=> string(1) "1" } 

O perfil está me retornando o email que é utilizado para o login, de forma correta mas eu preciso do id para enviar ao banco de dados e não sei como pegar isso.

Segue abaixo arquivos. Obrigado.

index.php

<?php include "header.php"; 
require_once dirname(__FILE__) . '/php/conecta.php';
       require_once dirname(__FILE__) . '/php/logica-usuario.php';
       require_once dirname(__FILE__) . '/php/postDAO.php';
       require_once dirname(__FILE__) . '/php/perfilDAO.php';
      require_once dirname(__FILE__) . '/php/post.php';
      require_once dirname(__FILE__) . '/php/perfil.php';

     verificaUsuario();
     usuarioLogado();
?>
<p>Status: Online</p>
          <?php if(isset($_SESSION["usuario_logado"])){ ?>
        <p class="text-success">Bem vindo: 
        <?php echo $_SESSION["usuario_logado"]; ?>
        </p>
    <?php }?>

logica-usuario.php

<?php

session_start();

function logarUsuario($usuario) {
    $_SESSION['usuario_logado'] = $usuario;
}

function usuarioEstaLogado() {
    if (array_key_exists('usuario_logado', $_SESSION)) {
        return true;
    }

    return false;
}

function verificaUsuario() {
    if (!usuarioEstaLogado()) {
        header("Location: ../index.php?acessoNegado=true");
        die();
    }
}

function usuarioLogado() {
    return $_SESSION['usuario_logado'];
}

function logout() {
    session_destroy();
}

banco-usuario.php

<?php
function buscaUsuario($conexao, $login, $senha){

    $login = mysqli_real_escape_string($conexao, $login);
    $query = "select * from perfil where email='{$login}'
    and senha='{$senha}'";
    $resultado = mysqli_query($conexao, $query);
    $usuario = mysqli_fetch_assoc($resultado);
    return $usuario;
    }

perfil.php

?php
class Perfil {
    public $id;
    public $nome;
    public $sobrenome;
    public $rua;
    public $numero;
    public $bairro;
    public $cidade;
    public $uf;
    public $cep;
    public $user_cpf;
    public $ddd;
    public $celular;
    public $localizacao;
    public $imagem;
    public $email;
    public $senha;
4 respostas

Oi Sergio, tudo bom?

Os dados disponíveis depois do login dependem do usuario que está sendo passado pra função logarUsuario:

function logarUsuario($usuario) {
    $_SESSION['usuario_logado'] = $usuario;
}

Compartilha com a gente o que está sendo passado na chamada dessa função com um var_dump? =)

Se o que está sendo passado não contem o id do usuário, precisamos ir mais a fundo e descobrir onde está sendo criado esse usuário.

Descobrindo onde o usuário está sendo criado a gente pode injetar o id dele no conjunto de informações ou descobrir porque ele não está sendo injetado.

Abraço

obrigado pelo retorno André segue:

<?php

session_start();

function logarUsuario($usuario) {
    $_SESSION['usuario_logado'] = $usuario;
}

var_dump($_SESSION);exit;

retorno:

array(3) { ["usuario_logado"]=> NULL ["user_id"]=> int(2) ["user_username"]=> string(6) "sergio" }

Opa, parece que o usuário que estamos passando pra função logarUsuario está vazio:

["usuario_logado"]=> NULL

Mas em algum outro lugar a gente define o user_id e o user_username:

["user_id"]=> int(2) ["user_username"]=> string(6) "sergio"

Você pode usar o id definido já na sessão ou verificar onde ele está sendo definido pra gente passar o usuario todo na chave usuario_logado =)

Procura no seu código onde ta rolando algo parecido como:

$_SESSION['user_id'] = $algumaCoisa;

E compartilha com a gente. Provavelmente nesse lugar a gente consegue jogar a instância toda =)

Abraço

Oi André, não encontrei nos arquivos o $Session['userid']. A Session com o id do usuario logado (login) eu acho que vem do arquivo logica-usuario

?php

session_start();

function logarUsuario($usuario) {
    $_SESSION['usuario_logado'] = $usuario;
}

ele me retorna o $usuario e eu utilizo a função abaixo para manter o usuario logado dentro da sessão:

function usuarioLogado() {
    return $_SESSION['usuario_logado'];
}

Pelo var_dump que te mostrei o usuario que está logado é o e-mail do cadastro (perfil) que eu crio com todos os dados do usuário. O que eu precisaria é transformar esse email que está disponibilizado na $Session no ID do perfil e poder enviar este numero de id ao BD através do arquivo messenger.php para popular a mensagem enviada com o id do usuario que enviou ** name="perfilid" value='(getId();?>)' **

<?php ini_set('display_errors', 1);?>
<?php error_reporting(E_ALL);?>
<?php include "header.php"; 
require_once dirname(__FILE__) . '/php/conecta.php';
       require_once dirname(__FILE__) . '/php/logica-usuario.php';
       require_once dirname(__FILE__) . '/php/postDAO.php';
       require_once dirname(__FILE__) . '/php/perfilDAO.php';
      require_once dirname(__FILE__) . '/php/post.php';
      require_once dirname(__FILE__) . '/php/perfil.php';

     verificaUsuario();
     usuarioLogado();

<!-- post form -->
<form action="php/criar-post.php" method="post">
        <div class="input-group">
          <input type="text" class="form-control"  name="conteudo" placeholder="Escreva uma Mensagem..." required>
          </div>

          <input type="hidden" name="perfil_id"  value="" />

          <input type="hidden" name="status" value="1" /> 

          <span class="input-group-btn">
            <button class="btn btn-success" type="submit">Enviar</button>
          </span>

      </form><hr>
      <!-- ./post form -->
?>

criar-post.php

<?php
$post = new Post();
$post->setConteudo($_POST["conteudo"]);
$post->setPerfil(new Perfil());
$post->setPerfil($_POST["perfil_id"]);
$post->setStatus($_POST["status"]);

var_dump($post);exit;

$dao = new postDAO($conexao);

if ($dao->inserePost($post)) {    
?>
<script type="text/javascript">
window.location="../messenger.php"
      </script>
<?php
} else {
?>

Isso seria possível?