当前位置: 首页 > 知识库问答 >
问题:

如何使用Objective-C将JSON数据发送到PHP数据库?

宋瀚海
2023-03-14
<?php
        $db_host="someurl.com";
        $db_username="some_user"; 
        $db_pass="some_passwd";
        $db_name="some_db";

        $conn = mysql_connect($db_host, $db_username, $db_pass) or die ("Could not connect to 
                                                                        MySQL"); 

        mysql_select_db("$db_name") or die ("No database");

        // array for JSON response
        $json = $_SERVER['HTTP_JSON'];
        $data = json_decode($json);
        $some1_id = $data->some1_id;
        $imei = $data->imei;

        //does the imei exist?
        $result = mysql_query("SELECT * FROM usr_go WHERE imei = '".$imei."'"); 

        if (mysql_num_rows($result) == 0){
            if(isset($some1_id))
                $result = mysql_query("INSERT INTO usr_go(some1_id, imei) VALUES('".$some1_id."','".$imei."')");
        }
        else{
            if(isset($some1_id))
                $result = mysql_query("UPDATE usr_go SET some1_id = '".$some1_id."' WHERE imei = '". $imei ." AND some1_id IS NULL ");
        }

        mysql_close($conn);

        header('Content-type: application/json');
        $response = $result;
        echo json_encode($response);
?>

下面是我的代码:

NSDictionary *dict = @{@"some1_id" : [NSNumber numberWithInt:self.cellIndex]};

    NSError *error = nil;

    NSData *json = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];

    if (json)
    {
        NSURL *url = [NSURL URLWithString:@"someurl.com"];

        NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
        [req setHTTPMethod:@"POST"];
        [req setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
        [req setHTTPBody:json];

        NSURLResponse *res = nil;
        NSData *ret = [NSURLConnection sendSynchronousRequest:req returningResponse:&res error:&error];

        NSString *resString = [[NSString alloc] initWithData:ret encoding:NSUTF8StringEncoding];
        NSLog(@"response String: %@",resString);


        NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        NSLog(@"JSON Output: %@", jsonString);
    }
    else
    {
        NSLog(@"Unable to serialize the data %@: %@", dictionary, error);
    }

是不可能插入IMEI的事实,这就是为什么它不张贴,还是其他一些问题?

谢谢你的协助。

共有1个答案

商曦
2023-03-14

以下几点观察:

>

  • 您应该使用MSQLI接口,而不是不推荐使用的MySQL接口。

    您永远不应该接受输入并只在SQL语句中使用它。使用mysqli_real_escape_string或绑定值(如下所示)。这对于确保您不会受到SQL注入攻击至关重要。如果插入的值恰好包含保留字符,它还可以防止出现无辜的错误。

    您应该在web浏览器中测试PHP,或者使用Charles之类的设备测试PHP。在对客户机代码进行太多操作之前,请确保您恢复了预期的JSON。底线是,看看是否可以独立地测试客户端代码和服务器代码(或者一开始尽可能简单)。

    我不熟悉这个$_server['http_json'];构造。如果这对你有用,那太好了,但在我的服务器上不起作用。我以前做过fopenofphp://input,如下所示。

    例如,这是一个不同的数据库/表,但它可以说明PHP代码可能是什么样子:

    // read JSON input
    
    $handle = fopen("php://input", "rb");
    $raw_post_data = '';
    while (!feof($handle)) {
        $raw_post_data .= fread($handle, 8192);
    }
    fclose($handle);
    
    $request_data = json_decode($raw_post_data, true);
    
    // prepare header for reply
    
    header("Content-Type: application/json");
    
    // open database
    
    $mysqli = new mysqli($host, $userid, $password, $database);
    
    // check connection 
    
    if ($mysqli->connect_errno) {
        echo json_encode(array("success" => false, "message" => $mysqli->connect_error, "sqlerrno" => $mysqli->connect_errno));
        exit();
    }
    
    // perform the insert
    
    $sql = "INSERT INTO locations (message, device, longitude, latitude) VALUES (?, ?, ?, ?)";
    
    if ($stmt = $mysqli->prepare($sql)) {
        $stmt->bind_param("ssdd", $request_data["message"], $request_data["device"], $request_data["latitude"], $request_data["longitude"]);
    
        if (!$stmt->execute())
            $response = array("success" => false, "message" => $mysqli->error, "sqlerrno" => $mysqli->errno, "sqlstate" => $mysqli->sqlstate);
        else
            $response = array("success" => true);
    
        $stmt->close();
    } else {
        $response = array("success" => false, "message" => $mysqli->error, "sqlerrno" => $mysqli->errno, "sqlstate" => $mysqli->sqlstate);
    }
    
    $mysqli->close();
    
    echo json_encode($response);
    

    >

  • 最严重的问题是使用SendSynchronousRequest。改用SendAsynchronousRequest(或其他无数异步技术中的任何一种)。永远不要从主线程发出同步请求。

    解析响应时,resstring将包含原始JSON。我不知道您在构建JsonString时引用的JsonData变量是什么,但这看起来并不正确。

    如果要解析响应,应该是:

    NSError *parseError;
    NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];
    

  •  类似资料:
    • 问题内容: 我在将数据发送到在线数据库时遇到问题。当我检查数据库时,似乎什么都没有发布。我对收到的响应执行了NSLog,它为空。 这是.php: 但是,如果我将$ response硬编码为某个字符串值,而NSLog接收到的响应,它将接收适当的字符串值。 这是我的代码: 是不是无法插入IMEI(这就是为什么它不发布)或其他问题的事实? 谢谢你的协助。 问题答案: 一些观察: 您应该使用interfa

    • 问题内容: 如何将JSON数据从浏览器中的Javascript发送到服务器,并由PHP在其中进行解析? 问题答案: 我在这里获得了很多信息,所以我想发布我发现的解决方案。 问题: 从浏览器上的Javascript获取JSON数据到服务器,然后让PHP成功解析它。 环境: Windows上的浏览器(Firefox)中的Javascript。LAMP服务器作为远程服务器:Ubuntu上的PHP 5.3

    • 问题内容: 我发现了无数关于如何使用jQuery和Ajax从json文件中检索数据的教程,但是没有关于如何将 数据发布到json文件中的* 教程。 *。 如果有人可以向我展示或给我发送有关如何执行此操作的小脚本,那就太好了。我到处都在搜索如何执行此操作,但是没有运气。我见过有人这样做的例子,但他们似乎忘记了分享我没有看到的重要信息。我使用ajax检索数据json文件没有问题。如果有人可以告诉我我是

    • 我想连接到API,但我需要用post发送数据,但用JSON接收。 file_get_contents(url_here):打开流失败

    • 问题内容: 我目前正在尝试从Android应用程序向php服务器发送数据(两者均由我控制)。 应用程序中的表单上收集了很多数据,这些数据已写入数据库。所有这一切。 在我的主代码中,首先我创建一个JSONObject(在此示例中,我已在此处将其裁剪): 接下来,我将对象传递给发送对象,并接收响应: HTTPPoster类: 这将获得响应,但是服务器返回403-禁止响应。 我试过稍微更改doPost函

    • 问题内容: 我的jphp.php文件包含以下内容: 并且我的javascript文件包含以下内容: 我已经用php编码了数据数据..现在我想将这两个数据数组发送到javascript …我不知道要使用的正确命令。我对谷歌搜索感到困惑。 请帮忙 。 问题答案: 使用jQuery的简单特定示例: JavaScript页面: 在您的php中: