2013-02-06 2 views
1

아래의 코드를 사용하여 LBS 용 서비스 제공 업체로부터 데이터를 가져옵니다. 내가 뭘 하려는지 또한 내가 MySQL에받을이 정보를로드합니다.MYSQL에 PHP와 XML 삽입하기

이 코드를 사용하면 오류가 발생하지 않으며 위치 및지도 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으로 정보를 추출해야

+1

[** 새 코드 **에서 mysql_ * 함수를 사용하지 마십시오. http://bit.ly/phpmsql. 더 이상 유지 관리되지 않으며 공식적으로 사용되지 않습니다 (https://wiki.php.net/rfc/mysql_deprecation). [** 빨간색 상자 **] (http://j.mp/Te9zIL)를 참조하십시오. 대신 [* prepared statements *] (http://j.mp/T9hLWi)에 대해 알아보고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용하십시오. mysqli) - [이 기사] (http://j.mp/QEx8IB)는 어떤 결정을 내리는 데 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 튜토리얼입니다] (http://j.mp/PoWehJ). –

+0

삽입 쿼리에서 $ _POST를 사용하고 있습니다.이 코드를 $ DataAry로 변경하십시오. –

+0

코드 키에서지도 API 키를 제거한 후 다른 사람이 코드 키를 직접 사용해 볼 수 있습니다. 공개 웹 사이트에 비공개 키를 게시하는 것은 좋지 않습니다. – SDC

답변

0

당신의 $_POST에 대한 문자열 키 인덱스 주위에 따옴표가 없음을 첫 번째 문제입니다 정렬. 당신은 어떤 오류라도 잡을 수 있는지 알아보기 위해 !mysql_query($sql,$con)을 try-catch에 넣을 수 있습니다. 또한 PHP에서 mysql_ * 함수를 사용하는 것이 더 이상 사용되지 않으므로 더 이상 사용하지 않아야합니다. mysql_ * 함수를 사용하기 때문에 SQL 인젝션에도 취약하다.

관련 문제