用户验证登录

时间:2013-02-22 14:42:29

标签: android android-sqlite

我正在申请。有一个登录页面,用户在edittext字段中输入用户名。然后将其传递给databasehelper类中的函数,该函数根据所有用户名所在表中的条目检查用户名。

这是我在databasehelper类中为验证编写的函数:

public String verify_user(String is_user)
{
    String verify = " ";
    String check = " ";
    SQLiteDatabase fg = this.getReadableDatabase();
    Cursor c = fg.query(Login_Table, null, null, null, null, null, null);
    int iuser = c.getColumnIndex(colUsername);
    for(c.moveToFirst() ; !c.isAfterLast();c.moveToNext())
    {
        verify = c.getString(iuser);
        if(is_user == verify)
        {
            check = "Valid User!";
        }
        else
        {
            check = "Not Valid User!";
        }
    }
    return check;

}

is_user来自.xml布局文件,其中用户输入用户名...当我调试时,我发现了一个奇怪的行为。虽然在条件中is_user和verify在某一点上具有相同的值但是仍然执行。所以我知道用户有效这段代码说无效用户! 。请指导我。谢谢!

来自一个新的建议:

String check = " ";
    SQLiteDatabase fg = this.getReadableDatabase();
    String[] args = new String[1];
    args[0] = is_user;
    Cursor c = fg.query(Login_Table, null, colUsername + " = ?", args, null, null, null);
    int iuser = c.getColumnIndex(colUsername);
    if(is_user.equals(c.getString(iuser)))
    {
        check = "Valid User!";
    }
    return check;

2 个答案:

答案 0 :(得分:1)

在Java中,您使用equals()而不是==

来比较字符串
if(is_user.equals(verify))

此外,您不需要遍历所有用户。只需在查询中添加条件即可。有关详细信息,请参阅documentation

编辑:好的查询将是:

String[] args = new String[1];
args[0] = is_user;
Cursor c = fg.query(Login_Table, null, colUsername + " = ?", args, null, null, null);

始终使用参数,永远不会像colUsername+"="+is_user那样连接,这很容易受到SQL injection的攻击。<​​/ p>

答案 1 :(得分:0)

使用

.equals(...).

if(is_user.equals(verify)){
...