Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lcpyes

Erro com Session em PDO

Recommended Posts

Pessoal vejam se podem me ajudar, faço o login e ta certim mas na pagina de resposta que é o painel de controle eu não consigo pegar os dados do banco atraves da sessão e sim so os que sao digitado no form de validação que seria o Usuario e senha no caso o usuario ae seria o email. quando faz o login no painel queria pegar o restante dos dados do usuario qu estao no banco como o celular do usuario queria pegar ele olhem o codigo abaixo. o Celular eu não consigo buscar ele do banco.

<?php
require_once('config/config.php');

session_start();
$conn = conectar();
if (isset($_POST['gravar'])) {
    $username = $_POST['usuario'];
    $password = $_POST['senha'];
    try {
        $sqlLogin = $conn->prepare("SELECT Count('Idsis') "
                . "FROM sis "
                . "WHERE Email = ? "
                . "AND Senha = ? "
                . "AND Ativo='A'");
        $sqlLogin->bindValue(1, $username, PDO::PARAM_STR);
        $sqlLogin->bindValue(2, $password, PDO::PARAM_STR);
        $sqlLogin->execute();
        $rsLogin = $sqlLogin->fetchColumn();
    } catch (PDOException $e) {
        // Caso ocorra uma exceção, exibe na tela
        echo("Ocorreu um erro<br>");
        echo $e->getMessage();
    }
    if ($rsLogin == "1") {
        $Celular = $rsLogin["Celular"];
        $_SESSION['usuario'] = $username;
        $_SESSION['celular'] = $Celular;
        header('location:admin.php');
    }
}
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A coluna 'Celular' não existe no result set, pois a única coluna que estás a seleccionar é a contagem de 'Idsis'. 

 

Para além disso, em vez desta linha:

if ($rsLogin == "1") { //(...) }

Tenta com:

 

if (count($rsLogin) > 0) { //(...) }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 horas atrás, wootzor disse:

Para além disso, em vez desta linha:


if ($rsLogin == "1") { //(...) }

Tenta com:

 


if (count($rsLogin) > 0) { //(...) }

Não deu certo. quando coloco desta forma se colocar um usuario e senha que não existe ele loga. Estranho né.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde lcpyes 

 

O Wootzor está certo você só tá pegando a ID do usuário na sua query, se você quer pegar todos os dados pra poder usar depois troca o  Count('Idsis') simplesmente por *  

"SELECT * "

e daí troca também a verificação do resultset de if ($rsLogin == 1)  para if ($rsLogin) 

 

e se precisar contar os ids como você tava tentando fazer na query é só usar $total = count($rsLogin["idsis"]);

Compartilhar este post


Link para o post
Compartilhar em outros sites
53 minutos atrás, Sergio S. F. Pereira disse:

Boa tarde lcpyes 

 

O Wootzor está certo você só tá pegando a ID do usuário na sua query, se você quer pegar todos os dados pra poder usar depois troca o  Count('Idsis') simplesmente por *  

"SELECT * "

e daí troca também a verificação do resultset de if ($rsLogin == 1)  para if ($rsLogin) 

 

e se precisar contar os ids como você tava tentando fazer na query é só usar $total = count($rsLogin["idsis"]);

Eu coloquei o cell na SET  já, vou testar aqui e posto o resultado

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu tirei o 

$rsLogin = $sqlLogin->fetchColumn();

e coloquei 

 $rsLogin = $sqlLogin->fetch(PDO::FETCH_ASSOC);

ae deu certo. vou postar o codigo todo ae.

 

<?php
require_once('config/config.php');

session_start();
$conn = conectar();
if (isset($_POST['gravar'])) {
    $username = $_POST['usuario'];
    $password = $_POST['senha'];
    try {
        $sqlLogin = $conn->prepare("SELECT Email, Senha, Celular FROM sis WHERE Email = ? AND Senha = ? AND Ativo='A'");
        $sqlLogin->bindValue(1, $username, PDO::PARAM_INT);
        $sqlLogin->bindValue(2, $password, PDO::PARAM_STR);
        $sqlLogin->execute();
        $rsLogin = $sqlLogin->fetch(PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
        // Caso ocorra uma exceção, exibe na tela
        echo("Ocorreu um erro<br>");
        echo $e->getMessage();
    }
    if($sqlLogin->rowCount()>0) {
        $Celular = $rsLogin["Celular"];
        $_SESSION['usuario'] = $username;
        $_SESSION['celular'] = $Celular;
        echo $Celular;
        exit();
        header('location:admin.php');
    }
}
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, que legal que conseguiu, é isso aí mesmo, com prepare e execute você previne a injection sim.

PS. eu esqueci de avisar que no meu teste eu tinha trocado o fetchcolumn() por apenas fetch() que também dá certo. Qualquer coisa estamos aí! 

Compartilhar este post


Link para o post
Compartilhar em outros sites

agradeço a todos, e com certeza vai surgir outras dúvidas porque estou iniciando no php estou vindo do ASP,

pode fechar o topico. E mais uma vez obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por junior almeida
      nao estou conseguindo criar sessions em pdo
       
      erro: 
      Undefined index: id in E:\xampp\htdocs\uploadOO\app\pages\usuario\painelUsuario.php on line 21  
      PainelUsuario.php
      $query = new DbFunctions(); $id = $_SESSION['id'];//linha 21 echo $id;  
      classe DbFunctions
      public function login($email, $senha){ $query = $this->select("SELECT id, email, senha, nivel, status FROM usuarios WHERE email = '$email' AND senha = '$senha' UNION SELECT id, email, senha, nivel, status FROM administrador WHERE email = '$email' AND senha = '$senha'"); $_SESSION['id'] = $this->getResult()[0]; if(count($this->getResult()) > 1){ $nivel = $this->getResult()['nivel']; $status = $this->getResult()['status']; if($nivel == 1 AND $status == 1){ echo " <div class='aviso-cad green'> <h2 class='font-media titulo'>Logado com sucesso!!</h2> </div> "; sleep(2); header('Location: ../app/pages/usuario/painelUsuario.php'); }  
      se alguém puder me ajudar
×

Informação importante

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