IOS / PHP:写入服务器数据库后在应用程序中捕获成功消息

Posted

技术标签:

【中文标题】IOS / PHP:写入服务器数据库后在应用程序中捕获成功消息【英文标题】:IOS/PHP: Capture success message in app after writing to server database 【发布时间】:2015-11-01 14:14:24 【问题描述】:

在我的应用程序在 mysql 数据库中插入一条记录后,我想捕获新记录的 ID 并将其发送回应用程序以进行同步。

问题是如何有效地捕获它并将其发送回应用程序。

这是发布到服务器的代码。

-(void) postToServer: (NSString *) jsonString 
    NSURL *url = [NSURL URLWithString:@"http://www.~.com/services/new.php"];
    NSMutableURLRequest *rq = [NSMutableURLRequest requestWithURL:url];
    [rq setHTTPMethod:@"POST"];
    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
   // NSData *jsonData = [@" \"item\": \"hat\" " dataUsingEncoding:NSUTF8StringEncoding];
    [rq setHTTPBody:jsonData];

    [rq setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [rq setValue:[NSString stringWithFormat:@"%ld", (long)[jsonData length]] forHTTPHeaderField:@"Content-Length"];

    [NSURLConnection sendAsynchronousRequest:rq queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *rsp, NSData *data, NSError *err) 
        NSLog(@"POST sent!");
        NSLog(@"Error%@",err);
    ];

这是我设置为回显插入 id 的 php。

$newid = mysql_insert_id();
echo $newid;

但是,我怎样才能让这个网络服务将信息发送回应用程序?

感谢您的任何建议。

【问题讨论】:

【参考方案1】:

只需在您的 PHP 中回显 JSON 响应(错误/数据),然后您的 AsynchronousRequest 会将响应返回给您:

[NSURLConnection sendAsynchronousRequest:rq queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *rsp, NSData *data, NSError *err) 
    NSLog(@"POST sent!");
    if (err) 
        NSLog(@"Error%@",err);
     else 
        NSDictionary *jsonResults = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"Results: %@", jsonResults);
        // NSString *insertID = jsonResults[@"insert_id"];
    
];

PHP:

// Set the response type as JSON
header("Content-Type: application/json");

...
    if ($sqlResult) 
        // Return your insertID here
        $response = array("insert_id" => $sqlResult['insert_id']); // example
        exitWithResponse($response);
     else 
        exitWithHttpCode(400, "Bad Request"); // example
    
...

# Exit with response
function exitWithResponse($response) 
    $status = array('code' => '200', 'response' => $response, 'error' => NULL);
    echo json_encode($status);
    http_response_code(200);
    exit();


# Exit with error code
function exitWithHttpCode($code, $error) 
    $status = array('code' => $code, 'response' => NULL, 'error' => $error);
    echo json_encode($status);
    http_response_code($code);
    exit();

更多关于状态码:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

【讨论】:

jsonResults 正在注销 nil。我需要在服务器上对其进行 jsonencode 吗? 太棒了。那成功了。我猜这个函数只是使用完成块的响应? 是的,但最好向应用发送响应以处理数据或错误。

以上是关于IOS / PHP:写入服务器数据库后在应用程序中捕获成功消息的主要内容,如果未能解决你的问题,请参考以下文章

使用 Elastic Beanstalk 部署后在容器中运行命令

提交(POST)后在php生成的表单中保留选择

调用自定义PHP函数后在jquery Datatable中添加额外的列?

iOS与mysql数据库连接的安全性

内存警告后在 iOS 上运行 OpenGL 崩溃

PHP MySQL Yii - 数据库读取而不是写入