这是关于我的另一个问题:Saving Latitude and Longitude values to a MySQL Database 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);
}
}];
}
答案 0 :(得分:1)
当城市名称中包含撇号时会发生什么?您可能想要查看mysql_real_escape_string。
无论如何,它们将被存储为浮动。数据始终存储为列的数据类型(除非您将null计为数据类型:p)。
查询中纬度和经度周围的引号实际上是不必要的,如果它们是浮点数(尽管你想要确保它们在删除引号之前实际上是浮点数,或者你要打开一个SQL注入漏洞)
现在会发生的是,当执行查询时,MySQL会默默地将字符串转换为浮点值。
答案 1 :(得分:0)
它们将以DB字段的格式保存。因此,如果你有“int”,它们将转换为整数,如果你有浮点数,它们将四舍五入到最近的浮点数,如果你有它作为VarChar它将被保存为一个字符串。
要保存为数字,请将表结构中的字段类型转换为数字 - 假设您已将条目验证为数字,则相同的SQL查询就足够了(但可以在其他人指出之前进行改进:) )