매뉴얼

기타 외부 데이타 베이스 Mysql 연동 방법

 

* 본 강좌는 php, mysql 을 다룰줄아는 개발자 위주로 작성 되었습니다.

 

애니빌드 솔루션으로 홈페이지 운영시 불가피 하게 다른 프로그램을 개발해야하는 경우가 있습니다.

이때 애니빌드 솔루션의 mysql에 접속 할수 없으므로 별도의 mysql DB를 셋팅해서 연동 및 개발을 할 수 있습니다.

 

예를들어 타사 쇼핑몰에서 운영하다 애니빌드로 이전시 이전 주문서를 조회할수 없게 됩니다.

이런경우 이전 사이트의 DB를  연동하여 주문서를 볼수 있게 해줘야 한다든지,

애니빌드에서 제공되지 않는 게시판이라든지 메모장 등을 직접  개발 할수 있습니다.

 

필자는 타사 DB의 주문서를 조회 하는 페이지를 만들어 보도록  하겠습니다.

 

1. 애니빌드 솔루션의 관리자모드로 로그인 후 [프로그램 샵]에서 "외부 DB 연동 모듈"을 설치 합니다.

 

 

 

2. [프로그램 SHOP > 프로그램 환경설정 > 외부 DB 연동]에서  mysql DB 정보를 입력 합니다.

 

 

3. mysql DB 에서 아래와 같이 접근 권한을 열어줘야 합니다.

이때 접근 가능한 IP주소는 위 도움말에서 제공되는 IP주소로 설정해줘야 합니다.

이렇게 IP 대역을 다 열어줘야 하는 이유는 애니빌드 솔루션 자체에서 부하 분산 시스템으로 인해서 IP주소가 바뀌기 때문입니다.

 

User, DB 모두 위와 같이 권한을 열어주시기 바랍니다.

 

4. 이렇게 mysql 을 추가 했다면 정상적으로 연동 되는지 테스트 해야 합니다.

[디자인관리 > 고급 디자인 관리 > 추가 페이지 관리 ] 에서  페이지를 생성 합니다.

외부 DB 연동 <Br>
{@
outside_mysql_connect();
@}

 

실제 페이지로 접속해보면 아무런 응답이 없다면 정상적으로 연동이 된겁니다.

만약 에러가 있다면 에러메세지가 출력 되고 소스는 더이상 출력 되지 않고 exit 처리 됩니다.

 

 

5.  해당 데이타 베이스에 어떤  DB가 있는지 확인해보겠습니다.

 

외부 DB 연동

{@
outside_mysql_connect();


$query = "show tables";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
      echo "$row[0] <br>";
}

@}

 

데이타 베이스에 있는 테이블이 모두 출력 될것 입니다.

이렇게 해서 mysql DB 접속이 되므로 이후 개발작업은 원하는데로 직접 개발해보시기 바랍니다.

 

 

6. 주의사항

애니빌드 솔루션에서는 보안상 모든 php문법과, mysql 명령어가 지원 되지 않습니다.

사용가능한 php 함수는  http://manual.anybuild.co.kr/page/p_all 에서 확인 바랍니다.

사용가능한 mysql 함수는 아래와 같습니다.

- mysql_query()

- mysql_fetch_array()

- mysql_fetch_row()

- mysql_fetch_assoc()

- mysql_num_rows()

- mysql_insert_id()

 

 

 

7. 아래는 실제 외부 mysql DB 에서 주문서 내역을 가져오는 소스 입니다.

제공되는 기능은 아래와 같습니다.

- 페이징 기능

- 리스트 출력

- 검색 기능 (관리자로 로그인되어 있다면 전체 검색, 회원으로 로그인되어 있다면 자신 id로  데이타만 검색)

- 페이지 블럭

 

참고 하세요 ^^

{@
// 외부 mysql DB에 연결 합니다.
utside_mysql_connect();


// 검색 조건
$add_query_arr = array();

if($admin_conn_yn){
 //관리자로 로그인되어 있는 경우, 전체 검색 할 수 있습니다.
 if($_GET[mem_id]) $add_query_arr[] = "  mem_id like '%$_GET[mem_id]%' ";
}else{

// 관리자가 아닌경우 세션 아이디로 강제 검색 합니다.
 $add_query_arr[] = "  mem_id = '$_SESSION[mem_id]' ";
}

if($_GET[mem_name]) $add_query_arr[] = "  mem_name like '%$_GET[mem_name]%' ";
if($_GET[contents]) $add_query_arr[] = "  contents like '%$_GET[contents]%' ";

$add_query_str = "";
if(count($add_query_arr)){
 $add_query_str = "where ".implode(' and ',$add_query_arr);
}

// 전체 갯수 구하기
$query = "select count(idx) from old_order_info $add_query_str ";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
$total_record = $row[0];

// 페이징 설정
$num_per_page = 15;
$page = $_GET[page];
$page *= 1;
if(!$page)$page = 1;
$page = round($page);

$num_per_page *= 1;
$num_per_page = round($num_per_page);

if($page < 1) $page = 1;
if($num_per_page < 1) $num_per_page = 15;
$total_page = ceil($total_record/$num_per_page);

if($total_record == 0) {
   $first = 1;
   $last = 0;
} else {
   $first = $num_per_page*($page-1);
   $last = $num_per_page;
}

$numbering= $total_record - $num_per_page*($page-1);

if(!$top_page_per_block){
 if($mobile_web_yn){
  $top_page_per_block = 4;
 }else{
  $top_page_per_block = 10;
 }
}

$total_block = ceil($total_page/$top_page_per_block);
$block = ceil($page/$top_page_per_block);

$first_page = ($block-1)*$top_page_per_block;
$last_page = $block*$top_page_per_block;
if($total_block <= $block)$last_page = $total_page;
@}
총 주문수 : {$total_record|number}, {$page} / {$total_page|number} page
<script>
function goods_info_view(idx){
 var obj = document.getElementById("tr_info_"+idx);
 if(obj.style.display == 'none'){
  obj.style.display = 'table-row';
 }else{
  obj.style.display = 'none';
 }
}
</script>

<table border=1 width=100%>
<tr>
 <td>no</td>
 <td>주문번호</td>
 <td>주문자명</td>
 <td>주소</td>
 <td>연락처</td>
 <td>총금액</td>
 <td>날짜</td>
 <td>상세보기</td>
</tr>
{@
$query = "select * from old_order_info $add_query_str order by reg_time desc limit $first,$last";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
 @}
 <tr>
  <td>{$numbering}</td>
  <td>{$row[order_num]}</td>
  <td>{$row[mem_name]}</td>
  <td>{$row[addr1_info]}</td>
  <td>{$row[tel1]}</td>
  <td>{$row[t_price]}</td>
  <td>{$row[date_str]}</td>
  <td><a href="javascript:goods_info_view({$row[idx]})">상세보기</a></td>
 </tr>
 <tr id="tr_info_{$row[idx]}" style="display:none">
  <td colspan='8'>
   {$row[contents]}
  </td>
 </tr>
 {@
$numbering--;
}
@}
</table>

 

{@

// 페이지 블럭을 만듭니다.
$var_page = '';
foreach($_GET as $key => $value){
 if($key=='page') continue;

 $value = str_replace(' ','+',$value);
 $var_page .= "&$key=$value";

}

$sp_block_str = "<div class='ui-pagenate'>";
if($block > 1) {
 $my_page = $first_page;
 if($fn_name){
  $sp_block_str .= "<a href=javascript:$fn_name('$_SERVER[PHP_SELF]?page=$my_page$var_page$add_value') class='txt dir prev2' target='_self'><span></span>&lt;&lt;</a>";
 }else{
  $sp_block_str .= "<a href='$_SERVER[PHP_SELF]?page=$my_page$var_page$add_value' class='txt dir prev2' target='_self'><span></span>&lt;&lt;</a>";
 }
}

if ($page > 1) {
 $sp_num = $page - 1;
 if($fn_name){
  $sp_block_str .= "<a href=javascript:$fn_name('$_SERVER[PHP_SELF]?page=$sp_num$var_page$add_value') class='dir prev1' target='_self'><span></span>이전</a>";
 }else{
  $sp_block_str .= "<a href='$_SERVER[PHP_SELF]?page=$sp_num$var_page$add_value' class='dir prev1' target='_self'><span></span>이전</a>";
 }
}

for($direct_page = $first_page+1; $direct_page <= $last_page; $direct_page++) {
   if($page == $direct_page) {
  $sp_block_str .="<strong>$direct_page</strong>";
   } else {
  if($fn_name){
   $sp_block_str .= "<a href=javascript:$fn_name('$_SERVER[PHP_SELF]?page=$direct_page$var_page$add_value') target='_self'>$direct_page</a>";
  }else{
   $sp_block_str .= "<a href='$_SERVER[PHP_SELF]?page=$direct_page$var_page$add_value' target='_self'>$direct_page</a>";
  }
   }
}

if ($total_page > $page) {
 $page_num = $page + 1;
 if($fn_name){
  $sp_block_str .= "<a href=javascript:$fn_name('$_SERVER[PHP_SELF]?page=$page_num$var_page$add_value') class='dir next1' target='_self'><span></span>다음</a>";
 }else{
  $sp_block_str .= "<a href='$_SERVER[PHP_SELF]?page=$page_num$var_page$add_value' class='dir next1' target='_self'><span></span>다음</a>";
 }
}

if($block < $total_block) {
 $my_page = $last_page+1;
 if($fn_name){
  $sp_block_str .= "<a href=javascript:$fn_name('$_SERVER[PHP_SELF]?page=$my_page$var_page$add_value') class='txt dir next2' target='_self'><span></span>&gt;&gt;</a>";
 }else{
  $sp_block_str .= "<a href='$_SERVER[PHP_SELF]?page=$my_page$var_page$add_value' class='txt dir next2' target='_self'><span></span>&gt;&gt;</a>";
 }
}

$sp_block_str .= "</div>";
@}


{$sp_block_str}

 

<form action="{$_SERVER[PHP_SELF]}">
{@
foreach($_GET as $key => $value){
 if($key=='page') continue;
 if($key=='mem_id') continue;
 if($key=='mem_name') continue;
 if($key=='contents') continue;
 echo "<input type='hidden' name='$key' value='$value'>";
}
@}
<!--@if($admin_conn_yn)-->
회원아이디 : <input type='text' name="mem_id" value="{$_GET[mem_id]}">
<!--@end-->
주문자명 : <input type='text' name="mem_name" value="{$_GET[mem_name]}">
상품명 : <input type='text' name="contents" value="{$_GET[contents]}">
<input type='submit' value="검색">
</form>

 

만약 글작성, 수정, 삭제 기능을 추가하고자 한다면  [디자인관리 > 고급 디자인 관리 > 추가 페이지 관리]에서 처리페이지를 하나만들고 아래와 같이 개발하시면 됩니다.


{@
// 외부 mysql DB에 연결 합니다.
outside_mysql_connect();

if($_POST[mode] == 'add'){
   // DB 에 각종 정보를 insert 처리 합니다.
}else if($_POST[mode] == 'edit'){
   // DB 에 각종 정보를 update 처리 합니다.
}else if($_POST[mode] == 'del'){
   // DB  해당 레코드를 삭제 합니다.
}
@}

 

이렇듯 필요에 따라  직접 개발도 가능 합니다.

 

수고 많으셨습니다. ^^

게시글 공유 URL복사 cyworld
댓글작성

열기 닫기

댓글작성
top