1

就像标题说的那样。。

我的 NSDictionary initWithObjectsAndKeys for JSON,使用 POST 方法,通过 PHP 代码进行 MySQL 查询,通过使用 json_encoding 和 json_decoding 在我的 SQL 数据库中创建空数据,只是 ID int 每次我发布时都会自动增加!

我的 Xcode 代码:

-(IBAction)setJsonFromData:(id)sender
{
    NSDictionary *jsonDict = [[NSDictionary alloc] initWithObjectsAndKeys: @"Welcome", @"title", @"Hello", @"article", @"123456789", @"timestamp", nil];

    if([NSJSONSerialization isValidJSONObject:jsonDict])
        {
           NSError *error = nil;
           NSData *result = [NSJSONSerialization dataWithJSONObject:jsonDict     options:NSJSONWritingPrettyPrinted error:&error];
           if (error == nil && result != nil) {
           [self postJSONtoURL:result];
        }
    }
}

-(id)postJSONtoURL:(NSData *)requestJSONdata
{
    NSURL *url = [NSURL URLWithString:@"http://test.com/json.php"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%d", [requestJSONdata length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody: requestJSONdata];

    NSURLResponse *response = nil;
    NSError *error = nil;

    NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    NSLog(@"RESULT: %@", requestJSONdata);

    if (error == nil)
        return result;
    return nil;
}

我的PHP代码:

if (isset($_REQUEST))
{
    $json = $_REQUEST;
    $data = json_decode($json);

    $title = $_REQUEST['title'];
    $article = $_REQUEST['article'];
    $timestamp = $_REQUEST['timestamp'];

    mysql_query("INSERT INTO news (title, article, timestamp) VALUES ('$title->title','$article->article','$timestamp->timestamp')");
}

mysql_close();  
4

2 回答 2

1

由于您执行 POST 请求,因此您在 http 正文中收到了 json 有效负载。
因此,您需要对其进行解码:

$http_body = file_get_contents('php://input');
$data = json_decode($http_body);

之后,您应该能够访问以下数据:

$data->title

PHP 不会自动解码传入的 json 数据。

请参阅有关该内容的文档php://input

于 2012-11-07T19:51:39.430 回答
0

你的问题是你没有得到任何数据到你的 php 文件。

当你做一个发布请求时,你需要做

$whatevervar = $_POST['NAME-OF-POST-VARIABLE-FROM-CLIENT'] 这就是您在数据库中发布空内容的原因。当您发布到您的数据库时,不要直接将帖子变量放在那里,首先清理并剥离帖子,然后将第二个 var 放入您的数据库中。您还需要回复回电以了解您的查询发生了什么。

于 2012-11-07T19:59:26.540 回答