2014-09-13 93 views
0

我试图创建登录过程(目前正在工作),同时我想“加载”用户统计信息(这些统计信息是在我的数据库中)。我试图使用JSON,但我不是这种语言的专家,我需要一些帮助。对xcode使用JSON(从数据库返回用户信息)

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

一切正常吗?我如何将使用JSON的值传递给xcode? 就像我说的,我需要一些帮助,因为我从来没有使用过JSON,我不确定我是否正确地做这件事。

这是我的登录PHP文件:(当用户在“登录”按钮上点击时启动)。

<?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"]; 
} 

的问题是:当我试图从他们的NULL JSON读出值。我认为这是因为我不是使用JSON代码的专家,并且出现了问题。

在此先感谢。

+0

你有什么问题? – NullData 2014-09-13 07:21:15

+0

问题是:当我尝试从JSON读取值时,它们是NULL。我认为这是因为我不是使用JSON代码的专家,并且出现了问题。你可以帮我吗?谢谢N.A – WirajPS 2014-09-13 07:23:10

+0

在post方法中你看不到响应 – NullData 2014-09-13 07:29:36

回答

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]; 
+0

我试过了你的代码,但是我有很多错误。 “使用未申报的标识符*请求”。感谢N.A.还有另一个问题:我的PHP(JSON代码)是否正确? – WirajPS 2014-09-13 07:35:21

+0

你必须根据你的修改..和JSON你不能在浏览器中检查响应。如果你想看到你的json对POST是正确的。你可以看到json视图的chrome插件 – NullData 2014-09-13 07:37:15

+0

再次感谢N.A.你说我必须根据我的项目更改代码,但我有点失落。什么是ASIFormDataRequest?你能帮我完成我的项目吗?因为我不确定是否正确返回了JSON,而且我不知道如何从xcode读取valúes。谢谢。 – WirajPS 2014-09-13 07:39:41

相关问题