본문 바로가기

과목/데이터 베이스

Using PHP and MySQL on Google Map 구글 지도에서 php mysql 사용

구글 지도 상에서 마커를 표시하는데 마커의 위치는 위도와 경도가 결정한다. 약자로 위도는 lat, 경도는 lng로 표현한다.

사실 https://developers.google.com/maps/documentation/javascript/mysql-to-maps?hl=ko#domfunctions 여기 가면 친절하게 설명이 다 나와있다. 문제는 내가 만든 DB를 php로 연동해서 사용할 때이다...


HTML 파일의 script 태그 안에 있는 부분이다. 주석으로 PHP나 XML 파일 이름에 따라 변경해라 라고 써있다.


내가 하고 싶었던 것은 url에 있는 xml 형식의 db 대신 내가 만든 db를 사용하는 것이었다.

저 부분을 php 파일로 바꾸면 될 것 같은데 그냥 파일명.php 이렇게 집어넣으니까 절대 안나온다.. 로컬에서 php 실행하면 저렇게 뜬다.


위에 링크 걸어놓은 구글 맵 개발자 문서에서 php의 dom 함수를 사용하여 XML 출력 부분의 코드가 문제였다.

빨간 박스 안에 파랗게 표시한 부분에 @를 붙여야한다.


$connection=@mysql_connect ('localhost', $username, $password); 이렇게 말이다.


그럼 다시 실행했을 때 PHP가 XML로 변환된다.

이로써 HTML 파일에 있는 script 태그 안의 함수가 잘 작동하게 된다.

DB내용은 무시해도 된다. 프로젝트 목적이 범죄자 지도를 만드는 것이다...



html 파일을 만들고 php 파일 2개를 만든다. 하나는 

<?php

$username="root";

$password=" "; //자기 비번 넣기

$database="sexoffender"; //이거는 DBMS에 있는 스키마 이름.

?> 

이거를 넣어주고 다른 하나는

<?php


require("dbinfo.php");


// Start XML file, create parent node


$dom = new DOMDocument("1.0");

$node = $dom->createElement("soffender");

$parnode = $dom->appendChild($node);


// Opens a connection to a MySQL server


$connection=@mysql_connect ('localhost', $username, $password);

if (!$connection) {  die('Not connected : ' . mysql_error());}


// Set the active MySQL database


$db_selected = mysql_select_db($database, $connection);

if (!$db_selected) {

  die ('Can\'t use db : ' . mysql_error());

}


// Select all the rows in the markers table


$query = "SELECT * FROM soffender";

$result = mysql_query($query);

if (!$result) {

  die('Invalid query: ' . mysql_error());

}


header("Content-type: text/xml");


// Iterate through the rows, adding XML nodes for each


while ($row = @mysql_fetch_assoc($result)){

  // Add to XML document node

  $node = $dom->createElement("soffender");

  $newnode = $parnode->appendChild($node);

  $newnode->setAttribute("offender",$row['offender']);

  $newnode->setAttribute("crime",$row['crime']);

  $newnode->setAttribute("address_no", $row['address_no']);

  $newnode->setAttribute("picaddress", $row['picaddress']);

  $newnode->setAttribute("lat", $row['lat']);

  $newnode->setAttribute("lng", $row['lng']);

  $newnode->setAttribute("type", $row['type']);

}


echo $dom->saveXML();


?>

이거를 넣어준다.


그리고 db 스키마 이름과 table 이름 host이름 비번 등을 입력한다. 가져오고자 하는 애트리뷰트를 넣는다. 지도 같은 경우엔 위도 경도 값이 필수다.


drop table soffender;


create table soffender(

ID int not null auto_increment primary key,

    offender varchar(10), #범죄자 이름

    crime varchar(30), #범죄명

    address_no int, #주소 외래 키

    picaddress varchar(20),

    lat float, #위도

    lng float, #경도

    type VARCHAR( 30 ) NOT NULL

);


INSERT INTO `soffender` (`ID`, `offender`, `crime`,`address_no`,`picaddress`,`lat`, `lng`,`type`) VALUES ('1', '김길태', '아동성폭행', '1', 'ㅇㅇ', '36.621608', '127.486767','bar' );

INSERT INTO `soffender` (`ID`, `offender`, `crime`,`address_no`,`picaddress`,`lat`, `lng`,`type`) VALUES ('2','Fish', '성추행', '1', 'ㅇㅇ','-33.861034', '151.171936','restaurant');

INSERT INTO `soffender` (`ID`, `offender`, `crime`,`address_no`,`picaddress`,`lat`, `lng`,`type`) VALUES ('3','Henrys', '성추행', '1', 'ㅇㅇ','-33.898113', '151.174469','bar');

INSERT INTO `soffender` (`ID`, `offender`, `crime`,`address_no`,`picaddress`,`lat`, `lng`,`type`) VALUES ('4', 'Gatherer', '성추행', '1', 'ㅇㅇ','-33.840282', '151.207474','bar');

INSERT INTO `soffender` (`ID`, `offender`, `crime`,`address_no`,`picaddress`,`lat`, `lng`,`type`) VALUES ('5','TShed', '성추행','1', 'ㅇㅇ', '-33.910751', '151.194168','bar');

INSERT INTO `soffender` (`ID`, `offender`, `crime`,`address_no`,`picaddress`,`lat`, `lng`,`type`) VALUES ('6','Nomad', '성추행', '1', 'ㅇㅇ','-33.879917', '151.210449', 'bar');

INSERT INTO `soffender` (`ID`, `offender`, `crime`,`address_no`,`picaddress`,`lat`, `lng`,`type`) VALUES ('7','Three', '성추행','1', 'ㅇㅇ', '-33.906357', '151.263763', 'restaurant');

INSERT INTO `soffender` (`ID`, `offender`, `crime`,`address_no`,`picaddress`,`lat`, `lng`,`type`) VALUES ('8','Roasters', '성추행', '1', 'ㅇㅇ','-33.881123', '151.209656','restaurant');

INSERT INTO `soffender` (`ID`, `offender`, `crime`,`address_no`,`picaddress`,`lat`, `lng`,`type`) VALUES ('9','Lantern', '성추행', '1', 'ㅇㅇ','-33.874737', '151.215530', 'restaurant');



JS, XML, PHP 어렵..