2

iOS アプリケーション用に flex 4.5 を使用しています。ログイン画面を作ってみました。ここに私のコードを添付しました:

ログイン ボタンのクリック ハンドラ:

protected function btnlogin_clickHandler(event:MouseEvent):void
{
    user();
}

この関数を呼び出すもの:

private function user():void
{
    sqlConnection = new SQLConnection();
    sqlConnection.open(File.applicationStorageDirectory.resolvePath("SchoolSeries.db"));
    var stmt:SQLStatement = new SQLStatement();
    stmt.sqlConnection = sqlConnection;
    stmt.text = "select User_Name from USER_NEW where User_Password = :password" 
    stmt.parameters[":password"] = password.text ;
    stmt.execute();
    var result11:SQLResult = stmt.getResult();
    DataModel.getInstance().connection = sqlConnection;
    //statuslable1.text = (String(result11.data[0].User_Conform_Password));
    if ((String(result11.data[0].User_Name)) == username.text)
    {
        //VerifyLogin();
        navigator.pushView(SummaryView,{unm:username.text});
    }
    else
    {
        statuslabelpass.visible = false;
        statuslabel1.visible = false;
        statuslabel.visible =true;
        statuslabel.text = "Username & Password do not match";
    }
}

私の問題は、私が望むようにフィールドを検証していないことです。正しいパスワードを入力してもユーザー名が間違っていると、「ユーザー名とパスワードが一致しません」などのメッセージが表示されます。しかし、正しいユーザー名と間違ったパスワードを入力すると、何のメッセージも表示されません。

パスワードを検証するための別の関数を作成し、ボタンクリックから呼び出すと、その時点でその関数は呼び出されていません。

private function passwrd():void
{
    sqlConnection = new SQLConnection();
    sqlConnection.open(File.applicationStorageDirectory.resolvePath("SchoolSeries.db"));
    var stmt:SQLStatement = new SQLStatement();
    stmt.sqlConnection = sqlConnection;
    stmt.text = "select User_Password from USER_NEW where User_Name = :username" 
    stmt.parameters[":username"] = username.text ;
    stmt.execute();
    var result11:SQLResult = stmt.getResult();
    DataModel.getInstance().connection = sqlConnection;
    //statuslable1.text = (String(result11.data[0].User_Conform_Password));
    if ((String(result11.data[0].User_Password)) == password.text)
    {
        navigator.pushView(SummaryView,{unm:username.text});
    }
    else
    {
        statuslabel.visible = false;
        statuslabel1.visible = false;
        statuslabelpass.visible =true;
        statuslabelpass.text = "Username & Password do not match";  
    }
}

sqlite データベースの両方のフィールドを検証するにはどうすればよいですか?

4

1 に答える 1

0

両方のパラメーターをクエリに渡し、0 または 1 レコードが返されるかどうかを確認します。

stmt.text = "select User_Password from USER_NEW where User_Name = :username and User_Password = :password" 
stmt.parameters[":username"] = username.text ;
stmt.parameters[":password"] = password.text ;

if (result11.data.length > 0)
{
    //valid credentials
}
else
{
    //Username & Password do not match
}

user() 関数をもう一度見たところ、重大なバグが見つかりました。同じパスワードを選択した 2 人のユーザーがいる場合、そのうちの 1 人は決してログインできません。クエリは 2 つのレコードを返しますが、位置 [0] のレコードに対してユーザー名のみをチェックしているため、返されるユーザー位置 [1] では検証されません。同じクエリで両方のパラメーターを渡す必要があります。

于 2013-04-02T21:12:23.850 に答える