2012-10-09 21 views
0

我在JSONString中發送4個不同的值。我需要以某種方式(解碼?)將這些轉換爲PHP值以將其發送到MySQL數據庫。iOS - JSONString到PHP

該函數將是php文件:

- (void)myFuntionThatWritesToDatabaseInBackgroundWithLatitude:(NSString *)latitude longitude:(NSString *)longitude date:(NSString *)stringFromDate 
{ 
    _phonenumber = [[NSUserDefaults standardUserDefaults] objectForKey:@"phoneNumber"]; 

    NSMutableString *postString = [NSMutableString stringWithString:kPostURL]; 
    NSString*jsonString = [[NSString alloc] initWithFormat:@{\"id\":\"%@\",\"longitude\":\"%@\",\"latitude\":\"%@\",\"timestamp\":\"%@\"}", _phonenumber, longitude , latitude, stringFromDate]; 

    [postString appendString:[NSString stringWithFormat:@"?data=%@", jsonString]]; 
    [postString setString:[postString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:postString ]]; 
    [request setHTTPMethod:@"POST"]; 

    [[NSURLConnection alloc] initWithRequest:request delegate:self ]; 
    NSLog(@"Post String =%@", postString); 

    // LocationTestViewController*locationTestViewController = [[LocationTestViewController alloc]init]; 
    // phonenumber = locationTestViewController.telefoonnummer; 
    NSLog(@"HERE1 : %@", _phonenumber); 

} 

,它可能在這一部分出現錯誤:

NSString* jsonString = [[NSString alloc] initWithFormat:@{\"id\":\"%@\",\"longitude\":\"%@\",\"latitude\":\"%@\",\"timestamp\":\"%@\"}", _phonenumber, longitude , latitude, stringFromDate]; 

這是我的日誌:

2012-10-09 15:32:59.869 MyApp[626:c07] Post String=http://www.yourdomain.com/locatie.php? data=%7B%22id%22:%220612833397%22,%22longitude%22:%22-143.406417%22,%22latitude%22:%2232.785834%22,%22timestamp%22:%2209-10%2015:05%22%7D 

它發送它到這個PHP文件需要爲MySQL插入準備好id,經度,緯度和時間戳

<?php 

    $id = $_POST['id']; 
    $longitude = $_POST['longitude']; 
    $latitude = $_POST['latitude']; 
    $timestamp = $_POST['stringFromDate']; 

    $link = mysql_connect('server', 'bla', 'bla') or die('Could not connect: ' . mysql_error()); 

    mysql_select_db('bla') or die('Could not select database'); 

    // Performing SQL query 
    $query="INSERT INTO locatie (id, longitude, latitude, timestamp) 
    VALUES ($id, $longitude,$latitude,$timestamp)"; 
    $result = mysql_query($query) or die('Query failed: ' . mysql_error()); 
    echo "OK"; 

    // Free resultset 
    mysql_free_result($result); 

    // Closing connection 
    mysql_close($link); 
?> 
+0

有什麼錯誤? – ilmiacs

+0

請注意,請使用[mysql_real_escape_string](http://php.net/mysql_real_escape_string)。 **將未轉義的數據插入到查詢中是非常危險的!** – ndm

回答

1

試試這個代碼:

$tmpdata = urldecode($_GET['data']); 
$data = json_decode($tmpdata); 
$id = $data['id']; 
$longitude = $data['longitude']; 
$latitude = $data['latitude']; 
$timestamp = $data['stringFromDate']; 

$link = mysql_connect('server', 'bla', 'bla') or die('Could not connect') 

mysql_select_db('bla') or die('Could not select database'); 

// Performing SQL query 
$query="INSERT INTO locatie (id, longitude, latitude, timestamp) 
VALUES ($id, $longitude,$latitude,$timestamp)"; 
$result = mysql_query($query) or die('Query failed: ' . mysql_error()); 
echo "OK"; 

// Free resultset 
mysql_free_result($result); 

// Closing connection 
mysql_close($link); 
+0

Did not work,I still get the message that there is no values in $ id,$ longitude,$ latitude and $ timestamp –

+0

That't least because [json_decode](http:// php .net/json_decode)默認創建stdClass實例,也就是說你需要訪問像這樣的屬性'$ id = $ data-> id;',或者使用'json_decode($ tmpdata,true);'來解碼成一個關聯數組 – ndm

+0

我在代碼中做了兩個拼寫錯誤,再次複製粘貼並重試。 – alan978

0

簡單的錯字。更換

NSString* jsonString = [[NSString alloc] initWithFormat:@{\"id\":\"%@\",\"longitude\":\"%@\",\"latitude\":\"%@\",\"timestamp\":\"%@\"}", _phonenumber, longitude , latitude, stringFromDate]; 

NSString* jsonString = [[NSString alloc] initWithFormat:@"\"id\":\"%@\",\"longitude\":\"%@\",\"latitude\":\"%@\",\"timestamp\":\"%@\"", _phonenumber, longitude , latitude, stringFromDate]; 
+0

這是否也需要刪除? 「}」 –

+0

可能是... – ilmiacs

+1

不會產生無效的JSON字符串嗎?他們被包含在'{}'中,不是嗎? – ndm