将JSON与xcode一起使用(从数据库返回用户信息)

时间:2014-09-13 06:57:01

标签: php ios json xcode

我正在尝试创建登录流程(目前正在运行),同时,我想"加载"用户统计信息(这些统计信息在我的数据库中)。我试图使用JSON,但我不是这种语言的专家,我需要一些帮助。

首先,我想知道我是否正确行事,因为它没有返回任何值(NULL)。您可以看到我的PHP文件,其中设置了JSON代码。

一切都好吗?如何使用JSON将值传递给xcode? 就像我说的,我需要一些帮助,因为我从未使用过JSON,而且我不确定我是否正确行事。

这是我的登录PHP文件:(当用户在" LOGIN"按钮上显示时,它会启动。

    <?php
header('Content-type: application/json');
if($_POST) {

    $DB_HostName = "localhost";
    $DB_Name = "db";
    $DB_User = "user";
    $DB_Pass = "pass";

    $userName = $_POST["username"];
    $password = $_POST["password"];

    $sql = "select * from user where userName = '$userName' and password = '$password';";
    $con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error());

    mysql_select_db($DB_Name,$con) or die(mysql_error());

    $res = mysql_query($sql,$con) or die(mysql_error());
    $res1 = mysql_num_rows($res);

    if ($res1>0)
    {
        //
        $query = mysql_query("select * from user where userName = '$userName' and password = '$password';");
        while ($row = mysql_fetch_array($query))
        {
            $id=$row['userID'];
        }
        $query2 = mysql_query("select * from user_stats where userID = '$id';");
        while ($row2 = mysql_fetch_array($query2))
        {
            $followers=$row2['followers'];
            $stars=$row2['stars'];
            $photos=$row2['photos'];
            $data=$followers.'-'.$stars.'-'.$photos;
        }
        //die(json_encode(array("message" => "Getting user information succeeded.", "status" => '"success":1', "data" => $data), JSON_PRETTY_PRINT));
        //
        echo '{"success":1,"data":'.$data.'}';
    }
    else
    {
        echo '{"success":0,"error_message":"Username and/or password is invalid.1"}';
    }
}
else
{
    echo '{"success":0,"error_message":"Username and/or password is invalid.2"}';
}

ViewController.m

- (IBAction)loginClicked:(id)sender {
@try {

    if([[_txtUsername text] isEqualToString:@""] || [[_txtPassword text] isEqualToString:@""] ) {
        [self alertStatus:@"Porfavor, introduce el usuario y contraseña" :@"Error"];
    } else {
        NSString *post =[[NSString alloc] initWithFormat:@"username=%@&password=%@",[_txtUsername text],[_txtPassword text]];
        NSLog(@"PostData: %@",post);

        NSURL *url=[NSURL URLWithString:@"http://autograpp.com/login.php"];

        NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

        NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];

        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
        [request setURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
        [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        [request setHTTPBody:postData];

        [NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];

        NSError *error = [[NSError alloc] init];
        NSHTTPURLResponse *response = nil;
        NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

        NSLog(@"Response code: %ld", (long)[response statusCode]);
        if ([response statusCode] >=200 && [response statusCode] <300)
        {
            NSString *responseData = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
            NSLog(@"Response ==> %@", responseData);

            SBJsonParser *jsonParser = [SBJsonParser new];
            NSDictionary *jsonData = (NSDictionary *) [jsonParser objectWithString:responseData error:nil];
            NSLog(@"%@",jsonData);
            NSInteger success = [(NSNumber *) [jsonData objectForKey:@"success"] integerValue];
            NSLog(@"%ld",(long)success);

            NSString *data = [(NSNumber *) [jsonData objectForKey:@"data"] stringValue];
            NSLog(@"%@",data);

            if(success == 1)
            {
                NSLog(@"Login SUCCESS");
                //[self alertStatus:@"Bienvenido a Autograpp." :@"Datos correctos"];
                [self performSegueWithIdentifier:@"Main" sender:self];

            } else {

                NSString *error_msg = (NSString *) [jsonData objectForKey:@"error_message"];
                [self alertStatus:error_msg :@"Datos incorrectos"];
            }
            /*
            NSString *jsonString = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
            NSData *JSONdata = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
            NSError *jsonError = nil;
            if (JSONdata != nil) {
                NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:JSONdata options:0 error:&jsonError];
                if (jsonError == nil) {
                    // Set your text fields here.
                    NSLog(@"%@",dic);
                }
            }
            */

        } else {
            if (error) NSLog(@"Error: %@", error);
            [self alertStatus:@"Ha ocurrido un problema inesperado" :@"Error"];
        }
    }
}
@catch (NSException * e) {
    NSLog(@"Exception: %@", e);
    [self alertStatus:@"Error." :@"Error"];
}

问题是:当我尝试从JSON读取值时,它们是NULL。我认为这是因为我不是使用JSON代码的专家,而且有些不对劲。

提前致谢。

1 个答案:

答案 0 :(得分:1)

做这样的事情

NSString *link = [NSString stringWithFormat:@"http://autograpp.com/login.php"];


    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:link]];
    [request setRequestMethod:@"POST"];
    [request addRequestHeader:@"Content-Type" value:@"application/json"];
    [request addRequestHeader:@"Accept" value:@"application/json"];

    [request setPostValue:[NSString stringWithFormat:@"%@",  _txtUsername.text] forKey:@"username"];
    [request setPostValue:[NSString stringWithFormat:@"%@",  _txtPassword.text] forKey:@"password"];


    [request startSynchronous];

    NSError *error = [request error];
    if (!error) {
        NSString *jsonString = [request responseString];
        if(kShowLog)
            NSLog(@"response: %@", jsonString);
        NSDictionary * returnDict = (NSDictionary *) [jsonString JSONValue];