If Abfrage gibt falsches Ergebnis....

Diskutiere If Abfrage gibt falsches Ergebnis.... im Java Basics - Anfänger-Themen Bereich.
F

Funktionierdochmal

Ich habe hier folgenden Code im Servlet:

Javascript:
String alter = request.getParameter("alter");
        String email = request.getParameter("email");
        String telefon = request.getParameter("telefon");
        String passwordNeu = request.getParameter("passwordNeu");
        String passwordWdh = request.getParameter("passwordWdh");
        String agb = request.getParameter("checkbox1");
        String datenschutzbestimmungen = request.getParameter("checkbox2");
        
        FehlerManager manager = new FehlerManager();
        
        
        boolean alterKorrekt = manager.alterKorrekt(alter);
        boolean mailKorrekt = manager.mailKorrekt(email);
        boolean telefonKorrekt = manager.telefonKorrekt(telefon);
        
        Benutzer benutzer = (Benutzer) session.getAttribute("benutzer");


        if(agb != null && datenschutzbestimmungen != null && alterKorrekt && mailKorrekt &&
                telefonKorrekt && passwordNeu.equals(passwordWdh)) {
            message += "Alle Eingaben korrekt - Benutzer angelegt.";
            benutzer.setAlter(alter);
            benutzer.setEmail(email);
            benutzer.setTelefon(telefon);
            benutzer.setPasswort(passwordNeu);
            session.setAttribute("benutzer", benutzer);
            session.setAttribute("message", message);
            request.getRequestDispatcher("index.jsp").forward(request, response);
            
        } else if (agb == null|| datenschutzbestimmungen == null) {
            message1 += "Checkboxen sind nicht checked.";
            session.setAttribute("message1", message1);

            request.getRequestDispatcher("profil.jsp").forward(request, response);

        
        } else if (!alterKorrekt) {
            message2 += "Das Alter ist eine Zahl im Intervall [0, 123]";
            session.setAttribute("message2", message2);

            request.getRequestDispatcher("profil.jsp").forward(request, response);

            
        } else if (mailKorrekt == false) {
            message3 += "Email nicht korrekt: Mindestens 5, Maximal 20 Groß- oder Kleinbuchstaben, optional mit Sonderzeichen " +
                    ".- +“ (Punkt, Minus, Unterstrich, Plus) " +
                    "“@” gefolgt von beliebig vielen Klein- oder Großbuchstaben oder Zahlen " +
                    "“.” gefolgt von minimal zwei, maximal drei Kleinbuchstaben";
            session.setAttribute("message3", message3);

            request.getRequestDispatcher("profil.jsp").forward(request, response);

            
        } else if (!telefonKorrekt) {
            message4 += "Eine Telefonnummer beginnt entweder mit + und zwei Zahlen oder mit einer 0\r\n" +
                    "nach der 5. Stelle kann optional ein / oder ein - stehen\r\n" +
                    "gefolgt von bis zu 10 weiteren Zahlen";
            session.setAttribute("message4", message4);

            request.getRequestDispatcher("profil.jsp").forward(request, response);

            
        } else if (!passwordNeu.equals(passwordWdh)) {
            message5 += "Passwörter stimmen nicht überein.";
            session.setAttribute("message5", message5);

            request.getRequestDispatcher("profil.jsp").forward(request, response);

        }
Die Fehlermanager prüft mithilfe von RegEx (die Ausdrücke sind 100%ig richtig), ob die eingegebene Mail korrekt ist
Javascript:
public class FehlerManager {
    
    
    public boolean alterKorrekt (String alter) {
        boolean istKorrekt = false;
        
        if (alter != null && alter.matches("[0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-3]") ) {
            istKorrekt = true;
        }
        
        
        return istKorrekt;
        
    }
    
    public boolean mailKorrekt (String mail) {
        boolean istKorrekt = false;
        
        if (mail != null && mail.matches("[a-zA-Z._+-]{5,20}@[1-9a-zA-Z]+\\.[a-z]{2,3}")) {
            istKorrekt = true;
        }
        
        return istKorrekt;
        
        
    }
    
    public boolean telefonKorrekt (String telefon) {
        boolean istKorrekt = false;
        
        if (telefon != null && telefon.matches("\\+[0-9]{2}[0-9]([0-9]{0,9})?|[0-9]{5}[-/]?([0-9]{0,9})?")) {
            istKorrekt = true;
        }
        
        return istKorrekt;
    }
In diesem Formular wird vorher alles eingegeben:


HTML:
        <form action="ProfilServlet" method="post">
            Alter: <input type="text" name="alter"><br>
            E-Mail: <input type="text" name="email"><br>
            Telefonnr.: <input type="text" name="telefon"><br>
            Passwort (Neu): <input type="text" name="passwordNeu"><br>
            Passwort (Wiederholung): <input type="text" name="passwordWdh"><br>
            <input type="checkbox" name="checkbox1" >AGB <br>
            <input type="checkbox" name="checkbox2" >Datenschutzbestimmungen <br><br>
            <button type="submit">Abschicken</button>
        </form>
Also wieso wird ständig nachdem ich die Daten korrekt eingegeben habe, "
Email nicht korrekt: Mindestens 5, Maximal 20 Groß- oder Kleinbuchstaben, optional mit Sonderzeichen " +
".- +“ (Punkt, Minus, Unterstrich, Plus) " +
"“@” gefolgt von beliebig vielen Klein- oder Großbuchstaben oder Zahlen " +
"“.” gefolgt von minimal zwei, maximal drei Kleinbuchstaben" ?
Die Methode mailKorrekt ist genau wie die anderen Methoden gestaltet, aber nur diese macht mir Probleme...
 
6

687b46c0da97

Hi,
grundsätzlich müsstest du hier debuggen, um zu sehen welche Werte den folgenden Objekten zugeordnet sind:
alter, email, telefon, passwordNeu, passwordWdh, agb, datenschutzbestimmungen, alterKorrekt, mailKorrekt, telefonKorrekt

Der Code (Die IF-Abfragen) selbst funktioniert korrekt, welches mit folgendem Beispiel geprüft werden kann:
Java:
        String agb  = "notNull";
        String datenschutzbestimmungen = "notNull";
        String passwordNeu = "pass";
        String passwordWdh = passwordNeu;

        boolean alterKorrekt = true;
        boolean mailKorrekt = true;
        boolean telefonKorrekt = true;
Hier werden den Variablen einfach statische Werte zugeordnet. Die Ausgabe lautet "Alle Eingaben korrekt - Benutzer angelegt.". Somit liegt die Vermutung nahe, dass entweder
  • Die Werte im Request nicht ordentlich übergeben werden oder
  • Der Manager falsche Werte zurückliefert oder
  • Die message objekte haben bereits einen Wert und werden ggf. falsch ausgegeben
Kannst du einmal die werte der oben gelisteten Objekte ausgeben lassen und hier teilen?

Die Methoden im FehlerManager kannst du auch folgendermaßen optimieren:
Java:
    public boolean alterKorrekt (String alter) {
        return (alter != null && alter.matches("[0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-3]"));
    }
 
F

Funktionierdochmal

Also ich habe es gerade mit statischen Werten probiert: Und der Login hat jetzt richtig geklappt.

"Die message objekte haben bereits einen Wert und werden ggf. falsch ausgegeben"Ich glaube das ist es nicht, weil unabhängig davon die Weiterleitung zur index.jsp doch klappen sollte.

"
Kannst du einmal die werte der oben gelisteten Objekte ausgeben lassen und hier teilen?
"
Doofe Frage aber wie mache ich das? Ich habe versuch über Debug as, dann java app, und dann öffnet sich ein Fenster mit Select Java application... Ich habe diese Debuggersache noch nie verstanden
 
6

687b46c0da97

Hi,
wenn du noch nicht mit dem Debugger vertraut bist (Das solltest du alsbald nachholen, hängt von deiner IDE ab), füge einmal folgenden Code vor den If Abfragen ein:
Java:
System.out.println("Alter: " + alter);
System.out.println("agb: " + agb);
System.out.println("datenschutzbestimmungen: " + datenschutzbestimmungen);
System.out.println("passwordNeu: " + passwordNeu);
System.out.println("passwordWdh: " + passwordWdh);
System.out.println("alterKorrekt: " + alterKorrekt);
System.out.println("mailKorrekt: " + mailKorrekt);
System.out.println("telefonKorrekt: " + telefonKorrekt);
System.out.println("message1: " + message1);
System.out.println("message2: " + message2);
System.out.println("message3: " + message3);
System.out.println("message4: " + message4);
Somit würdest du die Werte ausgegeben bekommen ohne den debugger bedienen zu müssen.
 
F

Funktionierdochmal

Okay ich mache es sofort. Eine Sache die komisch ist gerade: Ich habe es die get Methode eingefügt, um in der URL zu sehen welche Werte dort stehen und hier klappt es einfach. Ich füge es mit deinem Code mal wieder in die POst Methode ein... Moment
 
F

Funktionierdochmal

Wieso zur Hölle klappt es jetzt.............. Ich habe NICHTS gemacht
 
F

Funktionierdochmal

ich habe lediglich die else if abfragen in einzelne if abfragen umgeändert
 
Thema: 

If Abfrage gibt falsches Ergebnis....

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben