[英]iOS - Check if user is already in the database
我正在尝试为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
});
}
最好的猜测是,您从服务器接收的数据并不完全是您认为的原因。 它可能具有前导和/或尾随空格或换行符。
为确保周围没有隐藏的字符,请使用:
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来准确查看服务器正在发送的内容。
问题是没有显示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];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.