0

我有一个关于获取位置的工作代码。

我想存储来自文本字段的值(我现在只是将其保留为 NULL)、我的经度、纬度和时间戳。

这是我将它发送到我的 php 文件的代码

NSString *latitude =  [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
NSString *longitude =  [NSString stringWithFormat:@"%f",   newLocation.coordinate.longitude];
NSString *stringFromDate = [formatter stringFromDate:newLocation.timestamp];


NSMutableURLRequest *request =
[[NSMutableURLRequest alloc] initWithURL:
[NSURL URLWithString:@"http://www.yourdomain.com/locatie.php"]];

[request setHTTPMethod:@"POST"];

NSString* postString = [NSString stringWithFormat:@"%@ %@ %@", latitude, longitude,   stringFromDate];    
[request setValue:[NSString
                   stringWithFormat:@"%d", [postString length]] forHTTPHeaderField:@"Content-length"];

[request setHTTPBody:[postString
                      dataUsingEncoding:NSUTF8StringEncoding]];

[[NSURLConnection alloc] initWithRequest:request delegate:self];

这是我的 PHP 文件中的代码。

<?php
// Connecting, selecting database

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



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

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

// Performing SQL query
$query("INSERT INTO locatie (id, longitude, latitude, timestamp)
        VALUES (NULL, $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);
?>

我究竟做错了什么?感谢所有帮助。

谢谢

PS:我没有收到任何错误,唯一的问题是我的数据库保持为空

它仍然无法正常工作,请如果有人知道我做错了什么

4

3 回答 3

4

除了有关$_POST全局变量的其他答案之外,我相信您在尝试构建查询字符串时会遇到 2 个 PHP 错误。

  1. 您没有将查询字符串正确分配给 $query 变量。您应该使用等号将字符串分配给 $query PHP 变量。例如:

    $query = "INSERT INTO ..."
    
  2. 您需要使用句点 ( ) 将 PHP 变量($longitude、$latitude、$timestamp)连接到您正在构建的查询字符串中.,这是 PHP 连接运算符。连接允许 PHP 动态构建字符串。

    $query = "INSERT INTO locatie (id, longitude, latitude, timestamp)
        VALUES (NULL," . $longitude . "," . $latitude . "," .$timestamp." )";
    

根据表中 $timestamp 字符串和数据类型的格式,您可能需要将其括在单引号中。"'" . $timestamp . "'". 获取 $longtitude、$latitude、$timestamp 的一些示例数据,并尝试在 phpMyAdmin 或您正在使用的任何 DB 工具中编写 SQL 语句,以查看是否需要引号。

此外,还应解决前面提到的 SQL 注入问题。您没有清理 $_POST 全局变量中分配给 $longitude、$latitude、$timestamp PHP 变量的字符串。您将它们直接传递给 MySQL。如果字符串中有恶意语句,您可能会遇到麻烦。

于 2012-09-18T08:55:37.370 回答
2

如果您包含对您正在观察的错误的描述,那将是有益的。

但是,您似乎使用了错误的超全局变量 POST。它实际上是在$_POST(注意下划线)中找到的

我还建议您阅读SQL 注入,因为您的代码存在这个危险的漏洞。

于 2012-09-03T13:25:41.650 回答
1

变成. $POST_ $_POST这是当前的 PHP 表示法。

将表单编码添加到您从手机发送的数据中:

[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];

将您的请求 postdata 更改为:

NSString* postString = [NSString stringWithFormat:@"latitude=%@&longitude=%@&stringFromDate=%@", latitude, longitude,   stringFromDate];

如果要在 php 脚本中访问它们,则需要设置 Post 变量。

于 2012-09-03T13:31:26.707 回答