Avatar billede kirky Nybegynder
03. december 2001 - 17:03 Der er 11 kommentarer og
1 løsning

password check med MySQL

Der er vel ikke nogle herinde, der kan bikse noget kode sammen der tjekker et indtastet brugernavn og adgangskode i en MySQL database. Det er selve de statements i koden jeg har brug for.
Avatar billede lyhr007 Nybegynder
03. december 2001 - 17:52 #1
Hvis vi antager at du har en MySQL DB med en tabel som hedder \'Users\' med \'User\' og \'Password\' felter, og at det brugeren har indtastet er gemt i 2 string variable \'Name\' og \'Pass\'.

Så vil dine SQL sætninger se ca. sådan her ud.

\"SELECT * FROM Users WHERE User = \" + Name + \" AND Password = \" + Pass

Herefter tjekker du på om du for et gyldigt resultset.
Avatar billede kirky Nybegynder
03. december 2001 - 18:13 #2
jeps... den er jeg med på. Men så let for du ikke lov at slippe. Hvad skal der så ske bagefter at man har lavet forespørgelsen? Hvis det for eksempel er forkert, skal den vise noget tekst, og hvis det er korrekt skal den hoppe videre til et nyt vindue?
Avatar billede cyberzed Nybegynder
03. december 2001 - 20:45 #3
public void getUser(String name)
{
try
{
    String userselect = \"select UserID, Username, Password, Amount from Account where username =\'\"+name+\"\'\";
    Statement stmt = con.createStatement();

    ResultSet rset = stmt.executeQuery(userselect);
    while (rset.next())
    {
    id = rset.getInt(\"UserID\");
    user = rset.getString(\"Username\");
    pass = rset.getString(\"Password\");
    amount = rset.getInt(\"Amount\");
    }
}
catch(SQLException exc)
{
}
}

public boolean checkPass(String name, String password)
{
    if(pass.equalsIgnoreCase(password))
        return true;
    return false;
}


Jeg har min således jeg henter en user, gemmer hans stats i nogle private variabler, og derefter kalder min checkPass, og den får bare en boolean tilbage, så kan man jo gøre med den som man har lyst til.
Avatar billede disky Nybegynder
04. december 2001 - 09:12 #4
Cyberzed:

Der er flere fejl i dit check.

1. du kører i en while() med dit resultset men gemmer kun den sidste du har fundet.

2. du blander lower og upper case i din sql statement, det giver tit problemmer i databaser.


check hellere for username og password i samme statement, og se om der er kommet et resultset tilbage, hvis ikke er bruger ukendt.

Skal det være rigtigt pænt er password md5 encryptet i basen, så selv admin ikke kan se folks password.
Avatar billede kirky Nybegynder
08. januar 2002 - 19:55 #5
ingen komplet svar - ingen point
Avatar billede disky Nybegynder
09. januar 2002 - 08:40 #6
der er da kommet 2 komplette svar.

Eller spurgte du slet ikke om det du egentligt ville have hjælp til ?
Avatar billede hbbd Nybegynder
09. januar 2002 - 10:35 #7
Jo men du skrev, at der var flere fejl i det han gjorde. Så jeg havde ikke tid til at sidde og rette i det den gang. Så jeg fik lidt hjælp andet sted fra til det. Så det så sådan her mere overskueligt ud:

public static boolean userOk(String brugernavn, String password)
  {
    boolean result = false;

    try {
      /**Loader driverfilen til MySQL*/
      Class.forName(\"org.gjt.mm.mysql.Driver\");

      /** Definerer hvor databasen ligger og de nødvendige oplysninger til at logge på*/
      String sourceURL = \"jdbc:mysql://vale.netimage.dk:3306/xxxx\";
      String user = \"xxxx\";
      String DBpassword = \"xxxxxxxx\";

      /**Opretter en forbindelse til databasen ved hjælp af DriverManager*/
      Connection databaseConnection = DriverManager.getConnection(sourceURL, user, DBpassword);
      Statement statement          = databaseConnection.createStatement();

      /**Definere hvilke data der skal forespørges på med executeQuery*/
      ResultSet brugerNavne = statement.executeQuery(\"SELECT * FROM brugere WHERE email LIKE \'\" + brugernavn + \"\' AND password LIKE \'\" + password + \"\'\");

      result = brugerNavne.next();

      /**lukker forbindelsen*/
      databaseConnection.close();
    }
    catch (ClassNotFoundException cnfe) {
      System.err.println(cnfe);
    }
    catch (SQLException sqle) {
      System.err.println(sqle);
    }

    return result;
  }
Avatar billede disky Nybegynder
09. januar 2002 - 10:38 #8
Det ser fint ud.

Dog skal du passe på med konstant at åben og lukke forbindelser til database serveren, det tager LANG tid.

Så hvis dit site bliver belastet bliver det nemt langsomt.
Avatar billede kirky Nybegynder
09. januar 2002 - 10:41 #9
Men hvad skal man ellers gøre, i stedet for at åbne og lukke hele tiden? Bøgerne siger at det er det mest sikre, for at undgå datatab og lignende hvis jeg ikke husker rigtigt?
Avatar billede disky Nybegynder
09. januar 2002 - 10:43 #10
så har bøgerne ikke ret.

Du har en database handler klasse som holder styr på din database connection, denne klasse har så session eller application scope.

Nu giver du bare denne klasse en sql streng, som den udfører og giver dig et resultset tilbage.
Avatar billede kirky Nybegynder
09. januar 2002 - 10:52 #11
tak for information. Jeg vil lige undersøge det lidt nærmere. Da jeg skal op og forsvare det til eksamen..
Avatar billede disky Nybegynder
09. januar 2002 - 10:54 #12
hehe :)

Held og lykke
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester