1

以下のコードを使用して、LBS のサービス プロバイダーからデータを取得しています。私がやろうとしているのは、受け取ったこの情報を mysql にロードすることです。

このコードを使用してもエラーは発生せず、場所とマップの API はうまく機能していますが、mysql に描画されたデータはまったく配置されていません。

<?php
function parseXML($fstr,$tstr_start,$tstr_end) {

if ( ! strstr($fstr,$tstr_start) || !strstr($fstr,$tstr_end) ){
return ;
}

$start = strpos($fstr,$tstr_start) + strlen($tstr_start);
$stop = strpos($fstr,$tstr_end, $start);
$length = $stop - $start;
return trim(substr($fstr, $start, $length));

}
define ("MAP_API_KEY","***");
define ("MAP_BASE_URL","http://maps.googleapis.com/maps/api/staticmap?");
$Data = $GLOBALS["HTTP_RAW_POST_DATA"];

//--- Get XML data into variables
$DataAry['ResponseType'] = parseXML($Data,'Response Type="','"');
$DataAry['RefNo'] = parseXML($Data,'RefNo="','"');
$DataAry['SeqNo'] = parseXML($Data,'SeqNo="','"');
$DataAry['Network'] = parseXML($Data,'<NetworkID>','</NetworkID>');
$DataAry['Lat'] = (int) parseXML($Data,'<Lat>','</Lat>');
$DataAry['Lon'] = (int) parseXML($Data,'<Lon>','</Lon>');
$DataAry['Accuracy'] = parseXML($Data,'<Accuracy>','</Accuracy>');
$DataAry['DateTime'] = parseXML($Data,'<DateTime>','</DateTime>');

$DataAry["Lat"] = $DataAry['Lat']/1000000;
$DataAry["Lon"] = $DataAry["Lon"]/1000000;

$con = mysql_connect("localhost","****","****");
if (!$con)
{
die('Could not connect: ' . mysql_error());
} 

mysql_select_db("****", $con);

$sql="INSERT INTO trace (Lat, Lon, DateTime, RefNo)
VALUES
('$_POST[Lat]','$_POST[Lon]','$_POST[DateTime]','$_POST[RefNo]')";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}

// ---Create link to map
$link = MAP_BASE_URL . "center={$DataAry['Lat']},    
{$DataAry['Lon']}&zoom=15&size=500x500&key=" . MAP_API_KEY . "&sensor=true&markers=      
{$DataAry['Lat']},{$DataAry['Lon']}";

$handle = fopen("requests.php","c");
fwrite($handle, "<br/>Location Request @ ". date("Y-m-d H:i:s")  . "<br/><textarea      
style='width:500px;height:200px' readonly>" . $GLOBALS["HTTP_RAW_POST_DATA"] . " 
</textarea><br/><img  style='border:1px solid #000;width:500px;height:500px'  
src='$link'/><hr/>");
fclose ($handle);

echo "done!";
?>

ただし、要求どおりに requests.php ページにスローされますが、情報を msql に抽出する必要があります

4

1 に答える 1

0

最初の問題は、$_POST配列の文字列キー インデックスを引用符で囲まないことです。!mysql_query($sql,$con)エラーをキャッチするかどうかを確認するために、try-catch を挿入することをお勧めします。また、PHP での mysql_* 関数の使用は推奨されておらず、今後は使用しないでください。mysql_* 関数を使用しているため、SQL インジェクションに対しても脆弱です。

于 2013-02-06T11:52:07.200 に答える