我正在尝试为iPhone制作注册系统。一切正常,服务器在检查用户是否已经存在后返回消息。唯一的问题是当返回的字符串等于此字符串时,不会显示警报视图:
这是代码:
PHP
//other stuff here
//verify if user already in database
$verify = "SELECT userid
FROM user
WHERE userid=:user LIMIT 1;";
$verifyQry = $db_conn->prepare($verify);
$verifyQry->bindParam(':user', $user);
$verifyQry->execute();
$userExists = $verifyQry->fetch();
//if user not in the database, add!
if (!$userExists) {
$insert = 'INSERT INTO user(`userid`,`password`) VALUES (:user,:password)';
$qry = $db_conn->prepare($insert);
$qry->bindParam(':user', $user);
$qry->bindParam(':password', $pass);
$qry->execute();
$message = "success";
}else{
$message = "userExist";
}
echo utf8_encode($message);
XCODE
-(void)signUpWithUsername:(NSString *)username andWithPassword:(NSString *)password{
//NSString *token = [[NSUserDefaults standardUserDefaults]
// objectForKey:@"tokenId"];
dispatch_async(kBgQueue, ^{
NSString *rawStr = [NSString stringWithFormat:@"username=%@&password=%@", username,
password];
NSData *data = [rawStr dataUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:@"http://www.myserver.com/api/registerUser.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:data];
NSURLResponse *response;
NSError *err;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
NSString *responseString = [NSString stringWithUTF8String:[responseData bytes]];
NSLog(@"%@", responseString);// I GOT THIS STRING FROM THE SERVER I
if ([responseString isEqualToString: @"userExist"]) {
UIAlertView *userExistAlert = [[UIAlertView alloc]initWithTitle:@"User Exist" message:@"A user with this email address has already sign up. Did you forgot your password" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"retrive password", nil];
[userExistAlert show];
}else{
}
[self dismissViewControllerAnimated:YES completion:nil]; // Dismiss the viewController upon success
});
}
答案 0 :(得分:0)
最好的猜测是,您从服务器收到的数据不是完全您认为的原因。它可能包含前导和/或尾随空格或换行符。
确保没有隐藏的周围字符使用:
responseString = [responseString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];];
而不是:
NSLog(@"%@", responseString);// I GOT THIS STRING FROM THE SERVER I
使用:
NSLog(@"response string from server: '@'", responseString);
我还要NSLog responseData
以确保编码符合预期,并且没有隐藏字符,例如换行符:
NSLog(@"response data from server: @", responseData);
也代替:
NSString *responseString = [NSString stringWithUTF8String:[responseData bytes]];
使用:
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding
当我遇到这样的问题时,我使用Charles Proxy来确切了解服务器发送的内容。
答案 1 :(得分:0)
问题是没有显示alertView,但我能够检查从服务器返回的字符串是否等于“userExist”。我用它修复了它:
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
如果用户已经存在,这是现在显示警报视图的代码:
-(void)signUpWithUsername:(NSString *)username andWithPassword:(NSString *)password{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *rawStr = [NSString stringWithFormat:@"username=%@&password=%@", username,
password];
NSData *data = [rawStr dataUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:@"http://www.myserver.com/api/registerUser.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:data];
NSURLResponse *response;
NSError *err;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
responseString = [responseString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"response string from server: '%@'", responseString);
NSString *userExist = @"userExist";
[userExist dataUsingEncoding:NSUTF8StringEncoding];
if ([responseString isEqualToString: userExist]) {
[self performSelectorOnMainThread:@selector(showAlertView)
withObject:responseString waitUntilDone:YES];
}else{
NSLog(@"User doesn't exist");
}
});
}
-(void)showAlertView{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"User exiat" message:@"user exist" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:nil, nil ];
[alert show];
}