Publicidade

lcpyes

Erro com Session em PDO

Patrocínio:

Postado (editado)

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');
    }
}
?>

 

Editado por Alaerte Gabriel
Adição da tag CODE
0

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) { //(...) }

 

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é.

 

0

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"]);

0

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

0

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');
    }
}
?>

 

0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal dessa forma ae em cima o Login fica seguro quanto a invasão. SQL injection  e outros?

0

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í! 

0

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.

0

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