# Login Formular



## javadoc (23. Mrz 2008)

hallo,

habe da ein kleines Problem mit einem HTMl Login Formular.

Möchte per Servlet den Benutzernamen und das Passwort überprüfen.

Das Problem ist, dass das ResultSet nur die erste Zeile ausließt. Also sobald ich den 2. Namen und Passwort der Datebank eintrage arbeitet er den else Zweig ab und springt wieder zum Login. Es klappt nur mit dem ersten Eintrag.

Kann mir jemand helfen?


----------



## SlaterB (23. Mrz 2008)

kann man nur mit Code


----------



## javadoc (24. Mrz 2008)

hier der Code:



```
while(rs.next()) {
          boolean login = false;
          if (user.equals(rs.getString("username")) && (pass.equals(rs.getString("password")))) {
          login = true;
          out.println("Herzlich willkommen " + user);         
          }
          else {
          login = false;
          rq = conn.getRequestDispatcher("/login.html");
          rq.forward(req, res);
          }
```

user steht für String user = req.getParameter("username"); passwort entsprechend
Habe ich nur einen Datenbankeintrag, dann geht es. Füge ich einen zweiten dazu, dann geht es nicht mehr und der else Zweig wird ausgeführt.

[/code]


----------



## SlaterB (24. Mrz 2008)

der else ist auch Quatsch,
du musst erst per while die ganze Liste durchlaufen, wenn gefunden dann login, z.B. irgeneine boolean-Variable setzen + Schleife abbrechen, 
sonst nix tun -> Rest der Liste anschauen,

erst NACH der Schleife hast du die sichere Information,
dass der User nicht der DB ist (falls die boolean-Variable nicht gesetzt wurde), 
dann kannst du zum Login weiterleiten


----------



## javadoc (24. Mrz 2008)

Habs jetzt genau so gemacht. Schleife durchlaufen. Login = true gesetzt. nach der schleife überprüfe ich die parameter, aber es geht trotzdem nur beim 1.eintrag.


----------



## SlaterB (24. Mrz 2008)

hier mal eine Schleife: goto first Posting, read first Answer


----------



## javadoc (24. Mrz 2008)

Ok sorry.


```
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import java.sql.ResultSet;


 //jstl.jar wird gebraucht f¸r jsp.jstl....

public class Login extends HttpServlet {

   
  public void doGet(HttpServletRequest req, HttpServletResponse res)
                               throws ServletException, IOException {
 // }
  //  doPost(req,res);
	/*public void doPost(HttpServletRequest req, HttpServletResponse res)
				throws ServletException, IOException {*/
    Connection con = null;
    Statement stmt = null;
    ResultSet rs   = null; 
     boolean login = false;
   

    RequestDispatcher rq = null;
    res.setContentType("text/html");
    PrintWriter out = res.getWriter(); 
    ServletContext conn = getServletContext();
    
    final String dbHost = "jdbc:mysql://localhost:3306/";
    final String dbTable = "login";
    final String dbUser = "root";
    final String dbPassword = "root"; 
   
   
    try {
      // Load (and therefore register) the mysql Driver
      Class.forName("com.mysql.jdbc.Driver"); 
     
      // Get a Connection to the database
    //  con = DriverManager.getConnection(
   //   "jdbc:mysql://localhost/login?user=root&password=root");
      con = DriverManager.getConnection(dbHost + dbTable, dbUser, dbPassword); 
      // Create a Statement object
      stmt = con.createStatement();
      
      // Execute an SQL query, get a ResultSet
      
      // Display the result set as a list
  
      rs = stmt.executeQuery("Select * from logindata");
      
      while(rs.next()) {
      login = true;
      
      }
      
      if ((req.getParameter("username") == rs.getString("username")) && (req.getParameter("password") == rs.getString("password"))) {
          
      out.println("Herzlich willkommen " + req.getParameter("username"));
        
      }

      else {
      login = false;
      rq = conn.getRequestDispatcher("/login.html");
      rq.forward(req, res);
      } 
         
        
     
      
      
    }
    catch(ClassNotFoundException e) { 
      out.println("Couldn't load database driver: " + e.getMessage());
    }
    catch(SQLException e) { 
      out.println("SQLException caught: " + e.getMessage());
    }
    finally {
      // Always close the database connection.
      try {
        if (con != null) con.close();
      }
      catch (SQLException ignored) { }
    }
    
    
  }
 
}
```


----------



## SlaterB (24. Mrz 2008)

Spitzenleistung, eine Schleife die nichts macht außer ständig eine Variable auf true zu setzen, 
das ist ja so doof dass ich das tatsächlich noch extra erwähnen muss, sorry

so nun mal etwas korrekter:

boolean korrekterLogin = false;
while (ResultSet durchlaufen) {
if (Parameter passt zu aktuellen DB-Eintrag) {
korrekterLogin =true;
break; // Abbruch der Schleife, restliche DB-Einträge egal
} else {
// nix zu tun
}
}


if (korrekterLogin) {
  // alles klaro
} else {
 // zum Login weiterleiten
}


----------



## javadoc (24. Mrz 2008)

Mann du bist ja echt ein verdammt netter Idiot. 

Ich hatte vorher ja genau das, was du mir hier schreibst. Also nicht in dem Posting drüber, aber eine Weile vorher.

Danke für die Antwort und danke für die nette Anrede.


----------



## maki (24. Mrz 2008)

"doof" ist meiner Meinung nach sehr diplomatisch, ich hätte eher "dumm" als Bezeichnung gewählt, insbesondere das der TS dem einzigen der ihm zu helfen bereit war auch noch beleidigt.

Vom Quellcode ganz zu schweigen, eine Beleidigung für Auge & Verstand..


----------



## javadoc (24. Mrz 2008)

Warum gibt es das Forum hier? Damit einem geholfen wird oder?

Dass er mir geholfen hat ist ja sehr nett. Danke. Aber so Kommentare wie von euch beiden brauche ich mir ja wohl nicht anhören oder? 

Das widerspricht dem Sinne eines Forums total. 

Ich dachte, dass ich hier mit normalen Menschen zu tun habe. Aber dem ist leider nicht so.


----------



## maki (24. Mrz 2008)

Wenn etwas abgrundtief schelcht ist, dann darf man das wohl sagen.

Wie gesagt, ich fand "doof" sehr diplomatisch.

Für den miesen Code den du schreibst solltest du dir ein dickeres Fell zulegen, wirst das noch oft hören wenn du so weiter schreibst.

Am beste suchst du dir mal einen Anfängerkurs, so ist dir im Moment nicht zu helfen.


----------



## javadoc (24. Mrz 2008)

Außerdem hatte ich den Code auch schon. Hier kann ich mich jetzt zwar mit dem 2. Eintrag einloggen, aber mit dem ersten nicht.


----------



## SlaterB (25. Mrz 2008)

tja, wenn du mich als normalen Menschen angesehen hättest,
würde ich dir weiterhelfen,
so legst du anscheinend keinen Wert darauf..


----------

