我正在尝试创建登录流程(目前正在运行),同时,我想"加载"用户统计信息(这些统计信息在我的数据库中)。我试图使用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代码的专家,而且有些不对劲。
提前致谢。
答案 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];