I am creating an application which first checks whether the user is valid or not by checking data from an SQLite database. I have created a table named loginchk in the database with three rows and two columns in it, uname and pass.
When I run the application and enter the username and password values in my text fields, it checks if the username and password are in the database. If they are not, it will present an alert view that says “Please enter correct username”.
In my code there is a problem: it reads only the first row, i.e., when I enter the username and password values that are in the first row it succeeds, and all the other values that I enter do not work.
What could be the problem?
Thanks.
#import "loginAppDelegate.h"
#import "global.h"
#import <sqlite3.h>
#import "logincontroller.h"
@implementation loginAppDelegate
@synthesize window;
@synthesize loginView;
//databaseName=@"login.sqlite";
-(void) chekAndCreateDatabase
{
BOOL success;
//sqlite3 *databaseName=@"login.sqlite";
NSFileManager *fileManager=[NSFileManager defaultManager];
NSArray *documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir =[documentPaths objectAtIndex:0];
NSString *databasePath=[documentsDir stringByAppendingPathComponent"login.sqlite"]; success=[fileManager fileExistsAtPathatabasePath];
if(success)return;
NSString *databasePathFromApp=[[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent"login.sqlite"];
[fileManager copyItemAtPathatabasePathFromApp toPathatabasePath error:nil]; [fileManager release];
}
-(void) Data
{
Gpass=@"";
Guname=@"";
sqlite3_stmt *detailStmt=nil;
//sqlite3 *databaseName;
NSArray *documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir =[documentPaths objectAtIndex:0];
NSString *databasePath=[documentsDir stringByAppendingPathComponent{angry_smile}"login.sqlite"];
[self chekAndCreateDatabase];
sqlite3 *database;
if (sqlite3_open([databasePath UTF8String],&database)==SQLITE_OK)
{
if (detailStmt==nil)
{
const char *sql= "select *from Loginchk"; //where uname='%?'and password='%?'"; //NSString *sql = [[NSString alloc] initWithFormat{angry_smile}"SELECT * FROM Loginchk WHERE uname ='%@' and password ='%@' ",Uname.text,Password.text];
if (sqlite3_prepare_v2(database,sql,-1,&detailStmt,NULL)==SQLITE_OK)
{
sqlite3_bind_text(detailStmt,1,[Gunameq UTF8String],-1,SQLITE_TRANSIENT);
sqlite3_bind_text(detailStmt,2,[Gpassq UTF8String],-1,SQLITE_TRANSIENT);
if (SQLITE_DONE!= sqlite3_step(detailStmt))
{
Guname=[NSString stringWithUTF8Stringchar*)sqlite3_column_text(detailStmt,0)];
Gpass =[NSString stringWithUTF8Stringchar*)sqlite3_column_text(detailStmt,1)];
NSLog(@"'%@'",Guname);
NSLog(@"'%@'",Gpass); }
} sqlite3_finalize(detailStmt);
}
} sqlite3_close(database);
}
This my login controller; here I am calling my app delegate’s function data:
-(IBAction)buttonPressed:(id)sender
{
Gpassq=Password.text;
Gunameq=Uname.text;
NSLog(@"%@%@",Gunameq,Gpassq);
loginAppDelegate *appDelegate =(loginAppDelegate *)[[UIApplication sharedApplication]delegate];
[appDelegate Data];
if ([Uname.text isEqualToString:Guname]&&[Password.text isEqualToString:Gpass])
{
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"Success" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
else
{
UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"UIAlertView" message:@"PleaseEnterCorrectUserName and password" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
change
with
Update 1
use this code –