2016-08-23 18 views
0

ソフトウェアがコンストラクタを使用して初期化し、ソフトウェアのコンソールに結果を表示しているときJSONデータをobjective-Cで送信しているソフトウェアがあります:JSONデータがobjective-Cからmysqlデータベースに挿入されていない

- (id)initWithAPIManager:(id)apiManager 
{ 
_apiManager = apiManager; 

NSString *strURL = @"http://mysite/DBTest.php"; 
NSLog(@"URL:\t%@", strURL); 
NSURL *url = [NSURL URLWithString:strURL]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
if (request != nil) { 
    NSString *jsonData = [NSString stringWithFormat:@"{\"IP\":\"%@\",\"Date\":\"%@\"}", 
          [self GetIP], 
          [self GetDate]]; 

    NSData *requestData = [NSData dataWithBytes:[jsonData UTF8String] 
             length:[jsonData lengthOfBytesUsingEncoding:NSUTF8StringEncoding]]; 

    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[requestData length]] forHTTPHeaderField:@"Content-Length"]; 
    [request setHTTPBody:requestData]; 
    NSLog(@"will create connection"); 

    // Send a synchronous request 
    NSURLResponse * response = nil; 
    NSError * NSURLRequestError = nil; 
    //- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error)) 
    //[NSURLConnection dataTaskWithRequest:] 
    NSData * responseData = [NSURLConnection sendSynchronousRequest:request 
                returningResponse:&response 
                   error:&NSURLRequestError]; 
    if (responseData != nil) { 
     NSLog(@"responseData is valid."); 

     NSString *myString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
     NSLog(@"myString:\t%@", myString); 
    } else { 
     NSLog(@"responseData is nil!"); 
    } 
} else { // uh oh 
    NSLog(@"Error creating the URL request!"); 
} 

//NSLog(@"IP address:\t%@", [self getIP]); 
OldIPGettingThingy(); 


return self; 
} 

ローカルのJSONファイルを使用すると正しく動作するPHPスクリプトがありますが、php:// inputを使用して切り替えると、var_dumpにNULLと言われ、データベースに何も挿入されません。前もって感謝します。

<?php 


$con = new PDO('mysql:host=localhost;dbname=pirates','root','password'); 

//$raw_data = file_get_contents('php://input'); 
$raw_data = file_get_contents('tes.json'); 

$data = json_decode($raw_data, true); 

var_dump($data); 

$stmt = $con->prepare("INSERT INTO Tracking values(?,?,?)"); 

foreach ($data as $row){ 

    $stmt->bindParam(1, $row['id']); 
    $stmt->bindParam(2, $row['IP Address']); 
    $stmt->bindParam(3, $row['timestamp']); 
    $stmt->execute(); 

    } 

echo "got here"; 


?> 
+1

* *自分でJSONを構築しないでください。 JSONシリアライザを使用して、辞書やその他の複雑なオブジェクトをフィードします。これは、将来あなたが頭痛の多くを保存します。 – jcaron

答えて

0

私は問題はObjective-Cのコードとあった考え出したと私は代わりに、文字列形式の辞書を使用するために必要な:

- (id)initWithAPIManager:(id)apiManager 
{ 
_apiManager = apiManager; 


NSString *strURL = @"http://myip/DBTest.php"; 
NSLog(@"URL:\t%@", strURL); 
NSURL *url = [NSURL URLWithString:strURL]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
if (request != nil) { 
    NSDictionary *dict = @{ @"IP" : [self GetIP], 
          @"Date" : [self GetDate]}; 


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

    NSString *jsonData = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 

    NSData *requestData = [NSData dataWithBytes:[jsonData UTF8String] 
             length:[jsonData lengthOfBytesUsingEncoding:NSASCIIStringEncoding]]; 

    [request setHTTPMethod:@"POST"]; 
    //[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[requestData length]] forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:requestData]; 
    NSLog(@"will create connection"); 

    // Send a synchronous request 
    NSURLResponse * response = nil; 
    NSError * NSURLRequestError = nil; 

    NSData * responseData = [NSURLConnection sendSynchronousRequest:request 
                returningResponse:&response 
                   error:&NSURLRequestError]; 
    if (responseData != nil) { 
     NSLog(@"responseData is valid."); 

     NSString *myString = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding]; 
     NSLog(@"myString:\t%@", myString); 
    } else { 
     NSLog(@"responseData is nil!"); 
    } 
} else { // uh oh 
    NSLog(@"Error creating the URL request!"); 
} 

return self; 
} 

そして、私のPHP:

<?php 

$host = "localhost"; 
$userid = "root"; 
$password ="password"; 
$database = "database"; 


$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); 

header("Content-Type: application/json"); 

$mysqli = new mysqli($host, $userid, $password, $database); 

if ($mysqli->connect_errno) { 
    echo json_encode(array("success" => false, "message" => $mysqli- >connect_error, "sqlerrno" => $mysqli->connect_$ 
    exit(); 
} 

$sql = "INSERT INTO table (IP,Date) VALUES (?,?);"; 

if ($stmt = $mysqli->prepare($sql)) { 
    $stmt->bind_param("ss", $request_data["IP"], $request_data["Date"]); 

if (!$stmt->execute()) 
    $response = array("success" => false, "message" => $mysqli->error, "sqlerrno" => $mysqli->errno, "sqlstate"$ 
else 
    $response = array("success" => true); 

$stmt->close(); 
} else { 
$response = array("success" => false, "message" => $mysqli->error, "sqlerrno" => $mysqli->errno, "sqlstate" => $ 
} 

$mysqli->close(); 

echo json_encode($response); 

?> 
関連する問題