[Java] controlli non eseguiti con successo

Stato
Discussione chiusa ad ulteriori risposte.

sare1234

Utente Attivo
262
3
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:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Difficile da dire senza vedere il corpo di effettuaRegistrazione()... potrebbe essere tutto.
Potresti aver invertito la condizione quando fai il confronto nell'if.
 
  • Mi piace
Reazioni: sare1234

sare1234

Utente Attivo
262
3
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;
        }
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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.
 

sare1234

Utente Attivo
262
3
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;
    }
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili