A variavel de apoio que estou usando para alterar senha está saindo como nula

9 respostas Resolvido
postgresqljspjava
S

Estou tentando fazer um método de alterar senha, no meu if ele passa como se estivesse tudo certo mais não altera no banco de dados, eu debuguei e parece que a minha variavel cpfApoio está sendo passada como nula

Aqui vai o código:

public boolean AlterarSenha(String senha) {
    Aluno aluno = new Aluno();
    // comandos banco de dados
        String sql  = "update aluno set senha = ? where cpf = " + aluno.getCpfApoio();
    // conectando no banco de dados
    Connection con = Conexao.Conectar();

    try {
        PreparedStatement stm = con.prepareStatement(sql);
        stm.setString(1, senha);   
        stm.execute();
        
    } catch (SQLException ex) {
      System.out.println("Erro:" + ex.getMessage());
      return false;
    }
    return true;
}

///////////////////////////////////////////////////////////////////////

eu clico em um botao alterar senha e ele passa pelos seguinte jsp

ConfirmarCpf

<body>
    <form action="recebeConfirmarCpf.jsp">
        <input type="text" id="cpf" name="cpf" placeholder="Insira o CPF da conta" required="required">
        <input type="submit" name="entrar" value="Buscar">
     </form>
</body>

recebeConfirmarCpf

<%
String cpf = request.getParameter(“cpf”);

AlunoDAO alunoDAO = new AlunoDAO();
if(alunoDAO.confirmarCpf(cpf) == true){
      Aluno aluno = new Aluno();
      aluno.setCpfApoio(cpf);
      response.sendRedirect("alterarSenha.jsp");  
    }
    else {
    response.sendRedirect("confirmarCpf.jsp");  
}

%>

/////////////////////////////////////////

AlterarSenha

<body>
    <form action="recebeAlterarSenha.jsp">
    <input type="password" name="senha" required="required">
    <input type="submit" value="Alterar">
    </form>
</body>

e recebeAlterarSenha

<%

String senha = request.getParameter(senha);

Aluno aluno = new Aluno();
AlunoDAO alunoDAO = new AlunoDAO();
if (alunoDAO.AlterarSenha(senha) == true) {
       response.sendRedirect("loginAluno.jsp");
    }
    else {
    response.sendRedirect("alterarSenha.jsp");
}

%>

ele está passando por tudo e não está dando nenhum erro mas não atualiza no banco de dados, caso possam me ajudar ficarei muito grato.

9 Respostas

B
public boolean AlterarSenha(String senha) {
    Aluno aluno = new Aluno();
    // comandos banco de dados
//não convém passar variáveis diretamente na query sql, pois é um convite para sql injection //
        String sql  = "update aluno set senha = ? where cpf = ?;
    // conectando no banco de dados
    Connection con = Conexao.Conectar();

    try {
        PreparedStatement stm = con.prepareStatement(sql);
           stm.setString(1, senha);   
           stm.setDouble(2, aluno.getCpfApoio());    
        stm.execute();
        
    } catch (SQLException ex) {
      System.out.println("Erro:" + ex.getMessage());
      return false;
    }
    return true;
}

//////////// no formulario falta informar o metodo, se é post ou get////////

<body>
    <form action="recebeAlterarSenha.jsp" method="post">
    <input type="password" name="senha" required="required">
    <input type="submit" value="Alterar">
    </form>
</body>
//////
Verifique se no output do servidor (conteiner) se tem algum erro
S

Preste atenção no seu código:

public boolean AlterarSenha(String senha) {
    // aqui você acabou de criar um objeto do tipo Aluno
    Aluno aluno = new Aluno();
    String sql  = "update aluno set senha = ? where cpf = ?";
    Connection con = Conexao.Conectar();
    try {
        PreparedStatement stm = con.prepareStatement(sql);
           stm.setString(1, senha);
           // e aqui quer obter o CpfApoio do objeto que acabou de criar?
           // esse objeto acabou de ser criado, ele não tem nada setado...
           stm.setDouble(2, aluno.getCpfApoio());
        stm.execute();
    } catch (SQLException ex) {
      System.out.println("Erro:" + ex.getMessage());
      return false;
    }
    return true;
}
B

Tem razão, não reparei

S

Fiz tudo e não deu certo, continua indo o valor como nulo e não alterando no banco e não há nenhum erro no output do servidor

S

não entendi sua resposta, estou setando um valor no apoioCpf no jsp recebeConfirmaCpf

S

Se eu fizer desta maneira também não funciona

public boolean AlterarSenha(Aluno aluno) {

// comandos banco de dados
        String sql  = "update aluno set senha = ? where cpf = ?";
    // conectando no banco de dados
    Connection con = Conexao.Conectar();

    try {
        PreparedStatement stm = con.prepareStatement(sql);
        stm.setString(1, aluno.getSenha()); 
        stm.setString(2, aluno.getCpfApoio());
        stm.execute();
        
    } catch (SQLException ex) {
      System.out.println("Erro:" + ex.getMessage());
      return false;
    }
    return true;
}
B

O [staroski] tem razão, o problema é que está a enviar para duas jsp’s, onde em cada JSP cria um objeto Aluno aluno = new Aluno();
Assim vai perder o set cpf, quando criar um novo objeto na segunda jsp, o ideal era efetuar a validação toda num só JSP, onde cria um objeto único e seta os valores de cpf e senha.

S
Solucao aceita

Está criando um objeto Aluno no recebeConfirmarCpf.
E está criando outro objeto Aluno no método AlterarSenha.

S

Consegui resolver, coloquei em uma pagina junta e recebi usando dois ifs e está funcionando obrigada!

Criado 20 de setembro de 2021
Ultima resposta 21 de set. de 2021
Respostas 9
Participantes 3