繁体   English   中英

iOS-检查用户是否已经在数据库中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM