我正在开发一个应用程序,要求用户登录以访问他的一些信息。我有一个 login.php 文件存储在服务器上,所有用户名和密码都存储在数据库中。
在我的应用程序中,我有 2 个 uitextfields 一个用于用户名,一个用于密码。我知道我可以使用 POST 方法将输入传递到 Web 服务器并检查用户名和密码是否匹配,然后加载其余数据。这是我遇到麻烦的地方,谁能帮我解决这个问题,我如何将输入从 uitextfield 传递到该 Web 服务以运行 long.php 脚本?
我正在开发一个应用程序,要求用户登录以访问他的一些信息。我有一个 login.php 文件存储在服务器上,所有用户名和密码都存储在数据库中。
在我的应用程序中,我有 2 个 uitextfields 一个用于用户名,一个用于密码。我知道我可以使用 POST 方法将输入传递到 Web 服务器并检查用户名和密码是否匹配,然后加载其余数据。这是我遇到麻烦的地方,谁能帮我解决这个问题,我如何将输入从 uitextfield 传递到该 Web 服务以运行 long.php 脚本?
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,然后将其放入字典以供以后使用。
如果您阅读本教程,这一切都会很快对您有意义。希望对你有帮助,祝你好运!
您需要在您的服务器上使用对 login.php 脚本发出的 POST 请求,其中包含一个username
和password
值。
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]);
}