O que tem de errado nesse sistema de login?

17 respostas
alexandref93

Galera to tentando criar um sistema de login, mais mesmo assim se eu digitar o usuario e a senha correta, ele abre o menu principal em vez de acusa que o usario e senha está inválido!!!

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
 java.sql.Connection con;
        try {
            Class.forName("org.gjt.mm.mysql.Driver");
            con = java.sql.DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/fox", "alexandref93", "33716930");
        } catch (Exception e) {
            e.printStackTrace();
            throw new java.lang.RuntimeException("erro ao conectar");
        }

        try {

        String usuario = this.jTextField1.getText();
        String senha = this.jTextField2.getText();

        if ((usuario.equalsIgnoreCase(usuario))&& (senha.equalsIgnoreCase(senha))){
            new PainelPrincipal().setVisible(true);
            dispose();
        } else {

            JOptionPane.showMessageDialog(null, "Usuário ou senha inválido!!!",
                    "alerta",JOptionPane.ERROR_MESSAGE);

            jTextField1.setText("");
            jTextField2.setText("");


        }
        } catch (Exception e){
            System.out.println(toString());
        }




       try {
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new java.lang.RuntimeException("erro fechar");
        }

        dispose();
    }

O que fiz de errado???

17 Respostas

D

Olha esse if:

if ((usuario.equalsIgnoreCase(usuario))&& (senha.equalsIgnoreCase(senha)))

Vai retornar sempre true, independente do que vc digitar.

alexandref93

dsjbv:
Olha esse if:

if ((usuario.equalsIgnoreCase(usuario))&& (senha.equalsIgnoreCase(senha)))

Vai retornar sempre true, independente do que vc digitar.

então o que eu teria que fazer???

D

esse usuário e senha que vc está pegando da tela, você está comparando com eles mesmo user.equals(user) sempre vai dar true como o dsjbv falou, acho que o que vc quer é comparar os dados digitados com o usuários e senhas que já estão salvo no banco, certo?

ViniGodoy

Você já resolveu o problema do outro tópico e está conseguindo conectar? Pq o nome do driver do banco ainda está errado…

romarcio

Isso mesmo que está acontecendo.

Vc vai precisar fazer uma consulta no banco passando como parametro o usuario e a senha que são digitadas. Dai então se existir um usuario com essa senha vc abre abre o principal.

alexandref93

sim sim!!!

alexandref93

o nome do driver não tah errado, por que eu utilizo o mesmo driver pra cadastrar cliente, e tah funcionando tudo ok!!!

alexandref93

vc poderia me explicar o método certo??? o nome da coluna na tabela do banco, é usuario e a outra coluna é senha!!!
Agradeço desde jah!

alexandref93

Alguém pode me ajudar???xD
Obrigado pela atenção!

Bocchi

Bom, primeiro voce deve fazer uma consulta no seu banco, buscando por todos os usuarios cadastrados no banco, depois deve comparar esse usuario digitado no seu textfield com a lista de usuarios que voce buscou no passo anterior, se o usuario digitado bater com algum dos usuarios do banco ai sim voce busca a senha no banco correspondente a esse usuario e compara com a senha digitada no textfield se bater…BINGO login efetuado com sucesso.

peczenyj

Antes de conectar em um banco de dados coloque usuario e senha dentro do codigo.

Funciona? Então coloca usuario e senha em um arquivo .properties que vc leia em algum momento.

Funciona? Então vc lê do banco de dados.

Não sabe ler do banco de dados? Faça uma classezinha que conecta no banco e le usuario e senha, mostrando na tela.

Faça assim, passos pequenos mas funcionais que vc vai aprendendo uma nova linguagem/ tecnologia.

alexandref93

bem, no botão logar, eu criei um método de conexão, criei uma string para o JTextField etc, mais qual é o método de comparação??? que é utilizado dentro do if…else… saberia me explicar???

Obrigado desde já!

I

Eu não sei como esta o seu MVC, ou sua organização de pacotes…mas após voce pegar o texto digitado pelo usuario:

String usuario = this.jTextField1.getText();  
String senha = this.jTextField2.getText();

Voce chama seu método de consulta, passando os dados como parametro, se sua camada de persistencia se chamasse LoginDAO, voce teria um método +/- assim:

LoginDAO dao = new LoginDAO();
dao.validaLogin(usuario,senha);

Nesse momento o leque de opções pra validar essas informações é enorme…nesse método voce pode escolher a estratégia do que fazer, ou voce traz como retorno um ArrayList de usuarios pra percorrer e validar em uma camada de negócio, ou voce simplesmente faz uma consulta e verifica se as informações existem, se sim, retorna um int=1, se não int=0, dai recebe o valor aqui na ação do botão e poe em um if…ex: if(intRetornado = 0) { limpa os campos e tenta de novo…else{ , logon efetuado e assim vai…

Foi o que eu consegui pensar agora…pois qnd vi seu código vi que voce precisa de algumas dicas de organização de pacotes e funcionalidades…pois abrir uma conexão com o banco na camada de visualização em uma Action de um botão é esquisito e perigoso…talvez fosse mais fácil voce só chamar um método que já faz tudo isso por traz dos panos e te retorna só oque vc quer…da uma estudada em MVC…se vc parar pra pensar, vai ter que escrever o código de conexao com o banco toda hora que clicar em um botão?, não seria mais facil escrever uma classe que faz isso e depois só instancia-la toda vez?..reaproveitamento de código e tal…seria legal ja ir pensando nisso…

Abraços man! Espero ter ajudado!

ViniGodoy

Na verdade, a linha do getClass() poderia ser completamente removida. Ela só está funcionando porque em seguida você usa o DriverManager.

Dê uma olhada na documentação do MySQL, que mostra a maneira correta de fazer a conexão:
http://dev.mysql.com/doc/refman/5.1/en/connector-j-usagenotes-basic.html#connector-j-examples-connection-drivermanager

Aliás, sempre consulte a documentação oficial e atualizada para aprender a usar suas ferramentas. Muitas dores de cabeça podem ser poupadas se seguir as recomendações dos fabricantes. Além disso, os manuais costumam a conter dicas valiosas de boas práticas. Diferente do seu aparelho de DVD, procure ler com cuidado os manuais.

Esse nome de driver que você está usando vem do MySQL 1.2, numa época que um desenvolvedor terceiro criou um driver para a aplicação, e foi mantido apenas por questões de compatibilidade. Você não deveria usa-lo em sua aplicação.

romarcio

bem, no botão logar, eu criei um método de conexão, criei uma string para o JTextField etc, mais qual é o método de comparação??? que é utilizado dentro do if…else… saberia me explicar???

Obrigado desde já!

O que vc precisa fazer é criar um Select no banco, na sua tabela de usuarios para consultar se o que foi digitado na tela de login existe no banco.

Da uma olhada nesses posts, talvez te ajudem a entender o que vc precisa fazer:
http://www.guj.com.br/posts/list/128973.java#695558
http://javafree.uol.com.br/viewtopic.jbb?t=860526

alexandref93

bem, no botão logar, eu criei um método de conexão, criei uma string para o JTextField etc, mais qual é o método de comparação??? que é utilizado dentro do if…else… saberia me explicar???

Obrigado desde já!

O que vc precisa fazer é criar um Select no banco, na sua tabela de usuarios para consultar se o que foi digitado na tela de login existe no banco.

Da uma olhada nesses posts, talvez te ajudem a entender o que vc precisa fazer:
http://www.guj.com.br/posts/list/128973.java#695558
http://javafree.uol.com.br/viewtopic.jbb?t=860526

vlw pelo link, vou ler, vê se consigo resolver o meu problema!!!

alexandref93

Ae, consegui agora!

Obrigado a todos pela atenção!

Criado 13 de julho de 2010
Ultima resposta 14 de jul. de 2010
Respostas 17
Participantes 8