1

これは私の他の質問に関するものです:緯度と経度の値をMySQLデータベースiOSに保存する

このコードが緯度と経度の値を文字列または数値として保存しているかどうかを教えてください。文字列として保存する場合、数字として保存する方法を教えてください。

また、それらのmysqlフィールドをfloatタイプとして設定しました。

PHP

<?php

$username = "username";
$database = "database";
$password = "password";

mysql_connect(localhost, $username, $password);

@mysql_select_db($database) or die("unable to find database");

$name = $_GET["name"];
$address = $_GET["address"];
$city = $_GET["city"];
$county = $_GET["county"];
$country = $_GET["country"];
$postcode = $_GET["postcode"];
$date = $_GET["date"];
$time = $_GET["time"];
$latitude = $_GET["latitude"];
$longitude = $_GET["longitude"];

$query = "INSERT INTO map VALUES ('', '$name', '$address', '$city', '$county', '$country', '$postcode', '$date', '$time', '$latitude', '$longitude')";

mysql_query($query) or die(mysql_error("error"));
mysql_close();

?>

AddSessionViewController.h

#import <UIKit/UIKit.h>

#define kpostURL @"http://myurl.com/map.php"
#define kname @"name"
#define kaddress @"address"
#define kcity @"city"
#define kcounty @"county"
#define kcountry @"country"
#define kpostcode @"postcode"
#define kdate @"date"
#define ktime @"time"
#define klatitude @"latitude"
#define klongitude @"longitude"

@interface addSessionViewController : UIViewController {

IBOutlet UITextField *nameText;
IBOutlet UITextField *addressText;
IBOutlet UITextField *cityText;
IBOutlet UITextField *countyText;
IBOutlet UITextField *countryText;
IBOutlet UITextField *postcodeText;
IBOutlet UITextField *dateText;
IBOutlet UITextField *timeText;
IBOutlet UITextField *latitudeText;
IBOutlet UITextField *longitudeText;
NSURLConnection *postConnection;

}

-(IBAction)post:(id)sender;
-(IBAction)getLatLon:(id)sender;


-(void) postMessage:(NSString*) postcode withName:(NSString *) name withAddress:(NSString *) address withCity:(NSString *) city withCounty:(NSString *) county withCountry:(NSString *) country  withDate:(NSString *) date withTime:(NSString *) time withLatitude:(NSString *) latitude withLongitude:(NSString *) longitude;

AddSessionViewController.m

-(void) postMessage:(NSString*) postcode withName:(NSString *) name withAddress:(NSString *) address withCity:(NSString *) city withCounty:(NSString *) county withCountry:(NSString *) country withDate:(NSString *) date withTime:(NSString *) time withLatitude:(NSString *)latitude withLongitude:(NSString *)longitude; {

if (name != nil && address != nil && city != nil && county != nil && country != nil && postcode !=nil && date != nil && time != nil && latitude != nil && longitude != nil){

    NSMutableString *postString = [NSMutableString stringWithString:kpostURL];

    [postString appendString:[NSString stringWithFormat:@"?%@=%@", kname, name]];

    [postString appendString:[NSString stringWithFormat:@"&%@=%@", kaddress, address]];

    [postString appendString:[NSString stringWithFormat:@"&%@=%@", kcity, city]];

    [postString appendString:[NSString stringWithFormat:@"&%@=%@", kcounty, county]];

    [postString appendString:[NSString stringWithFormat:@"&%@=%@", kcountry, country]];

    [postString appendString:[NSString stringWithFormat:@"&%@=%@", kpostcode, postcode]];

    [postString appendString:[NSString stringWithFormat:@"&%@=%@", kdate, date]];

    [postString appendString:[NSString stringWithFormat:@"&%@=%@", ktime, time]];

    [postString appendString:[NSString stringWithFormat:@"&%@=%@", klatitude, latitude]];

    [postString appendString:[NSString stringWithFormat:@"&%@=%@", klongitude, longitude]];

    [postString setString:[postString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:postString]];
    [request setHTTPMethod:@"POST"];

    postConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];

}

}


-(IBAction)post:(id)sender{

[self postMessage:(NSString*) postcodeText.text withName:nameText.text withAddress:addressText.text withCity:cityText.text withCounty:countyText.text withCountry:countryText.text withDate:dateText.text withTime:timeText.text withLatitude:latitudeText.text withLongitude:longitudeText.text];

[postcodeText resignFirstResponder];
nameText.text = nil;
addressText.text = nil;
cityText.text = nil;
countyText.text = nil;
countryText.text = nil;
postcodeText.text = nil;
dateText.text = nil;
timeText.text = nil;
latitudeText.text = nil;
longitudeText.text = nil;
[[NSNotificationCenter defaultCenter] postNotificationName:@"Test2" object:self];
}


-(IBAction)getLatLon:(id)sender{


NSString *eventName = [nameText text];
NSString *eventAddress = [addressText text];
NSString *eventCity = [cityText text];
NSString *eventCountry = [countryText text];
NSString *eventCounty = [countyText text];
NSString *eventDate = [dateText text];
NSString *eventPostCode = [postcodeText text];
NSString *eventTime = [timeText text];

// Use this to build the full event string
NSString *addressString = [NSString stringWithFormat:@"%@,%@,%@,%@,%@,%@,%@,%@", eventName, eventAddress, eventCity, eventCounty, eventCountry, eventPostCode, eventDate, eventTime];

// A search can't inlude the event and time and hour as it means nothing to MapKit
// The geocodeAddressString simply contains the address info
NSString *geocodeAddressString = [NSString stringWithFormat:@"%@,%@,%@,%@,%@", eventAddress, eventCity, eventCounty, eventCountry, eventPostCode];

//NSLog(@"Hello %@",addressString);
CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 

[geocoder geocodeAddressString:geocodeAddressString completionHandler:^(NSArray* placemarks, NSError* error){
    // Check for returned placemarks
    if (placemarks && placemarks.count > 0) {
        CLPlacemark *topResult = [placemarks objectAtIndex:0];

        //NSLog([topResult locality]);
        //NSLog([topResult location]);
        //MKCoordinateRegion region;
        //double *value = topResult.region.center.latitude;

        CLLocationDegrees latitude = topResult.region.center.latitude;
        CLLocationDegrees longitude = topResult.location.coordinate.longitude;

        NSString *latitudeString = [NSString stringWithFormat:@"%f",latitude];
        NSString *longitudeString = [NSString stringWithFormat:@"%f",longitude];

        latitudeText.text = latitudeString;
        longitudeText.text = longitudeString;

        NSLog(@"Lat: %f", latitude);
        NSLog(@"Long: %f", longitude);
    }
}];
}
4

2 に答える 2

1

都市名にアポストロフィが含まれているとどうなりますか? mysql_real_escape_string を調べることをお勧めします。

とにかく、それらは float として格納されます。データは常に列のデータ型として格納されます (null をデータ型としてカウントしない限り:p)。

クエリ内の緯度と経度を囲む引用符は、浮動小数点の場合は実際には不要です (ただし、引用符を削除する前に実際に浮動小数点であることを確認するか、SQL インジェクション ホールを開くことになります)。

ここで何が起こるかというと、クエリが実行されると、MySQL はサイレントに文字列を float 値にキャストします。

于 2012-05-22T00:55:51.887 に答える
0

DB フィールドの形式で保存されます。したがって、「int」の場合は整数に変換され、float の場合は最も近い float に丸められ、VarChar の場合は文字列として保存されます。

数値として保存するには、テーブル構造のフィールド タイプを数値に変換します。エントリを数値として検証したと仮定すると、同じ SQL クエリで十分です (ただし、他の人が指摘する前に改善される可能性があります :) )

于 2012-05-22T00:57:15.197 に答える