[Java] controlli non eseguiti con successo

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
Messaggi
262
Reazioni
3
Punteggio
35
Salve potete aiutarmi a capire il perchè se l'utente viene registrato due volte non si ha la dialog "utente già presente"?
Java:
@Override
        public void actionPerformed(ActionEvent e) { 
            if(e.getSource().equals(Button_Iscriviti)) {
                String nome=textField_Nome.getText();
                String cognome=textField_Cognome.getText();
                String email=textField_Email.getText();
                String numeroTelefonico=textField_NumTelefonico.getText();
                String password=textField_Password.getText();
                String provincia=textField_Provincia.getText();
                String citta=textField_Città.getText();
                String Cap=textField_Cap.getText();
                String nomeVia=textField_NomeVia.getText();
                int numCivico = 0;
              
                 Validazioni validazioni = new Validazioni();
                 validazioni.emailObbligatoria(email, "Inserisci una email", "La email inserita non è valida");
                 validazioni.provinciaObbligatoria(provincia, "Inserisci una provincia", "La provincia inserita non è valida[2 caratteri]");
                 validazioni.capObbligatorio(Cap, "Inserisci un CAP", "Il CAP inserito non è valido[5 caratteri]");
                 validazioni.numeroCivicoObbligatorio(Integer.toString(numCivico), "Inserisci il numero civico", "Il numero Civico inserita non è valida[Inserire solo valori numerici]");
                 validazioni.nomeViaObbligatoria(nomeVia, "Inserisci una via", "La via inserita non è valida");
                 validazioni.cittaObbligatoria(citta, "Inserisci una citta", "La citta inserita non è valida");
                 validazioni.passwordObbligatoria(password, "Inserisci una password", "La password inserita non è valida[Almeno una lettera maiuscola,Almeno una lettera minuscola,Almeno una cifra,Almeno un carattere speciale,Lunghezza minima 8]");
                 validazioni.numeroTelefonicoObbligatoria(numeroTelefonico, "Inserisci un numero di telefono", "Il numero di telefono inserito non è valido[8 valori]");
                 validazioni.nomeObbligatoria(nome, "Inserisci un nome", "Il nome inserito non è valido");
                 validazioni.cognomeObbligatoria(cognome, "Inserisci un cognome", "Il cognome inserito non è valido");

                 if (validazioni.valido()) {
                    numCivico=Integer.parseInt(textField_N_Civico.getText().toString());
                      ctrl.effettuaRegistrazione(nome, cognome, email, password,  numeroTelefonico, nomeVia, numCivico, Cap, citta, provincia);
                    if(ctrl.effettuaRegistrazione(nome, cognome, email, password,  numeroTelefonico, nomeVia, numCivico, Cap, citta, provincia)==false) {
                         ctrl.VisualizzazioneAvvisi(Arrays.asList("Utente è stato registrato con successo"));
                    }  else {
                         ctrl.VisualizzazioneAvvisi(Arrays.asList("Utente già presente"));
                          ctrl.visualizzazioneLogin();
                     }
                }
                 else {
                     ctrl.VisualizzazioneAvvisi(validazioni.getMessaggiErrore());

                } 
           }
     }
 
Ultima modifica da un moderatore:
Difficile da dire senza vedere il corpo di effettuaRegistrazione()... potrebbe essere tutto.
Potresti aver invertito la condizione quando fai il confronto nell'if.
 
Difficile da dire senza vedere il corpo di effettuaRegistrazione()... potrebbe essere tutto.
Potresti aver invertito la condizione quando fai il confronto nell'if.
okay ecco:
Java:
  public boolean effettuaRegistrazione(String nome, String cognome, String email, String password,  String numeroTelefono,
                String nomeVia, int numeroCivico, String cap, String citta, String provincia) {
            DaoUtente daoUtente = new DaoUtenteDatabase();
            DaoIndirizzo daoIndirizzo = new DaoIndirizzoDatabase();
            boolean insertSucced = false;
            int codiceIndirizzo = -1;
            if(! daoUtente.esisteUtente(email)) {
                if(! daoIndirizzo.esisteIndirizzo(nomeVia, numeroCivico, cap, citta, provincia)) {
                    daoIndirizzo.inserisciNuovoIndirizzo(nomeVia, numeroCivico, cap, citta, provincia);
                    registrazione.setVisible(false);         
                }
                codiceIndirizzo = daoIndirizzo.ottieniCodiceIndirizzo(nomeVia, numeroCivico, cap, citta, provincia);
                if (codiceIndirizzo != -1) {
                    insertSucced = daoUtente.inserisciNuovoUtente(nome, cognome, email, password, numeroTelefono, codiceIndirizzo);

                }
            }
            return insertSucced;
        }
 
Io a prima vista vedo un errore con il codice che hai riportato.
Come fa notare Ibernato, dovremmo sapere cosa fa quel metodo; però suppongo restituisca true se l'utente esiste, e false altrimenti.

Questo mi fa giungere quindi alla conclusione che se l'utente esiste, e quindi il programma non entrerà in quell'if, venga restituito da questa funzione (mi riferisco a effettuaRegistrazione()) il valore false.

Quindi di conseguenza potresti aver sbagliato il confronto nell'altro codice:

Java:
if(ctrl.effettuaRegistrazione(nome, cognome, email, password,  numeroTelefonico, nomeVia, numCivico, Cap, citta, provincia)==false) {
    ctrl.VisualizzazioneAvvisi(Arrays.asList("Utente è stato registrato con successo"));
}  else {
    ctrl.VisualizzazioneAvvisi(Arrays.asList("Utente già presente"));
    ctrl.visualizzazioneLogin();
}

tu qui stai dicendo "se è false mostra 'Utente è stato registrato con successo" quando invece dovresti mostrare l'altro messaggio.

Inoltre potenzialmente non sono gestiti tutti i casi che vanno a modificare il valore di insertSucced. Quindi potresti anche entrare in quell'if dell'altra funzione, ma il valore di insertSucced non cambia mai, e rimane a false.
 
Io a prima vista vedo un errore con il codice che hai riportato.
Come fa notare Ibernato, dovremmo sapere cosa fa quel metodo; però suppongo restituisca true se l'utente esiste, e false altrimenti.

Questo mi fa giungere quindi alla conclusione che se l'utente esiste, e quindi il programma non entrerà in quell'if, venga restituito da questa funzione (mi riferisco a effettuaRegistrazione()) il valore false.

Quindi di conseguenza potresti aver sbagliato il confronto nell'altro codice:

Java:
if(ctrl.effettuaRegistrazione(nome, cognome, email, password,  numeroTelefonico, nomeVia, numCivico, Cap, citta, provincia)==false) {
    ctrl.VisualizzazioneAvvisi(Arrays.asList("Utente è stato registrato con successo"));
}  else {
    ctrl.VisualizzazioneAvvisi(Arrays.asList("Utente già presente"));
    ctrl.visualizzazioneLogin();
}

tu qui stai dicendo "se è false mostra 'Utente è stato registrato con successo" quando invece dovresti mostrare l'altro messaggio.

Inoltre potenzialmente non sono gestiti tutti i casi che vanno a modificare il valore di insertSucced. Quindi potresti anche entrare in quell'if dell'altra funzione, ma il valore di insertSucced non cambia mai, e rimane a false.
Si esatto ecco:
Java:
public boolean esisteUtente(String email){
        boolean userExist = false;
        String query = "SELECT * FROM utente AS U WHERE U.email=?";
        try {
            Connection connection = DBconnection.getInstance().getConn();
            PreparedStatement stmt = connection.prepareStatement(query);
            stmt.setString(1, email);
            ResultSet rs = stmt.executeQuery();
            userExist = rs.next();
        }catch(SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return userExist;
    }
 
Quindi vale quanto dicevo sopra. Se torna true da effettuaRegistrazione tu restituisci false, e quindi entri nell'if della creazione.
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top