12204


iOSから2個の文字列をデータベース(MySQL)に保存したいと思っておりまして、  
AFNetworkingを使って、JSON形式でphpにPOST送信するプログラムをテスト中です。  
今回は以下のJSONデータをiOSからphpに送りたいと考えています。

・JSON

[code]

    {
      “name” : “yamada”,
      “content” : “hello”
    }
    
[/code]

・iOSプログラム

[code]

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    NSDictionary *params = @{@"name":@"yamada",
                             @"content":@"hello"};
    
    NSString *url = @"http://kokun.sakura.ne.jp/test/test.php";
    [manager POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
        NSString *responseStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"%@",responseStr);
    }failure:^(AFHTTPRequestOperation *operation, NSError *error){
        NSLog(@"Error: %@", error);
    }];
    
[/code]

・phpプログラム

[code]

    <?php
    
    header('Content-Type: application/json'); 
    $post = file_get_contents('php://input');
    $postDecode = json_decode($post);
    
    // テキストファイルにログを出力
    ob_start();
    var_dump($postDecode);
    $result =ob_get_contents();
    ob_end_clean();
    $fp = fopen("./dump.txt", "a+" );
    fputs($fp, $result);
    fclose( $fp );
    
    ?>
    
[/code]

php側で受け取ったデータ(変数$post)を表示してみると

**string(25) "content=hello &name=yamada"**

という文字列が表示され、一見成功しているように思いましたが、  
これをjson_decodeしてみた値(変数$postDecode)を表示してみると  
値がNULLになってしまいます。  
詳しい方、ご教示いただければ幸いです。

【追記】  
アドバイスをいただけたおかげで、  
下記コードで無事解決しました。

・phpプログラム(修正後)

[code]

    <?php
    
    $name = $_POST['name'];　　　　// yamadaが表示される
    $content = $_POST['content']; // helloが表示される。
    
    ?>
    
[/code]


CC BY-SA 3.0
2015-07-09T08:50:43.613
12201
2015-07-09T11:25:15.620
2015-07-09T11:25:15.620
7699
7699
question
php objective-c json
AFNetworkingを用いてphpにPOST送信をしたが、 json_decodeの値がNULLになる。


ファイル選択を含まないフォームのPOSTは JSON ではなく、 application/x-www-form-urlencoded
という形式を使うことが一般的です。

[パーセントエンコーディング -
Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0#application.2Fx-
www-form-urlencoded)

今回の場合もこの形式で送信されているように見えます。

PHPの場合、これは自動的にデコードされて `$_POST` に入っています。連想配列になっているので、 `$_POST['content']`
といった形でもアクセスできます。

もし JSON 形式で送りたいということでしたら、 AFJSONRequestSerializer を使うとできそうです。

[ド定番OSS！AFNetworking 2.xの使い方 ｜
Developers.IO](http://dev.classmethod.jp/smartphone/iphone/ios-afnetworking2/)


CC BY-SA 3.0
2015-07-09T09:21:59.837
12204
2015-07-09T09:21:59.837
8000
12201
answer