Ir para conteúdo
Casas Junior

[Resolvido] Mostrar mais de um dado do usuário logado PHP

Recommended Posts

Fala galera, beleza?

Estou a 2 semanas a fio, aprendendo PHP.. Já fiz os links de cadastro, login e senha, recuperação e tal.. Agora me pintou uma dúvida, que já quebrei muito a cabeça e não consigo, achar uma solução... 
Bom, tenho a página minhaconta.php nela está a estrutura de quando o cara loga com sucesso e tem a parte, claro que mostra o usuário logado:

Nickname:

<?php echo $_SESSION['usuario'];?><br>



OK!!! Esse não é o problema!!! Queria saber como trazer o resto.. O cara não precisa editar é somente para visualizar:

Eu achei que fazendo com os demais campos, o mesmo com o que fiz com o usuário daria certo, mas pelo visto ele só funciona com o campo usuário.
Exemplo de como ta:
 

Data de Cadastro: <?php echo $_SESSION['datacadastro'];?><br>
Cidade: <?php echo $_SESSION['cidade'];?><br>



Se não é dessa maneira acima, como seria? o_O
Alguma sugestão?

 

 

no select está assim:
 

$usuario=$_POST['usuario'];
$senha=$_POST['senha'];
$sql = mysqli_query($conn, "SELECT * FROM usuarios WHERE usuario = '$usuario' and senha = '$senha'") or die (mysqli_error());
$row = mysqli_fetch_assoc($sql);
if($row > 0) {
session_start();
$_SESSION['usuario']=$_POST['usuario'];


 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você salvou apenas o campo usuario na SESSION (na última linha do seu código).

Você tem o resultado dos dados do usuário associado ao array $row, certo? Basta registrar os valores que você precisa, assim:

$_SESSION[ 'usuario' ] = $row[ 'usuario' ]; //armazenando usuario
$_SESSION[ 'nascimento' ] = $row[ 'nascimento' ]; //armazenando data de nasc.

Os dados não serão armazenados para posterior consulta se você não fizer dessa forma...

Mas você ainda pode facilitar um pouco as coisas e fazer dessa forma:

$_SESSION[ 'dados_user' ] = $row; //armazenando tudo em forma de array associativo

//agora basta acessar dessa forma:
echo $_SESSION[ 'dados_user' ][ 'usuario' ]; //acessando usuario
echo $_SESSION[ 'dados_user' ][ 'nascimento' ]; //acessando data de nasc.

 

Mas o ideal mesmo é você armazenar apenas o id do usuário e em toda vez que recarregar a página você extrair os dados novamente, como você já está fazendo. Dessa forma você garante que o usuário não foi excluído, editado, teve sua senha modificada, etc.

 

E vou te dar uma dica extremamente importante: sei que você está começando agora e provavelmente esse código é apenas para fins didáticos, mas procure por SQL Injection, pois seu código está extremamente vulnerável.

Veja: 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
17 horas atrás, Matheus Tavares disse:

Você salvou apenas o campo usuario na SESSION (na última linha do seu código).

Você tem o resultado dos dados do usuário associado ao array $row, certo? Basta registrar os valores que você precisa, assim:


$_SESSION[ 'usuario' ] = $row[ 'usuario' ]; //armazenando usuario
$_SESSION[ 'nascimento' ] = $row[ 'nascimento' ]; //armazenando data de nasc.

Os dados não serão armazenados para posterior consulta se você não fizer dessa forma...

Mas você ainda pode facilitar um pouco as coisas e fazer dessa forma:


$_SESSION[ 'dados_user' ] = $row; //armazenando tudo em forma de array associativo

//agora basta acessar dessa forma:
echo $_SESSION[ 'dados_user' ][ 'usuario' ]; //acessando usuario
echo $_SESSION[ 'dados_user' ][ 'nascimento' ]; //acessando data de nasc.

 

Mas o ideal mesmo é você armazenar apenas o id do usuário e em toda vez que recarregar a página você extrair os dados novamente, como você já está fazendo. Dessa forma você garante que o usuário não foi excluído, editado, teve sua senha modificada, etc.

 

E vou te dar uma dica extremamente importante: sei que você está começando agora e provavelmente esse código é apenas para fins didáticos, mas procure por SQL Injection, pois seu código está extremamente vulnerável.

Veja: 

 

Excelente!! Nossa funcionou mesmo!! Muito obrigado!

 

E respondendo ali, sim é mais didático, quero aprender toda a logica primeiro e depois partir para a segurança.

 

Muito obrigado novamente, pode encerrar o tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Philippe Luis
      Galera, bom dia.
      Bom, tenho uma aplicação aonde salvo o carrinho de compras em uma session.
      Em desenvolvimento local wampserver tudo ocorre tranquilo.
      Subi meus arquivos pra nuvem e criei um subdominio para api (api.meudominio.com.br). HTTPS
      So que oque acontece, quando tento gravar o carrinho na sessão simplesmente não acontece.
      (Sim. Estou usando session_start() antes de declarar a session);
      Alimento minha api via ajax via POST (não sei se tem alguma coisa haver, so informação). Os dados chegam e tudo certo mais só não grava não grava na session. e não me apresenta nenhum erro.
      Verifico pra ver se existe a $_SESSION['cart'] mais não encontro.
      O mais estranho é que se eu declarar uma session no script. Ex: $_SESSION['teste'] = 'valor';   a session é gravada perfeitamente. Apenas não grava dados dinâmicos.
      Estou hospedando no HostGator.
       
      Aplicação toda finalizada e acontece esse erro com prazo de entrega curtíssimo.
      Ajuda ai galera. 
       
    • Por Philippe Luis
      Galera boa noite.
      Bom tenho um sistema em php onde uso sessions.
      Bom quando acesso meu site através do pc cria se uma session na pasta  /tmp no meu servidor, bom até ai tranquilo.
      Mais quando acesso o mesmo site pelo meu Smartphone, cria-se 4 arquivos de sessoes no minha pasta /tmp.
      Isso é um erro ou é comum acontecer ? Se for um erro como posso resolver?
       
      A foto a seguir mostra o ocorrido. Lembrando que nesse momento da foto só declarei apenas uma sessão .
       

    • Por Jonas Ribeiro Nascimento
      Estou criando meu próprio mvc php para adquirir mais conhecimento.
      Mas estou me deparando com uma coisa muita estranha, eu perco a $_SESSION de uma view para outra view
      Fiz um codigo simples pra testar.a.php ----- view a.php
      <?php session_start(); $_SESSION['teste'] = 'Funcionou'; echo $_SESSION['teste']; ?> <?php session_start(); echo $_SESSION['teste']; // Notice: Undefined variable: _SESSION in var_dump($_SESSION); // Notice: Undefined variable: _SESSION in NULL ?> <?php namespace Sis\Classes; use App\Model\ClassLogin; use Sis\Traits\TraitGetIp; class ClassSession { private $login; private $timeSession = 1200; private $timeCanary = 300; public function __construct(){ if(session_id() == ''){ ini_set("session.save_handler", "files"); //Cabeçalhos somente atraves de arquivos ini_set("session.use_cookies", 1); //Habilita o uso de cookies ini_set("session.use_only_cookies", 1); //Só pode habilitar a seção atraves de coockies ini_set("session.cookie_domain", DOMAIN); //Só aceita coockies vindo do nosso sistema ini_set("session.cookie_httponly", 1); //Só aceita script php e não deixa o javascript alterar o sistema if(DOMAIN != "localhost"){ ini_set("session.cookie_secure", 1); //Para trabalhar com o SSL do servidor ativo } /*Criptografia das nossas sessions*/ ini_set("session.entropy_length", 512); // ini_set("session.entropy_file","/dev/urandom"); ini_set("session.hash_function", "sha256"); ini_set("session.hash_bits_per_character", 5); session_start(); } $this->login = new ClassLogin(); } #Proteger contra roubo de sessão public function setSessionCanary($par=null){ session_regenerate_id(true); if($par == null){ $_SESSION['canary']=[ "birth" => time(), "IP" => TraitGetIp::getUserIp() //Pega o ip do usuario ]; }else{ $_SESSION['canary']['birth']=time(); } } #Verificar a integridade da sessão public function verifyIdSessions(){ if(!isset($_SESSION['canary'])){ $this->setSessionCanary(); } if($_SESSION['canary']['IP'] !== TraitGetIp::getUserIp()){ $this->destructSessions(); $this->setSessionCanary(); } if($_SESSION['canary']['birth'] < time() - $this->timeCanary){ $this->setSessionCanary("Time"); } } #Setar as sessões do nosso sistema public function setSessions($Email){ $this->verifyIdSessions(); $_SESSION['Login'] = true; $_SESSION['Time'] = time(); $_SESSION['Nome'] = $this->login->getIssetSession($Email)['data']['Nome']; $_SESSION['Email'] = $this->login->getIssetSession($Email)['data']['Email']; $_SESSION['Permissoes'] = $this->login->getIssetSession($Email)['data']['Permissoes']; } #Validar as páginas internas do sistema public function verifyInsideSession(){ $this->verifyIdSessions(); if(!isset($_SESSION['Login']) || !isset($_SESSION['Permissoes']) || !isset($_SESSION['canary'])){ $this->destructSessions(); header("Location: ".DIRPAGE."NaoAutorizado"); }else{ if($_SESSION['Time'] >= time() - $this->timeSession){ $_SESSION['Time']=time(); }else{ $this->destructSessions(); header("Location: ".DIRPAGE."NaoAutorizado"); } } } #Destruir as sessions existentes public function destructSessions(){ foreach (array_keys($_SESSION) as $key) { unset($_SESSION[$key]); } } #testar public function testarSessions(){ echo 'oiiiiiiiiiiiiiiiiiiiiiiooooooooooo'; } }

    • Por ghlevin
      Estou precisando fazer um refresh automático em algumas páginas do site de um cliente. Porém, esse refresh precisa acontecer apenas UMA vez.
      Eu sei que daria pra eu colocar a meta tag abaixo, por exemplo:
      <meta content="3;url=http://www.meusite.com.br/index.php" http-equiv="Refresh" /> Mas aí ela atualizaria sempre a cada 3 segundos. E eu queria que atualizasse só uma vez. Como dá pra fazer isso? Com uso de SESSION, COOKIE ou alguma outra coisa?
    • Por Daniel D.B
      Galera me ajudem pelo amor de Deus, eu preciso retornar o Nome completo do usuario e só consigo passar por método get o id dele então eu tenho 
      uma pag login.php 
        <form  method="POST" action="br.com.appvoice.control.validaUsuario/ValidaUsuarios.php">

              <input type="text" name="email" id="email"/>

                <input type="password" name="senha" />

                  <input type="submit" name="botao" value="Login" class="login">
            que envia meus dados para ValidaUsuarios.php :
      VALIDAUSUARIOS.PHP
      <?php
      require'../br.com.appvoice.classe.usuario/Usuario.php';
      require'../br.com.appvoice.validausuario/ValidaUsuario.php';
      try
      {
          $usuario = new Usuario();
          $validausuario = new ValidaUsuario();
          $usuario->setemail($_POST['email']);
          $usuario->setsenha($_POST['senha']);
          $validausuario->validaUsuarios($usuario);
      } ela busca minha classe usuário  e a minha ValidaUsuario
      VALIDA USUARIO:
       
      <?php
      session_start();
      $usuario = $_POST['email'];
      $senha = $_POST['senha'];
      /*$nomecompleto = $_POST['nomecompleto'];*/
      require '../br.com.appvoice.connectionfactory/ConnectionFactory.php';
      class ValidaUsuario
      {
          private $conexao;
          private $porta;
          public function __construct()
          {
              $this->conexao = new ConnectionFactory();
              $this->porta = $this->conexao->getInstance();
          }
          public function validaUsuarios($usuario)    {
              
          try        
          {
              $stmt = $this->porta->prepare("select * from registro_usuario where email =?");
                  
              $stmt->bindValue(1,$usuario->getemail());
              $stmt->execute();
              if
                  ($stmt->fetch(PDO::FETCH_ASSOC)) {
              try      
              {
                  $stmt = $this->porta->prepare("select * from registro_usuario where email = ? and senha = ?");
                  $stmt->bindValue(1,$usuario->getemail());
                  $stmt->bindValue(2,$usuario->getsenha());
                  $stmt->execute();
                  if($linha = $stmt->fetch(PDO::FETCH_ASSOC))
              try
              {    
                  $stmt = $this->porta->prepare("select NomeCompleto from registro_usuario where email =?");
                  $stmt->bindValue(1,$usuario->getemail());
                
                  $stmt->execute();
                  if($linha = $stmt->fetch(PDO::FETCH_ASSOC))
                  {
       echo "<script>location.href='../controls/ValidaAcesso.php?login=".$usuario->getemail(),$senha->getsenha(). "  '</script>";
                  }
                  else 
                  {
                      echo "Nome Completo do Usuário é inválido!";
                  }
              }  e dai para validaAcesso :
      VALIDA ACESSO:
      session_start();
      $_SESSION['Usuario']=$_GET['login'];
      header('Location:../Produtos.php');
      quando eu finalmente chego em produtos.php 
      eu dou o echo na session e ele me traz só o email e se eu quiser a senha pq to passando isso acho que aqui :
      "<script>location.href='../controls/ValidaAcesso.php?login=".$usuario->getemail(),$senha->getsenha(). "  '</script>";
      fica assim 
      PRODUTO.PHP
       <?php session_start();
         
              echo $_SESSION['Usuario'];  mas daí só mostra  meu email 
       
      COMO EU FAÇO PRA MOSTRAR O NOME DO USUARIO? ja vi que tenho q usar o fetch mas em qual página?
             
          ?>
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.