Ir ao conteúdo
  • Cadastre-se

PHP Erro Login em Website


Posts recomendados

O erro quando eu tento fazer login no meu site e o seguinte: http://prntscr.com/jt567s

 

Codigo:

login.php

<?php
    session_start();
    require('class/Config.inc.php');
    $login = new login;
    
    if(isset($_POST['submit'])){
        if($login->logar($_POST['username'], @$_POST['password'])){
            $_SESSION['username'] = $_POST['username'];
            echo "<script type='text/javascript'>window.alert('Logado com Sucesso.');</script><script>window.location.href= 'index.php';</script>";
            
        }else{
            echo '<script type="text/javascript">window.alert("Login ou senha incorretos");</script>';
        }
    }
    
?>
    <body>
        <div class="wrap">
            <div id="content">
                <p><img src="img/logo-cpb.png" width="400" height="200" /></p>    
                <div id="main">
                    <div class="full_w">
                        <form action="<?php $PHP_SELF; ?>" method="POST">
                            <label for="login">username:</label>
                            <input id="login" name="username" class="text" />
                            <label for="pass">password:</label>
                            <input id="pass" name="password" type="password" class="text" />
                            <div class="sep"></div>
                            <button type="submit" name="submit" class="ok">Login</button> 
                            <button type="button" class="reg" onclick="window.location.href='register.php'">Register</button>
                        </form>
                    </div>
                    
                   
                </div>
            </div>
        </div>
    </body>


 

Login.class.php

<?php
class Login {
    private function encriptar($senha){
        $salt = '/x!a@r-$r%an¨.&e&+f*f(f(a)';
        $output = hash_hmac('md5', $senha, $salt);
        return $output;
    }
    public function logar($login, $senha){
        $conexao = new Config;
        $pass = self::encriptar($senha);
        try{
            $conect = $conexao->getConn();
            $prepare = $conect->prepare("SELECT * FROM accounts WHERE login = ? AND password = ?");
            $prepare->bindvalue(1, $login);
            $prepare->bindvalue(2, $pass);
            $prepare->execute();
            $ranking = $prepare->rowCount();
            if ($ranking >= 1){
                return true;
            }else{
                return false;
            }
        }catch(PDOException $e){
            echo "Erro: ".$e->getMessage();
        }
    }
}

Config.class.php

<?php
Class Config{
    private static $Host = HOST;
    private static $User = USER;
    private static $Pass = PASS;
    private static $Dbsa = DBSA;
    private static $Connect = null;
    
    private static function Conectar(){
        try {
            if(self::$Connect == null):
                $dsn = 'pgsql:host=' . self::$Host . ';dbname=' . self::$Dbsa;
                $options = [ PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8' ];
                self::$Connect = new PDO($dsn, self::$User, self::$Pass, $options);
            endif;
        } catch (PDOException $e) {
            PHPErro($e->getCode(), $e->getMessage(), $e->getFile(), $e->getFile());
        }
        
        self::$Connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return self::$Connect;
    }
    
    public static function getConn(){
        return self::Conectar();
    }
    
}

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@DarkPirok Boa noite,

 

Pela imagem,  o erro indica que não foi possível encontrar o driver do pdo no seu vertrigoserv.

Procure no php.ini que fica na pasta do php e veja se a extensão está ativada.

 

extension=php_pdo_pgsql.so

ou

extension=php_pdo_pgsql.dll

 

Como eu uso o EasyPHP DEV-server 17, o meu é  extension=php_pdo_pgsql.dll  

Basta descomentar a linha retirando o  " ; " da frente.

 

No mais, recomendo você trocar o vertrigoserv pelo easyPHP.

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@DarkPirok

37 minutos atrás, DarkPirok disse:

Você tem skype ? Ou algum meio de comunicação ?

Não, o único meio de comunicação é por aqui no fórum!

 

37 minutos atrás, DarkPirok disse:

Acho que o problema e em MD5

Não acho que possa ser problema dele. Porque na sua imagem inicial apontava que não encontrava o driver. 

Experimente fazer a conexão e a consulta ao BD de forma mais simples. E veja se funciona. Se funcionar, aí dá para pensar que o erro pode estar na função conectar() ou logar()

Link para o comentário
Compartilhar em outros sites

Eu já consegui resolver este erro no começo do tópico. Pode da resolvido. Agora estou com outro erro, e vou abrir outro tópico para não virar bagunça.

 

Estou tentando entrar no meu site e esta apresentando esse erro: http://prntscr.com/jtf5xe

porém o login e a senha estão corretos. Dai eu tiro o MD5 e tento conectar vai tranquilo...

Código com erro:

<?php
class Login {
    private function encriptar($senha){
        $salt = '/x!a@r-$r%an¨.&e&+f*f(f(a)';
        $output = hash_hmac('md5', $senha, $salt);
        return $output;
    }
    public function logar($login, $senha){
        $conexao = new Config;
        $pass = self::encriptar($senha);
        try{
            $conect = $conexao->getConn();
            $prepare = $conect->prepare("SELECT * FROM accounts WHERE login = ? AND password = ?");
            $prepare->bindvalue(1, $login);
            $prepare->bindvalue(2, $pass);
            $prepare->execute();
            $ranking = $prepare->rowCount();
            if ($ranking >= 1){
                return true;
            }else{
                return false;
            }
        }catch(PDOException $e){
            echo "Erro: ".$e->getMessage();
        }
    }
}

 

Código que entra normalmente:

<?php
class Login {
    public function logar($login, $senha){
        $conexao = new Config;
        $pass = ($senha);
        try{
            $conect = $conexao->getConn();
            $prepare = $conect->prepare("SELECT * FROM accounts WHERE login = ? AND password = ?");
            $prepare->bindvalue(1, $login);
            $prepare->bindvalue(2, $pass);
            $prepare->execute();
            $ranking = $prepare->rowCount();
            if ($ranking >= 1){
                return true;
            }else{
                return false;
            }
        }catch(PDOException $e){
            echo "Erro: ".$e->getMessage();
        }
    }
}

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@DarkPirok Experimente trocar a linha do $salt que gera uma key:

 

private function encriptar($senha){
        $secret_key = bin2hex(random_bytes(32));
        $output = hash_hmac('md5', $senha, $secret_key);
        return $output;
    }

OU melhor, creio que você poderia até nem usar essa função e colocar direto na função logar() o uso do md5() nesta linha:

$pass = self::encriptar($senha);

Desta forma:

$pass = md5($senha);

Lembrando que, para dar correto, a senha no banco de dados precisa ser a mesma hash para ser comparada. Já que o MD5 é uma criptografia de uma via apenas.

Link para o comentário
Compartilhar em outros sites

Tenho este codigo aqui:
 

<?php
error_reporting(0);
session_start();
function encripitar($senha){
    $salt = '/x!a@r-$r%an¨.&e&+f*f(f(a)';
    $output = hash_hmac('md5', $senha, $salt);
    return $output;
}
$form = $_POST['submit'];
$username = $_POST['username'];
$passwordori = $_POST['password'];
$id = $_POST['id'];
$encript = encripitar($passwordori);
if(isset($form)){
    if($username !== '' && $passwordori !== ''){
        $host        = "host=localhost";
        $port        = "port=5432";
        $dbname      = "dbname=pb";
        $credentials = "user=postgres password=dea66";
        $conn = pg_connect( "$host $port $dbname $credentials" );
        $query = "SELECT * FROM accounts WHERE login = '$username' AND password = '$encript';";
        $result = pg_query($conn, $query);
        $resultado = pg_num_rows($result);
        if(pg_num_rows($result) != 1){
            echo "<script>alert('Usuario ou senha esta incorreta');</script><script>window.history.back()</script>";
        }else{
            $_SESSION['username'] = $_POST['username'];
            echo "<script>window.history.back()</script>";
        }
    }else{
        echo "<script>alert('Usuario ou senha esta incorreta.');</script><script>window.history.back()</script>"; 
    }
} 
?>

E por ele  consigo fazer o login normalmente...

Poderia me ajudar a fazer esse código funcional virar o que não esta funcionando ?

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!