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変数に適切に割り当てていません。等号を使用して、文字列を$queryPHP変数に割り当てる必要があります。例えば:

    $query = "INSERT INTO ..."
    
  2. .PHPの連結演算子であるピリオド()を使用して、PHP変数($ longitude、$ Latitude、$ timestamp)を作成するクエリ文字列に連結する必要があります。連結により、PHPは文字列を動的に構築できます。

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

テーブル内の$timestamp文字列とデータ型の形式によっては、一重引用符で囲む必要がある場合があります。"'" . $timestamp . "'"。$ longtitude、$ Latitude、$ timestampのサンプルデータを取得し、phpMyAdminまたは使用しているDBツールでSQLステートメントを記述して、引用符が必要かどうかを確認してください。

Also, the SQL Injection issue mentioned earlier should also be addressed. You are not sanitizing the strings you assigned to the $longitude, $latitude, $timestamp PHP variables from the $_POST global variable. You're passing them directly through to MySQL. This is where you can get into trouble if there are malicious statements in the strings.

于 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変数にアクセスする場合は、Post変数を設定する必要があります。

于 2012-09-03T13:31:26.707 に答える