1

我正在开发一个应用程序,要求用户登录以访问他的一些信息。我有一个 login.php 文件存储在服务器上,所有用户名和密码都存储在数据库中。

在我的应用程序中,我有 2 个 uitextfields 一个用于用户名,一个用于密码。我知道我可以使用 POST 方法将输入传递到 Web 服务器并检查用户名和密码是否匹配,然后加载其余数据。这是我遇到麻烦的地方,谁能帮我解决这个问题,我如何将输入从 uitextfield 传递到该 Web 服务以运行 long.php 脚本?

4

2 回答 2

2

Skram 的回答是正确的,尽管您可能在想什么是 ASIHTTPRequest?

您可以在此处获取框架: ASIHTTPrequest home

这是一个关于如何使用它的简短美丽教程: Awesome Tutorial

这是我前段时间用来登录的一些代码:

  -(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 请求,其中包含一个usernamepassword值。

NSURLConnection您可以使用诸如ASIHTTPRequest之类的框架来实现此目的ASIFormDataRequest

在您的服务器上,您应该执行类似的操作$_POST['username']$_POST['password']检索发送到脚本的值以对数据库进行处理。

编辑:来自 iPhone 端的 ASIHTTPRequest 的基本示例。

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 回答