gpt4 book ai didi

php - 从 iOS 使用 POST 将数组传递给 PHP

转载 作者:可可西里 更新时间:2023-11-01 03:29:40 26 4
gpt4 key购买 nike

所以我查看了无数类似的问题,但没有一个回答了我正在寻找的问题或以完整的方式回答了问题,所以希望大家能帮助我。

我需要使用 POST 或任何可以正常工作的方式将一组 restaurantID 从 iOS 传递到 PHP 文件。我知道 ASIHTTPRequest 但我正在寻找内置的东西,它已被开发人员放弃。最后,我不想通过 URL 传递它们,因为我不知道会有多少条目。

这就是我到目前为止所得到的。

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:theURL]];

[request setHTTPMethod:@"POST"];

NSMutableDictionary *jsonDict = [[NSMutableDictionary alloc] init];
[jsonDict setValue:restaurants forKey:@"restIDs"];
NSLog(@"JSON Dict: %@",jsonDict);//Checking my array here


NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:kNilOptions error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"JSON String: %@",jsonString); //Checking my jsonString here...

[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

[request setValue:@"json" forHTTPHeaderField:@"Data-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [jsonData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: jsonData];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSLog(@"Return DATA contains: %@", [NSJSONSerialization JSONObjectWithData:returnData options:NSJSONReadingMutableContainers error:nil]);
NSArray *restMenuCount = [NSJSONSerialization JSONObjectWithData:returnData options:NSJSONReadingMutableContainers error:nil];

因此,从这一点来看,我检查了所有内容,一切看起来都不错,但从 PHP 端来看,它甚至没有接受。

这是我的 PHP 文件的样子:

$restIDs = $_POST['restIDs'];
echo $restIDs; //Checking to see if it even has anything......but nothing there
for ($i = 0; $i < $restIDs.count; $i++) {
$query = "SELECT * FROM `MenuItems` WHERE rest_id = '$restID'";
$result = mysqli_query($connect, $query);
$number = mysqli_num_rows($result);
$menuNumber[$i] = $number;
}

echo json_encode($menuNumber);

最后,我做错了什么?为什么我的 PHP 端没有收到任何东西。最重要的是,有人可以向我解释如何通过 POST 发送数组。因为我觉得这是我真正的问题,所以我对它的了解还不足以自己解决问题。我不明白如何将所有内容从 iOS 端放入并在 PHP 端获取。

我希望所有这些都足够清楚,提前致谢。

编辑:
我尝试通过 URL 将数组作为字符串传递然后分解它,幸运的是它起作用了……但我刚好在 URL 限制之下,所以我仍然想找出另一种解决方案。至少,现在我知道我的其余代码按预期工作。

最佳答案

您似乎对$_POST 变量的填充方式存在基本误解。将文档类型指定为JSON 并将JSON 字符串作为post body 将不会自动填充此数组.正文必须采用特定格式。通常,这意味着 url 编码对,例如 a=1&b=2&c=2&d=%2fg+y 等。这在某种程度上限制了您可以发送的数据类型。特别是,如果您希望它自动显示在 $_POST 变量中,则从这个意义上说,任意 JSON 对象是不可能的。这里有几个选项:

选项一:不使用 $_POST,而是直接使用帖子正文。使用 fopen("php://input") 并使用 PHP JSON 解析器解析它:

$input = file_get_contents("php://input");
$obj = json_decode($input,true);
$restIDs = $obj['restIDs'];

如果你走这条路,你不需要创建一个带有名为 restIDs 的字段的对象。您可以改为简单地序列化数组并将 $obj 用作 $restIDs

选项二,假设您在 restID 中的对象只是字符串,而不是将数据作为 JSON 对象传递,按照 PHP 使用的目的格式化正文:

NSMutableString *bodyStr = [NSMutableString string];
for (NSString *restID in restaurants) {
[bodyStr appendFormat:@"restIDs[]=%@&",[restID stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}
NSData *body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody: body];

现在您应该能够像您期望的那样使用 $_POST['restIDs'] 访问它。

关于php - 从 iOS 使用 POST 将数组传递给 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13676893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com