Thursday 19 December 2013

xml parsing retrieve data with insert,update,delete from the mysql in iphone


AppDelegate.h

@property (strong, nonatomic) IBOutlet UIWindow *window;

@property (strong, nonatomic) IBOutlet UINavigationController *nav;

@property (nonatomic, retain) NSString *apiURL;

AppDelegate.m

@synthesize apiURL;
@synthesize nav;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    apiURL = @"http://FolderPath/XML/";
   
    self.window.rootViewController = nav;
   
    [self.window makeKeyAndVisible];
    return YES;
}

ViewController.h

@class  ip23AppDelegate,
        Student;

@interface ip23ViewController : UIViewController    <NSXMLParserDelegate,
                                                    UITableViewDataSource,
                                                    UITableViewDelegate>
{
    ip23AppDelegate *appDel;
   
    Student *aRecord;

    NSMutableString *recordsStr;
   
    NSMutableArray *recordsArr;
}

@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *processActView;

@property (nonatomic, retain) IBOutlet UITableView *recordsTblView;

@property (nonatomic, retain) IBOutlet UIBarButtonItem  *refreshBarBtn,
                                                        *addBarBtn;

- (IBAction)refreshBtnPressed:(id)sender;

- (IBAction)addBtnPressed:(id)sender;

@end

ViewController.m

#import "ViewController.h"
#import "AppDelegate.h"
#import "Student.h"
#import "MyFunctions.h"
#import "StudentCellViewController.h"

@implementation ip23ViewController

@synthesize processActView,
            recordsTblView;

@synthesize refreshBarBtn,
            addBarBtn;

- (IBAction)refreshBtnPressed:(id)sender
{
    [self initTableAndView];
}

- (IBAction)addBtnPressed:(id)sender
{
    Student *sObj = [[Student alloc] init];
    sObj.Name = @"Alex";
    sObj.Age = @"16";
    sObj.Perc = @"90.16";
   
    NSOperationQueue *queue = [NSOperationQueue new];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(addRecordRequest:) object:sObj];
    [queue addOperation:operation];
}


- (void)viewDidLoad
{
    [super viewDidLoad];
   
    self.navigationItem.leftBarButtonItem = refreshBarBtn;
    self.navigationItem.rightBarButtonItem = addBarBtn;   

    appDel = (ip23AppDelegate *)[[UIApplication sharedApplication] delegate];
   
    [self initTableAndView];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Add

- (void)addRecordResponse:(NSString *)response
{   
    if([response isEqualToString:@"OK"])
    {
        [[[UIAlertView alloc] initWithTitle:@"Success!"
                                    message:@"Record added successfully."
                                   delegate:self
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil] show];
       
        [self initTableAndView];
    }
    else if([response isEqualToString:@"INVALID PARAMETER"])
    {
        [[[UIAlertView alloc] initWithTitle:@"Warning!"
                                    message:@"Record is not added.\nPlease varify your data."
                                   delegate:self
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil] show];
    }
    else
    {       
        [[[UIAlertView alloc] initWithTitle:@"Warning!"
                                    message:@"Something went wrong.\nPlease try again later."
                                   delegate:self
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil] show];
    }
}

- (void)addRecordRequest:(Student *)sObj
{
    NSString *boundary = @"---------------------------14737809831466499882746641449";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
    NSMutableData *body = [NSMutableData data];
   
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"Name\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[sObj.Name dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
       
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"Age\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[sObj.Age dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
   
   
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"Perc\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[sObj.Perc dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
   
   
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"action\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"add" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
   
    // close form
    [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
   
    NSString *urlString = [NSString stringWithFormat:@"%@/student.php", appDel.apiURL];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];
    [request addValue:contentType forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:body];
   
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
   
    [self performSelectorOnMainThread:@selector(addRecordResponse:) withObject:returnString waitUntilDone:NO];
}

#pragma mark - Delete

- (void)deleteRecordResponse:(NSString *)response
{
    if([response isEqualToString:@"OK"])
    {
        //Action
    }
    else
    {
        [[[UIAlertView alloc] initWithTitle:@"Warning!"
                                    message:@"Something went wrong.\nPlease try again later."
                                   delegate:self
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil] show];
        
        [self initTableAndView];
    }
   
    //NSLog(@"%@", response);
}

- (void)deleteRecordRequest:(Student *)sObj
{
    NSString *post =[NSString stringWithFormat:@"action=delete&StudentId=%@", sObj.StudentId];
   
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
   
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/student.php", appDel.apiURL]]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];
   
    NSURLResponse *response;
    NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
    NSString *resp = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
   
    [self performSelectorOnMainThread:@selector(deleteRecordResponse:) withObject:resp waitUntilDone:NO];
}

#pragma mark - XML Parse

- (void)initTableAndView
{
    recordsTblView.userInteractionEnabled = NO;
   
    processActView.hidden = NO;
   
    recordsArr = [[NSMutableArray alloc] init];
   
    NSOperationQueue *queue = [NSOperationQueue new];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(getApiData) object:nil];
    [queue addOperation:operation];
}

- (void)loadDataInTable
{
    recordsTblView.userInteractionEnabled = YES;   
   
    processActView.hidden = YES;
   
    [recordsTblView reloadData];
}

- (void)getApiData
{  
    NSString *myApiLink = [NSString stringWithFormat:@"%@student.php?action=list",
                           appDel.apiURL];
   
    //NSLog(@"%@", myApiLink);
    NSURL *url = [[NSURL alloc] initWithString:myApiLink];
   
    NSXMLParser *xParse = [[NSXMLParser alloc] initWithContentsOfURL:url];
           
            [xParse setDelegate:self];
   
    [xParse parse];
   
   
    [self performSelectorOnMainThread:@selector(loadDataInTable) withObject:nil waitUntilDone:NO];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{  
    if([elementName isEqualToString:@"Student"])
    {
        aRecord = [[Student alloc] init];
            }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if(!recordsStr)
            recordsStr = [[NSMutableString alloc] initWithString:string];
            else
            [recordsStr appendString:string];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if([elementName isEqualToString:@"Students"])
    {
                        return;
            }
            else if([elementName isEqualToString:@"Student"])
    {
                        [recordsArr addObject:aRecord];
       
                        aRecord = nil;
    }
            else
    {
        if([elementName isEqualToString:@"StudentId"] ||
           [elementName isEqualToString:@"Name"] ||
           [elementName isEqualToString:@"Age"] ||
           [elementName isEqualToString:@"Perc"])
        {
            [aRecord setValue:recordsStr forKey:elementName];
        }
            }
   
    recordsStr = nil;
}

#pragma mark - Table Methods


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 100;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return recordsArr.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
   
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   
    Student *sObj = [recordsArr objectAtIndex:indexPath.row];   
   
    StudentCellViewController *studentCellVC = [[StudentCellViewController alloc] init];
    studentCellVC.studentObj = sObj;
   
    [cell.contentView addSubview:studentCellVC.view];
   
    return cell;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    Student *sObj = [recordsArr objectAtIndex:indexPath.row];
   
    NSOperationQueue *queue = [NSOperationQueue new];
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(deleteRecordRequest:) object:sObj];
    [queue addOperation:operation];
   
    [recordsArr removeObjectAtIndex:indexPath.row];
   
    [recordsTblView beginUpdates];
    [recordsTblView deleteRowsAtIndexPaths:[[NSArray alloc] initWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationMiddle];
    [recordsTblView endUpdates];
}

@end

MyFunctions.h

+ (NSString *)trim:(NSString *)stringToTrim;

MyFunctions.m

+ (NSString *)trim:(NSString *)stringToTrim
{
            return [stringToTrim stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

Student.h


@property (nonatomic, retain) NSString  *StudentId,
                                        *Name,
                                        *Age,
                                        *Perc;

Student.m

@synthesize StudentId,
            Name,
            Age,
            Perc;

StudentCellViewController.h

@property (nonatomic, retain) IBOutlet UILabel  *NameLbl,
                                                *AgeLbl,
                                                *PercLbl;

@property (nonatomic, retain) Student *studentObj;
@class Student;

StudentCellViewController.m

#import "StudentCellViewController.h"
#import "Student.h"
#import "MyFunctions.h"

@implementation StudentCellViewController

@synthesize NameLbl,
            AgeLbl,
            PercLbl;

@synthesize studentObj;
- (void)viewDidLoad
{
    [super viewDidLoad];
   
    NameLbl.text = [MyFunctions trim:studentObj.Name];
    AgeLbl.text = [NSString stringWithFormat:@"%@yr", [MyFunctions trim:studentObj.Age]];
    PercLbl.text = [NSString stringWithFormat:@"%@%%", [MyFunctions trim:studentObj.Perc]];
}

API

API Links

Read:
            http://Folderpath/XML/student.php?action=list

Add:
            http:// Folderpath /XML/student.php?action=add&Name=Alex&Age=16&Perc=90

Edit:
            http:// Folderpath /XML/student.php?action=edit&Name=Alex&Age=16&Perc=90.86&StudentId=3

Delete:
http:// Folderpath /XML/student.php?action=delete&StudentId=3

student-list.php

<?php
            header ("content-type: text/xml");
           
            sleep(3);
           
            echo '<?xml version="1.0" encoding="UTF-8"?>
            <Students>
                        <Student>
                                    <Name>Alan</Name>
                                    <Age>18</Age>
                                    <Perc>88.90</Perc>
                        </Student>
                        <Student>
                                    <Name>Bob</Name>
                                    <Age>20</Age>
                                    <Perc>85.60</Perc>
                        </Student>
                        <Student>
                                    <Name>Alex</Name>
                                    <Age>16</Age>
                                    <Perc>90.16</Perc>
                        </Student>     
            </Students>';
?>

student-list.xml

<?xml version="1.0" encoding="UTF-8"?>
<Students>
            <Student>
                        <Name>Alan</Name>
                        <Age>18</Age>
                        <Perc>88.90</Perc>
            </Student>
            <Student>
                        <Name>Bob</Name>
                        <Age>20</Age>
                        <Perc>85.60</Perc>
            </Student>
            <Student>
                        <Name>Alex</Name>
                        <Age>16</Age>
                        <Perc>90.16</Perc>
            </Student>     
</Students>

Student.php


<?php
            $DB_Host = "localhost";
            $DB_Name = "test_ios_trainees";
            $DB_Username = "root";
            $DB_Password = "root123";
           
            $WEBSITE_URL = "http://FolderPath/XML/";
           
            $con = mysql_connect($DB_Host, $DB_Username, $DB_Password) or die(mysql_errno());
            $db = mysql_select_db($DB_Name, $con) or die(mysql_error());
           
            $action = ( isset($_REQUEST["action"]) && trim($_REQUEST["action"]) != "" ) ? trim($_REQUEST["action"]) : "";
           
            $xmlHeader = '<?xml version="1.0" encoding="UTF-8"?>';
           
            if($action == "list")
            {
                        header ("content-type: text/xml");
                       
                        $xml = $xmlHeader;
                        $xml .= '<Students>';
           
                        $sqry = "SELECT * FROM students ORDER BY Name ASC";
                        $sres = mysql_query($sqry) or die("can not select form students - ".mysql_error());
                        while($srow = mysql_fetch_array($sres))
                        {
                                    $xml .= '<Student>';                          
                                                $xml .= '<StudentId>'.trim($srow["StudentId"]).'</StudentId>';
                                                $xml .= '<Name>'.trim($srow["Name"]).'</Name>';
                                                $xml .= '<Age>'.trim($srow["Age"]).'</Age>';
                                                $xml .= '<Perc>'.trim($srow["Perc"]).'</Perc>';
                                    $xml .= '</Student>';
                        }
                        mysql_free_result($sres);
                       
                        $xml .= '</Students>';
           
                        echo $xml;
                        exit;
            }
            else if($action == "add")
            {
                        if(        isset($_REQUEST["Name"]) && trim($_REQUEST["Name"]) != "" &&
                                    isset($_REQUEST["Age"]) && trim($_REQUEST["Age"]) != "" &&
                                    isset($_REQUEST["Perc"]) && trim($_REQUEST["Perc"]) != "")
                        {
                                    $iqry = "INSERT INTO students SET
                                                                                                                                    Name = '".trim($_REQUEST["Name"])."',
                                                                                                                                    Age = '".(int)trim($_REQUEST["Age"])."',
                                                                                                                                    Perc = '".(float)trim($_REQUEST["Perc"])."'";
                                                                                                                                                           
                                    mysql_query($iqry) or die("can not insert into students - ".mysql_error());              
                                   
                                    echo "OK";
                                    exit;                                                    
                        }
                        else
                        {
                                    echo "INVALID PARAMETER";
                                    exit;
                        }
            }
            else if($action == "edit")
            {
                        if(        isset($_REQUEST["StudentId"]) && trim($_REQUEST["StudentId"]) != "" &&
                                    isset($_REQUEST["Name"]) && trim($_REQUEST["Name"]) != "" &&
                                    isset($_REQUEST["Age"]) && trim($_REQUEST["Age"]) != "" &&
                                    isset($_REQUEST["Perc"]) && trim($_REQUEST["Perc"]) != "")
                        {
                                    $iqry = "UPDATE students SET
                                                                                                                        Name = '".trim($_REQUEST["Name"])."',
                                                                                                                        Age = '".(int)trim($_REQUEST["Age"])."',
                                                                                                                        Perc = '".(float)trim($_REQUEST["Perc"])."'
                                                                                                            WHERE StudentId = '".trim($_REQUEST["StudentId"])."'";
                                                                                                                                                           
                                    mysql_query($iqry) or die("can not update students - ".mysql_error());                                                                               
                                   
                                    echo "OK";
                                    exit;
                        }
                        else
                        {
                                    echo "INVALID PARAMETER";
                                    exit;
                        }
            }
            else if($action == "delete")
            {
                        if(        isset($_REQUEST["StudentId"]) && trim($_REQUEST["StudentId"]) != "")
                        {
                                    $iqry = "DELETE FROM students WHERE StudentId = '".trim($_REQUEST["StudentId"])."'";                                                                                                                                                         
                                    mysql_query($iqry) or die("can not delete from students - ".mysql_error());            
                                   
                                    echo "OK";
                                    exit;                                                    
                        }                     
                        else
                        {
                                    echo "INVALID PARAMETER";
                                    exit;
                        }
            }
            else
            {
                        echo "Nothing is here for you!";
                        exit;
            }
?>        

No comments:

Post a Comment

Comment