1

我一直在尝试通过 php 页面将 JSON 数据从 iOS 应用程序发送到 mySQL 数据库。出于某种原因,我的 POST 数据在 php 页面中不可用。

- (IBAction)jsonSet:(id)sender {   
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"firstvalue", @"firstkey", @"secondvalue", @"secondkey", nil];
    NSData *result =[NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];
    NSURL *url = [NSURL URLWithString:@"http://shred444.com/testpost.php"];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%d", jsonRequestData.length] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody:jsonRequestData];

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

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

我知道 php 页面被调用,并确认写入数据库,

我的 php 文件中的前几行获取 POST 数据

<?php
// Put parameters into local variables
$email = $_POST["firstkey"];
...

但由于某种原因,$email 也是一个空字符串。我感觉问题出在 iOS 代码中,因为我可以使用 APIkitchen.com 来测试我的页面并且我可以确认它有效(仅当我排除 Content-type 和 Content-Length 字段时)

4

5 回答 5

2

PHP 不会将 JSON POST 正文解码为 $_POST 数组(因此您不能使用$email = $_POST["firstkey"];)。您需要将传入数据提取到数组(或对象)。PHP文件的代码行:

$jsonString = file_get_contents('php://input');
$jsonArray = json_decode($json_string, true);

$jsonArray 将代表您发送的 JSON 结构。

于 2012-12-14T21:40:01.740 回答
1

似乎有效的是:

$handle = fopen('php://input','r');
$jsonInput = fgets($handle);
// Decoding JSON into an Array
$decoded = json_decode($jsonInput,true);
于 2012-12-15T06:30:51.623 回答
1

瓦莱拉的回答中有一个小错字

$jsonString = file_get_contents('php://input');
$jsonArray = json_decode($jsonString, true);

$email = $jsonArray('firstkey');
于 2013-06-03T10:15:36.267 回答
1

这对我有用:

$jsonString = file_get_contents('php://input');
$jsonArray = json_decode($jsonString, true);

// with [] instead of ()
$email = $jsonArray['firstkey']; 
于 2013-07-23T10:12:36.760 回答
0
<?php

$handle = fopen('php://input','r');
$jsonInput = fgets($handle);
$decoded = json_decode($jsonInput,true);
print_r($decoded['firstkey']);

?>
于 2015-09-19T04:54:45.523 回答