How to update the user profile through tokenid when a particular user logs in using his username and password

Posted by Rani on Stack Overflow See other posts from Stack Overflow or by Rani
Published on 2011-06-24T07:35:06Z Indexed on 2011/06/24 8:22 UTC
Read the original article Hit count: 315

Filed under:
|
|
|

i have an application in which when the user enters his username and password in the login form , his username and password are submitted to the server database for validation and if he is a valid user a tokenid is generated for him through JSON response and he is allowed to log in.this is the JSON response that i get in the console when a valid user log in through the log in form :

{"TokenID":"kaenn43otO","isError":false,"ErrorMessage":"","Result":[{"UserId":"164","FirstName":"Indu","LastName":"nair","Email":"[email protected]","ProfileImage":null,"ThumbnailImage":null,"DeviceInfoId":"22"}],"ErrorCode":900}
2011-06-24 11:56:57.639 Journey[5526:207] this is token id:kaenn43otO

so when the same user wants to update his profile by clicking on the update tab using the tokenid So that if he want he can his firstname,lastname,password,email.etc.i

i have done   the following code to update  the user profile using tokenid but it does not work.i get tokenid when the user log in and this tokenid i have to pass to other class:
this is my code to update user profile: 


-(void)sendRequest

{


      //this is the class in which i get the tokenid and i am passing it to this class 
       apicontroller *apitest = [[apicontroller alloc]init];
    NSString *tokentest = apitest.tokenapi;
    NSString *post = [NSString stringWithFormat:@"Token=%@&firstname=%@&lastname=%@&Username=%@&Password=%@&Email=%@",tokentest,txtfirstName.text,txtlast.text,txtUserName.text,txtPassword.text,txtEmail.text];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 
    NSLog(@"%@",postLength);
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
    [request setURL:[NSURL URLWithString:@"http://192.168.0.1:96/JourneyMapperAPI?RequestType=Register&Command=SET"]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:postData];

    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if (theConnection) {
        webData = [[NSMutableData data] retain];
        NSLog(@"%@",webData);
        [theConnection start];
    }
    else 
    {

    }

}



-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{   
    [webData setLength: 0]; 
} 

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{         
    [webData appendData:data]; 

} 

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{     
    [connection release];  
    [webData release]; 

} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{      
    NSString *loginStatus = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@",loginStatus);  

    [loginStatus release];           
    [connection release];  
    [webData release]; 
} 

-(IBAction)click:(id)sender
{
 [self sendRequest];

}


this is my apicontroller.m file in which i am creating login form so that user login and in this page tokenid is generated


-(void)sendRequest
{

    UIDevice *device = [UIDevice currentDevice];
    NSString *udid = [device uniqueIdentifier];
    //NSString *sysname = [device systemName];
    NSString *sysver = [device systemVersion];
    NSString *model = [device model];
    NSLog(@"idis:%@",[device uniqueIdentifier]);
    NSLog(@"system nameis :%@",[device systemName]);
    NSLog(@"System version is:%@",[device systemVersion]);
    NSLog(@"System model is:%@",[device model]);
    NSLog(@"device orientation is:%d",[device orientation]);
    NSString *post = [NSString stringWithFormat:@"Loginkey=%@&Password=%@&DeviceCode=%@&Firmware=%@&IMEI=%@",txtUserName.text,txtPassword.text,model,sysver,udid];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 
    NSLog(@"%@",postLength);
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
    [request setURL:[NSURL URLWithString:@"http://192.168.0.1:96/JourneyMapperAPI?RequestType=Login"]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:postData];

    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    if (theConnection) {
        webData = [[NSMutableData data] retain];
        NSLog(@"%@",webData);
    }
    else 
    {

    }

}

//to select username and password from database.

-(void)check
{
    //app.journeyList = [[NSMutableArray alloc]init];
    [self createEditableCopyOfDatabaseIfNeeded];

    NSString *filePath = [self getWritableDBPath];

    sqlite3 *database;

    if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
        const char *sqlStatement = "SELECT Username,Password FROM UserInformation where Username=? and Password=?";
        sqlite3_stmt *compiledStatement;
        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)    {
            sqlite3_bind_text(compiledStatement, 1, [txtUserName.text UTF8String], -1, SQLITE_TRANSIENT);
            sqlite3_bind_text(compiledStatement, 2, [txtPassword.text UTF8String], -1, SQLITE_TRANSIENT);
            //NSString *loginname= [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
            //          NSString *loginPassword = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];




        }
        if(sqlite3_step(compiledStatement) != SQLITE_ROW ) {
            NSLog( @"Save Error: %s", sqlite3_errmsg(database) );
            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"User is not valid" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            [alert release];
            alert = nil;


        }
        else {

            isUserValid = YES;
            if (isUserValid) {
                UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"Valid User" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
                [alert show];
                [alert release];

            }       
        }

        sqlite3_finalize(compiledStatement);
    }
    sqlite3_close(database);        
}












-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{   
    [webData setLength: 0]; 
} 

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{         
    [webData appendData:data]; 

} 

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{     
    [connection release];  
    [webData release]; 

} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{      
    NSString *loginStatus = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@",loginStatus);  


    //this is to perfrom insert opertion on the userinformation table

    NSString *json_string = [[NSString alloc] initWithData:webData encoding:NSUTF8StringEncoding]; 

    NSDictionary *result = [json_string JSONValue];
    //here i am storing the tokenid 
    tokenapi = [result objectForKey:@"TokenID"];
    NSLog(@"this is token id:%@",tokenapi);
    //
    BOOL errortest = [[result objectForKey:@"isError"] boolValue];
    if(errortest == FALSE)
    {
     values = [result objectForKey:@"Result"];
        NSLog(@"Valid User");
    }
    else
    {
        NSLog(@"Invalid User");
    }

    NSMutableArray *results = [[NSMutableArray alloc] init];

     for (int index = 0; index<[values count]; index++) {
     NSMutableDictionary * value = [values objectAtIndex:index];
     Result * result = [[Result alloc] init];
//through this i get the userid
     result.UserID = [value objectForKey:@"UserId"];
     result.FirstName = [value objectForKey:@"FirstName"];
     result.Username =[value objectForKey:@"Username"];
     result.Email =[value objectForKey:@"Email"];
     result.ProfileImage =[value objectForKey:@"ProfileImage"];
     result.ThumbnailImage =[value objectForKey:@"ThumbnailImage"];
     result.DeviceInfoId =[value objectForKey:@"DeviceInfoId"];
     NSLog(@"%@",result.UserID);


     [results addObject:result];
     [result release]; 
     }



     for (int index = 0; index<[results count]; index++) {
     Result * result = [results objectAtIndex:index];
     //save the object variables to database here


     [self createEditableCopyOfDatabaseIfNeeded];

     NSString *filePath = [self getWritableDBPath];

     sqlite3 *database;
     if(sqlite3_open([filePath UTF8String], &database) == SQLITE_OK) {
     const char *sqlStatement = "insert into UserInformation(UserID,DeviceId,Username,Password,FirstName,Email) VALUES (?,?,?,?,?,?)";
     sqlite3_stmt *compiledStatement;
     if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK)    {
     //sqlite3_bind_text( compiledStatement, 1, [journeyid UTF8String],-1,SQLITE_TRANSIENT);
     sqlite3_bind_text( compiledStatement, 1, [result.UserID UTF8String],-1,SQLITE_TRANSIENT);
     sqlite3_bind_text(compiledStatement, 2, [result.DeviceInfoId UTF8String],-1,SQLITE_TRANSIENT);
     sqlite3_bind_text(compiledStatement, 3, [txtUserName.text UTF8String],-1,SQLITE_TRANSIENT);
     sqlite3_bind_text(compiledStatement, 4, [txtPassword.text UTF8String],-1,SQLITE_TRANSIENT);
     sqlite3_bind_text (compiledStatement, 5, [result.FirstName UTF8String],-1,SQLITE_TRANSIENT);
     sqlite3_bind_text (compiledStatement, 6, [result.Email UTF8String],-1,SQLITE_TRANSIENT);

     }
     if(sqlite3_step(compiledStatement) != SQLITE_DONE ) {
     NSLog( @"Save Error: %s", sqlite3_errmsg(database) );
     }
     else {
     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"Record added" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
     [alert show];
     [alert release];
     alert = nil;
     }

     sqlite3_finalize(compiledStatement);
     }
     sqlite3_close(database);   





     }

    [loginStatus release];           
    [connection release];  
    [webData release]; 
} 

-(IBAction)click:(id)sender
{

    [self sendRequest];
    //this is to select username and password from database.
    [self check];

}

for a particular user who logs in only his profile must be update by using tokenid and userid.Please help me in solving this problem.Thanks

© Stack Overflow or respective owner

Related posts about iphone

Related posts about objective-c