1

私は、ユーザーにログインして自分の情報にアクセスするように求めるアプリに取り組んでいます。サーバーに保存されているlogin.phpファイルと、データベース上のすべてのユーザー名とパスワードがあります。

私のアプリには、ユーザー名用とパスワード用の 2 つの uitextfields があります。POST メソッドを使用して入力を Web サーバーに渡し、ユーザー名とパスワードが一致するかどうかを確認してから、残りのデータをロードできることを理解しています。ここで問題が発生しました。だれか助けてください。uitextfield からその Web サービスに入力を渡して long.php スクリプトを実行するにはどうすればよいですか?

4

2 に答える 2

2

Skramの答えは正しいですが、ASIHTTPRequestとは何かを考えているかもしれません。

ここでフレームワークを入手できます: ASIHTTPrequest home

これはそれを使用する方法についての短い美しいチュートリアルです: 素晴らしいチュートリアル

そして、これは私がしばらく前にログインを行うために使用したいくつかのコードです:

  -(IBAction)doLogin{

//make sure you have text in the username field, this is optional
if(![[username text] isEqualToString:@""]){
    //URL of your web service 
    NSURL *url = [NSURL URLWithString:@"http://localhost:8888/myservice.php"];
    //instantiate request object with URL
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    //Set post values before you send it off (forcing password to lowercase)
    [request setPostValue:[[self.password text] lowercaseString] forKey:@"password"];
    [request setPostValue:[username text] forKey:@"email"];
    //this is optional, I have switch controlling what methods are called in the web service 
    [request setPostValue:@"2" forKey:@"method"];
    //set the delegate to self for ASIHTTPRequest delegates (things you'll see in the tutorial)
    [request setDelegate:self];
    //send out request
    [request startSynchronous];


    //Now this code handles what happens after the web service call, notice I use a dictionary called user info to hold the response and I check the string to verify pass or fail and act accordingly.

    NSString *verify = [NSString stringWithFormat:@"%@",[userinfo objectForKey:@"verify"]];
    if([verify isEqualToString:@"pass"]){
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:
                            @"MainStoryboard_iPhone" bundle:[NSBundle mainBundle]];
        UITabBarController *mainMenu = 
        [storyboard instantiateViewControllerWithIdentifier:@"mainMenu"];

        [self.navigationController pushViewController:mainMenu animated:YES];
    }
    else{
        //show login failed Dialog or something...
    }
}}

ここにもう少しコードがあります。これは、サーバーが応答を返したときに発生することです。

- (void)requestFinished:(ASIHTTPRequest *)request{       
if (request.responseStatusCode == 400) {
    NSLog(@"Something is wrong");        
} else if (request.responseStatusCode == 403) {
    NSLog(@"Something is wrong");
} else if (request.responseStatusCode == 200) {
    //the response code is good so proceed.
    NSString *responseString = [request responseString];
    userinfo = [responseString JSONValue];
        NSLog(@"%@", [userinfo objectForKey:@"id"]);
        NSLog(@"%@", [userinfo objectForKey:@"user"]);
        NSLog(@"%@", [userinfo objectForKey:@"verify"]);   
} else {
    //print mystery code.
    NSLog(@"%d",request.responseStatusCode);

}

}

基本的に、request startSynchronousそれを使用してリクエストを開始すると、サーバー側のコードが実行され、応答文字列(または失敗)が返されます。ASIHttpRequestから実装する必要のあるデリゲートメソッドで応答文字列(または失敗)をキャッチして処理します-(void)requestFinished:(ASIHTTPRequest *)request。サンプルコードでは、応答文字列をJSONに解析し、後で使用するために辞書に入れています。

チュートリアルを実行すると、これはすべて非常に迅速に理解できます。お役に立てば幸いです。

于 2012-06-07T00:44:41.463 に答える
1

サーバー上のlogin.phpスクリプトに対して行われたPOSTリクエストをusernameとのpassword値で使用する必要があります。

これは、またはASIHTTPRequestNSURLConnectionなどのフレームワークを使用して実現できます。ASIFormDataRequest

サーバーでは、データベースの処理を行うために、スクリプトに送信された値を取得する$_POST['username']などの操作を行う必要があります。$_POST['password']

編集:ASIHTTPRequestを使用したiPhone側の基本的な例。

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:url]];
[request setPostValue:@"some_user" forKey:@"username"];
[request setPostValue:@"some_password" forKey:@"password"];
[request  setDelegate:self];
[request startAsynchronous];

応答をキャッチするには、次のメソッドを実装します。

-(void)requestFinished:(ASIHTTPRequest *)request {
    NSLog(@"%@", [request responseString]);
}
于 2012-06-06T23:53:29.817 に答える