If/else spinnt rum

HuRaHoRRe

Erfahrenes Mitglied
hey

Ich hab gerade ein kleines Problem mit einem if/else in einer for Schleife.
Es werden mit request.getParameter(); einige Informationen aus der URL geholt, das Ganze steht im Zusammenhang mit einem html Formular mit checkboxen.

Das Script ruft nun immer else auf, was ich mir überhaupt nicht erklären kann.

Folgende Ausgabe erzeugt der Browser:

0 null ELSE 1 on ELSE 2 null ELSE 3 null ELSE 4 null ELSE 5 null ELSE 6 null ELSE 7 null ELSE 8 null ELSE

Die aktivierten Checkboxen stehen auf on.
und hier mein Codeabschnitt:

Java:
rs = statement.executeQuery("SELECT COUNT(*) AS rowcount FROM FILM");
    rs.next();
    int count = rs.getInt("rowcount"); 
    
    for(int i = 0; i < count; i++){
        String tmp;
        tmp = (new Integer(i)).toString();
        out.println(tmp);
        String param = request.getParameter(tmp);
        
        out.println(param);
        if(param == "on")
        {
          
          statement2.executeUpdate("DELETE * FROM FILM WHERE ID_FILM = '"+ param +"';");  
          out.println("IF");
        }
        else
        {
          out.println("ELSE");
        }
    }
    rs.close();

Komme grad echt nicht weiter.
Wird wohl ein einfacher Denkfehler sein, aber ich finde ihn einfach nicht.
Hoffe ihr könnt mir helfen.
 
Hallo,

deine if/else Anweisung spinnt nicht. Sie macht genau das was sie soll. Du vergleichst immer ob param == "on" ist. Da param aber immer null ist, ist param nie "on" und deshalb geht er immer in den else-Zweig.

Dein Fehler liegt hier
Code:
String param = request.getParameter(tmp);

Ich kenne deine html-Seite nicht, aber es gibt keine Parameter 0-count.

MFG

zEriX
 
Vielen Dank für die schnelle Antwort

param ist aber nicht immer null...
wenn eine checkbox aktiviert ist sieht die url so aus: index.jsp?1=on
In der Ausgabe des Browsers sieht man das 1 on ist aber trotzdem Else ausgegeben wird.
 
Wenn ich mich richtig erinnere, kann man Strings unter Java nicht mit '==' vergleichen. Dafür nimmt man Compare oder Equals.

Berichtigt mich, wenn ich da falsch liege.

Gruß, knechtHubrecht
 
Ups. ich sehe gerade, da ist ja on dazwischen. :-) Sorry.

Ok, warum immer der else-Zweig aufgerufen wird ist auch klar. Wie gesagt, du überprüfst immer
Code:
param == "on"
. Damit überprüfst du aber nur, ob die an der gleichen Speicherstelle liegen, also ob es das gleiche Object ist.

Du solltest es so überprüfen
Code:
param.equals("on");

Da aber param auch null sein kann, solltest du das auch überprüfen, also sieht die if-Anweisung so aus:

Code:
if(param != null && param.equals("on"))

Da du ja immer on überprüfst und wenn du es so
Code:
"on"
machst immer ein neuer String angelegt wird, solltest du vielleicht eine Klassenvariable anlegen und damit immer vergleichen.

Code:
private static final String ON = "on";

Code:
param.equals(ON);

MFG

zEriX
 
Ahh hab wohl n bisschen viel PHP im Kopf deswegen == "" :rolleyes:

Jetzt kriege ich einen SQL error, was aber ein gutes Zeichen ist, da es nun das if akzeptiert hat.
Das Problem kriege ich glaub noch hin. :)

Vielen Dank
 
@knechtHubrecht
Man kann schon String mit "==" vergleichen, da die Klasse String als Flyweight implementiert ist.

Was zum Beispiel funktioniert müsste ist:
Code:
param.intern() == "on"


MFG

zEriX
 
@zEriX

Thx, ist schon etwas her mit meinem letzten Java-Programm.
Hatte nur im Kopf, das Strings in Java mit '==' mir schon mal eine Nacht gekostet haben ;)
 
Ach ja, wenn der parameter, denn du für dein SQL Statment benutzt aus einer unsicheren Quelle kommen kann, dann benutze ein PreparedStatement.
Dieser behandelt deine Parameter so vor, dass Sie zu dem SQL Datentyp passen(z.B. escapen), wodurch SQL Injections nicht möglich werden.
 
Ach ja, wenn der parameter, denn du für dein SQL Statment benutzt aus einer unsicheren Quelle kommen kann, dann benutze ein PreparedStatement.
Dieser behandelt deine Parameter so vor, dass Sie zu dem SQL Datentyp passen(z.B. escapen), wodurch SQL Injections nicht möglich werden.

Es ist nicht nur sicherer sondern, wenn du es nur einmal anlegst und nicht jedesmal neu auch wesentlich schneller.

MFG

zEriX
 
Zurück