# Checkboxen mit If-Anweisungen prüfen ob checked



## Funktionierdochmal (8. Dez 2019)

if (agb == null || datenschutzbestimmungen == null)

Wäre es null, wäre die Checkbox nicht gechecked (laut Google). Aber da kann etwas nicht stimmen, weil ich ein anderes Ergebnis bekommen


----------



## httpdigest (8. Dez 2019)

Vielleicht schreibst du noch ein bisschen mehr Kontextinformationen.
Was ist `agb` und `datenschutzbestimmungen`? Sind das Swing JCheckbox Objekte, oder JavaFX `javafx.scene.control.CheckBox` Objekte oder `android.widget.CheckBox` Objekte?
Und was hat Google damit zu tun? Wovon redest du?!?! 

Du vergleichst hier wahrscheinlich, ob die Referenzvariablen `agb` bzw. `datenschutzbestimmungen`, die (vermutlich) Objekte von irgendeiner UI-Framework Checkbox Klasse halten, null sind. Das sind sie wahrscheinlich nicht. Die haben sicherlich ein Property bzw. eine Methode, um den "ausgewählt"-Zustand abzufragen. Einfach mal nach einer API Dokumentation für das von dir verwendete UI-Framework suchen.

Wenn man sagt "laut etwas/jmdm." ist es immer hilfreich, auch die genutzten Quellen/Suchergebnisse mit anzugeben, die man genutzt hat, um zu einem Schluss zu kommen. So können andere auch gleich besser nachvollziehen, wovon du redest bzw. wie du diese Informationen interpretierst.


----------



## Funktionierdochmal (9. Dez 2019)

Okay sorry ich war zu ungenau mit dem Begriff Checkbox:
<input type="checkbox" name="checkbox1" value="AGB">AGB
<input type="checkbox" name="checkbox2" value="Datenschutzbestimmungen">Datenschutzbestimmungen
Ich rede von diesem HTML Code und keiner Java Checkbox Klasse.

Meine Googleergebnisse:

<input type="checkbox" name="check1" checked />               Sends "on"  
    <input type="checkbox" name="check2" />                       Sends null
    <input type="checkbox" name="check3" value="hello" checked /> Sends "hello"  
    <input type="checkbox" name="check3" value="hello" />         Sends null.


----------



## mrBrown (9. Dez 2019)

Und in welcher Sprache möchtest du das prüfen?


----------



## Funktionierdochmal (9. Dez 2019)

if (agb == null || datenschutzbestimmungen == null)
in Java


----------



## mrBrown (9. Dez 2019)

Und mit welchem Framework?

Und als welcher Typ sind die beiden Variablen deklariert?


----------



## Funktionierdochmal (9. Dez 2019)

Als Strings. Ich zeige dir mal mehr vom Code, ich hoffe es hilft.


```
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("AGB");
        String datenschutzbestimmungen = request.getParameter("Datenschutzbestimmungen");
        
        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);
```


```
<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" value="AGB">AGB <br>
            <input type="checkbox" name="checkbox2" value="Datenschutzbestimmungen">Datenschutzbestimmungen <br><br>
            <button type="submit">Abschicken</button>
        </form>
```


----------



## kneitzel (9. Dez 2019)

Also die Parameter sind auch nicht "AGB" und "Datenschutzbestimmungen". Die Parameter sind checkbox1 und checkbox2, denn so heißen die elemente (name="...."). AGB und Datenschutzbestimmungen sind die Werte, die übergeben werden sollen, wenn die Checkbox gedrückt ist.

Wie kann man sowas selbst raus kriegen?
-> Natürlich durch lesen der Dokumentation. Das HTML checkbox Element ist an vielen Stellen ausführlich beschrieben.
-> Durch Tests! Die Browser bieten einem alle einen Developer Modus, bei dem sie auch Details zu getätigten Requests anzeigen. Da kann man die Parameter betrachten. So das zu komplex ist (Aus meiner Sicht sollte man sich das aber auf jeden Fall ansehen wenn man in dem Bereich entwickeln möchte), dann kann man das auch schnel direkt austesten:
Du kannst z.B. aus dem method="post" ein method="get" machen um dann im Browser zu schauen, was die URL ist. Dazu reicht dann sogar ein minimales Beispiel - Also z.B. bei Deinem Code einfach html und body tags drumherum machen:

```
<html>l
<body>
<form action="ProfilServlet" method="get">
            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" value="AGB">AGB <br>
            <input type="checkbox" name="checkbox2" value="Datenschutzbestimmungen">Datenschutzbestimmungen <br><br>
            <button type="submit">Abschicken</button>
        </form>
</body>
</html>
```
==> Einfach im Browser auf Dateiebene öffnen. Das Ziel wird er dann zwar nicht öffnen können und der Browser zeigt ein File not Found, aber man sieht die URL und damit die Parameter (Da post).
So sieht das Ende der URL dann z,B. aus, wenn die checkboxen geklickt wurden:
`ProfilServlet?alter=&email=&telefon=&passwordNeu=&passwordWdh=&checkbox1=AGB&checkbox2=Datenschutzbestimmungen`

Was mir also scheint ist, dass Du das evtl. als "name" angeben wolltest:

```
<input type="checkbox" name="AGB">AGB <br>
            <input type="checkbox" name="Datenschutzbestimmungen">Datenschutzbestimmungen <br><br>
```
Dann heissen die Elemente so und die Checks von Dir funktionieren. (Und wenn z.B. die Checkbox AGB angeklickt wird, ist der Wert "on")


----------



## Funktionierdochmal (9. Dez 2019)

Erstmal vielen Dank
Ich habe versucht mit der get Methode in meiner URL irgendetwas herauszufinden, aber es geht immer noch nicht.

        String agb = request.getParameter("checkbox1");
        String datenschutzbestimmungen = request.getParameter("checkbox2");
Ich habe jetzt die namen übernommen, die values gelöscht.


        if(agb.equals("on") && datenschutzbestimmungen.equals("on") && 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.equals("on") || !datenschutzbestimmungen.equals("on")) {
            message1 += "Checkboxen sind nicht checked.";
            session.setAttribute("message1", message1);

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



Die Checkboxen habe ich mit equals versucht zu prüfen, aber er gibt mir immer noch dasselbe ergebnis;
 "Checkboxen sind nicht checked"


----------



## kneitzel (9. Dez 2019)

Hast Du denn  mal versucht das Ganze zu debuggen oder ein Logging einzubauen, dass man erkennen kann, was für Werte er hat bzw. nicht hat? Und zeig das veränderte Formular erneut.


----------



## Funktionierdochmal (9. Dez 2019)

```
public class ProfilServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
      
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ProfilServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        String message = "";
        String message1 = "";
        String message2 = "";
        String message3 = "";
        String message4 = "";
        String message5 = "";

        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.equals("on") && datenschutzbestimmungen.equals("on") && 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.equals("on") || !datenschutzbestimmungen.equals("on")) {
            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) {
            message3 += "Email nicht korrekt: Mindestens 5, Maximal 20 Groß- oder Kleinbuchstaben, optional mit Sonderzeichen ”\r\n" +
                    ".- +“ (Punkt, Minus, Unterstrich, Plus)\r\n" +
                    "“@” gefolgt von beliebig vielen Klein- oder Großbuchstaben oder Zahlen\r\n" +
                    "“.” 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 != passwordWdh) {
            message5 += "Passwörter stimmen nicht überein.";
            session.setAttribute("message5", message5);

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

        }
    }
        
        

}
```


```
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>   
        ${message6}
        ${message}
        ${message1}
        ${message2}
        ${message3}
        ${message4}
        ${message5}
        
        <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>
        
        

</body>
</html>
```

"Hast Du denn mal versucht das Ganze zu debuggen oder ein Logging einzubauen, dass man erkennen kann, was für Werte er hat bzw. nicht hat? " Ich schaue gerade...


----------



## mrBrown (9. Dez 2019)

Funktionierdochmal hat gesagt.:


> ${message6} ${message} ${message1} ${message2} ${message3} ${message4} ${message5}


Wunderschöner Code


----------



## Funktionierdochmal (9. Dez 2019)

ich weiß, ich wusste nicht wie ich es sonst hätte umsetzen sollen. an erster linie will ich sowieso nur erstmal, dass es klappt... an vereinfacherungen kann später gearbeitet werden


----------



## Funktionierdochmal (9. Dez 2019)

dass einfache if anweisungen nicht tun was man vor hat macht nur leider alles kaputt


----------



## mrBrown (9. Dez 2019)

Funktionierdochmal hat gesagt.:


> dass einfache if anweisungen nicht tun was man vor hat macht nur leider alles kaputt


Das Dinge nicht das tun, was man denkt, dürfte für nahezu alle Fehler der Grund sein 

um diesen zu fixen solltest du dir mal den Hinweis von @JustNobody zu Herzen nehmen und einfach mal angucken, was genau an Parametern gesendet wird und ankommt.


----------

