우분투는 특별한 설정없이 아래의  Sequence로 진행하면 무리없이 Webserver를 구축할 수 있다.  

 

1. Apache2 설치
   #sudo apt-get install apache2

2. mysql 인증 모듈
   #sudo apt-get install libapache2-mod-auth-mysql

3. MySQL
   #sudo apt-get install mysql-server mysql-client
   설치가 완료되면 MySQL서버가 자동으로 시작

4. PHP5
   #sudo apt-get install php5-common php5 libapache2-mod-php5

  ※PHP 확장모듈 설치

  #sudo apt-get install php5-gd

  #sudo apt-get install php5-imap

  #apt-get install dh-make-php php5-imagick php5-dev

  #sudo apt-get install php5-cli



5. MySQL과 연동하기 위한 모듈
   #sudo apt-get install php5-mysql

6. MySQL서버 정상 작동 확인
   #sudo netstat -tap | grep mysql

 

Mysql 글자셋 설정

[client]정
default-character-set=utf8
[mysqld]
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8

 

7. PHPMYADMIN 설치

   #sudo apt-get install phpmyadmin


   

   tcp 0 0 localhost.localdomain:mysql *:* LISTEN - 이 출력되면 정상 
 
7. 기타

   mod_rewirte 모듈 아파치에 삽입 

   #sudo a2enmod rewrite

   

*위 과정중 오류가 나면 sudo /etc/init.d/ 를 이용하여 설치된 패키지를 재시작을 권장

 

 

8. PHP 소스 그대로 출력되면 "/etc/apache2/apache2.conf" 내용 마지막에 아래내용 추가

AddType application/x-httpd-php .php .php3 .inc .ph .htm .html

 

 

 

TroubleShooting

1. log 디렉토리 만들어야 함

2. virtual host 홈 디렉토리 만들어야 함

3. apache2: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName 에러 발생하면 /etc/apache2/apache2.conf 파일 마지막에 ServerName localhost를 추가한다.

 

 

출처 : http://community.365managed.com/?document_srl=10751&mid=l_service&sort_index=readed_count&order_type=desc

'리눅스 서버관리 > Ubuntu' 카테고리의 다른 글

우분투 APM 간단설치 (풀옵)  (0) 2010.04.08
우분투 Apache 2.x VirtualHost 설정  (0) 2009.12.02
Posted by webdata
기본예제/회원관리2009. 12. 1. 21:32
이전 예제에서 가입된 회원들의 리스트를 조회하는 예제를 해보겠습니다.

회원에 관련된 내용은 모두 User 클래스에서 실행합니다.
이전에 작성된 User 클래스에 몇가지 메소드를 추가해 보겠습니다.

* Spac/model/User.Class.php
<?php
require_once("/home/sue/www/Spac/controller/Dao/Dao.Class.php"); // getControllerInstance("Dao") 사용할경우 생략가능
class User extends Controller {

    var $user_id;
    var $user_pw;
    var $user_name;

    var $data_list = array();

    function User () {
        $this->Dao = new Dao;             //$this->getControllerInstance("Dao"); 로 대체 가능.
        $this->Dao->transaction = true;
        $this->Dao->connect();
    }

    function viewUserRegForm() {
        $this->result_uri    = "user_reg.html";
        $this->dispatcher();
    }

    // POST 로 전송된 값을 맴버변수로 세팅합니다.
    function setPostVars() {          //예제를 위해 POST 값을 직접 맴버변수에 등록했음.
        $this->user_id       = $_POST['user_id'];
        $this->user_pw      = $_POST['user_pw'];
        $this->user_name  = $_POST['user_name'];
    }

    //위에서 저장된 맴버변수 값을 DB에 Insert 합니다.
    function regUser() {
       
        $this->setPostVars();
       
        $query = " Insert Into user_info(user_id,user_pw,user_name,reg_date) values(?,password(?),?,NOW()) ";
        $this->Dao->prepareStatement($query);
       
        $param = array($this->user_id,$this->user_pw,$this->user_name);
        $this->Dao->setParam($param);
       
        $this->Dao->executeStatement();
       
        echo "회원가입에 성공했습니다.";

        $this->Dao->closeStatement();

    }

    function getUserList() {
      
        $this->data_list = array();

        $query = " Select * From user_info ";
        $this->Dao->executeQuery($query);

        while($rows = $this->Dao->getFetchArray()) {
            $this->data_list[] = $rows;
        }

        $this->result_uri    = "list.html";
        $this->dispatcher();       

    }
}
?>

회원리스트를 모두 배열로 가져오는 메소드  getUserList 를 추가했습니다.
회원 리스트는 "list.html" 로 출력합니다.

이제 list.html 파일을 뷰에 생성합니다.

* Spac/view/list.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>회원리스트</title>
</head>
<body>

회원수는 <?=count($this->data_list)?> 명 입니다.
<br/><br/>

<table border="1">

    <tr bgcolor="#f2f2f2">
        <td width="100">아이디</td>
        <td width="120">이름</td>
        <td width="150">등록일</td>
    </tr>
 
<?php
foreach($this->data_list as $Rows) {
?>

    <tr>
        <td width="100"><?=$Rows['user_id']?></td>
        <td width="120"><?=$Rows['user_name']?></td>
        <td width="150"><?=$Rows['reg_date']?></td>
    </tr>

<?php
}
?>

</table>

<!-- 회원가입버튼을 만들어주고 클릭하면 이전에 만든 가입폼으로 이동시킵니다. -->
<input type="button" value="회원가입" onClick="document.location.href='/User/viewUserRegForm'"></input>

</body>
</html>



이제 브라우저로 출력해 보겠습니다.
아래와 같이 호출합니다.
http://localhost/User/getUserList



회원 리스트가 잘 출력되는지, 회원가입버튼을 클릭하면 이전 예제에서 만든 가입품으로 이동하는지 확인합니다.

이제  회원 가입을 하면 가입처리된 후에 위 리스트 화면으로 이동하도록 수정해 보겠습니다.

User 클래스의 "regUser" 메소드의 마지막 부분만 수정해주면 되겠습니다.

* Spac/model/User.Class.php
<?php
require_once("/home/sue/www/Spac/controller/Dao/Dao.Class.php"); // getControllerInstance("Dao") 사용할경우 생략가능
class User extends Controller {

    var $user_id;
    var $user_pw;
    var $user_name;

    var $data_list = array();

    function User () {
        $this->Dao = new Dao;             //$this->getControllerInstance("Dao"); 로 대체 가능.
        $this->Dao->transaction = true;
        $this->Dao->connect();
    }

    function viewUserRegForm() {
        $this->result_uri    = "user_reg.html";
        $this->dispatcher();
    }

    // POST 로 전송된 값을 맴버변수로 세팅합니다.
    function setPostVars() {
        $this->user_id       = $_POST['user_id'];
        $this->user_pw      = $_POST['user_pw'];
        $this->user_name  = $_POST['user_name'];
    }

    //위에서 저장된 맴버변수 값을 DB에 Insert 합니다.
    function regUser() {
       
        $this->setPostVars();
       
        $query = " Insert Into user_info(user_id,user_pw,user_name,reg_date) values(?,password(?),?,NOW()) ";
        $this->Dao->prepareStatement($query);
       
        $param = array($this->user_id,$this->user_pw,$this->user_name);
        $this->Dao->setParam($param);
       
        $this->Dao->executeStatement();

        $this->Dao->closeStatement();
       
        //echo "회원가입에 성공했습니다.";
        $this->result_uri    = "/User/getUserList";
        $this->redirect();

    }

    function getUserList() {
      
        $this->data_list = array();

        $query = " Select * From user_info ";
        $this->Dao->executeQuery($query);

        while($rows = $this->Dao->getFetchArray()) {
            $this->data_list[] = $rows;
        }

        $this->result_uri    = "list.html";
        $this->dispatcher();       

    }
}
?>

위 소스중 echo 로 출력해주는 부분은 주석처리하고 아래 해당 페이지로 바로 이동 (redirect) 시켜줍니다.


브라우저에서 확인하여 회원가입 -> 리스트화면 -> 회원가입화면 의 형식으로 이동이 되는지 확인합니다.

'기본예제 > 회원관리' 카테고리의 다른 글

회원데이터의 삭제 :: Spac에서 변수의 전달처리  (0) 2009.12.04
1. 회원가입 예제  (0) 2009.12.01
Posted by webdata
기본예제/회원관리2009. 12. 1. 18:12
이번 회원가입 예제는 Spac 기본 Mysql Dao를 사용하여 작성됩니다.
Spac 의 Database 개발 환경은  http://spac.tistory.com/10 를 참고하여 준비합니다.

1. 테이블 생성
Create Table `user_info` (
  `user_id` varchar(12) not null,
  `user_pw` varchar(40) not null,
  `user_name` varchar(20) not null,
  `reg_date` datetime,
  primary key (`user_id`)
) engine=innodb;

위의 내용을 참고하여 테이블을 생성합니다.


이제 회원관련 클래스를 만들겠습니다.
클래스는 User.Class.php 로 생성하며, 회원에 관련된 모든 처리를 이 클래스에서 하도록 하겠습니다.
먼저 User 클래스의 뼈대만 간략하게 만들어보겠습니다.

* Spac/Model/User.Class.php
<?php
class User extends Controller {

    var $user_id;
    var $user_pw;
    var $user_name;

    function User () {}

    function viewUserRegForm() {

    }

    function setPostVars() {

    }

    function regUser() {

    }

}

viewUserRegForm : 로그인 폼 보여주기
setPostVars : POST로 전송된 변수를 맴버변수로 등록하기
regUser : 회원 정보 등록하기

간단하게 User 클래스를 만들어보았습니다.
이제 먼저 회원 가입폼을 보여주는 메소드인 "viewUserRegForm" 를 작성해 보겠습니다.
function viewUserRegForm() {
     $this->result_uri    = "user_reg.html";
     $this->dispatcher();
}

위 메소드가 호출되면 뷰인 "user_reg.html" 을 출력합니다.
이제 위에서 설정한 "user_reg.html" 를 만들어봅니다.

* Spac/view/user_reg.html"
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<form name="user_reg_form" method="post" action="/User/regUser">
    아이디 : <input type="text" name="user_id" value="" size="12">
    <br/>
    비밀번호 : <input type="password" name="user_pw" value="" size="12">
    <br/>
    이름 : <input type="text" name="user_name" value="" size="12">
    <br/>
    <input type="submit" value="회원가입">
</form>

</body>
</html>



User 클래스의 viewUserRegForm 메소드를 호출하면 뷰의 user_reg.html 가 출력되도록 만들었습니다.
제대로 출력되는지 보겠습니다.
이번에는 메소드명까지 브라우저에 명시합니다. (아직 execute 메소드가 없음)

브라우저 호출
http://localhost/User/viewUserRegForm


결과




이제 User 클래스의 setPostVars 와 regUser 메소드에 내용을 넣어 폼에서 전송된 값을 DB에 저장해 보겠습니다.
DB 작업을 하기 위해서 Dao를 사용하겠습니다. 파란색 글자를 보시면 되겠습니다.

* Spac/Model/User.Class.php
<?php
require_once("/home/sue/www/Spac/controller/Dao/Dao.Class.php"); // getControllerInstance("Dao") 사용할경우 생략가능
class User extends Controller {

    var $user_id;
    var $user_pw;
    var $user_name;

    function User () {
        $this->Dao = new Dao;             //$this->getControllerInstance("Dao"); 로 대체 가능.
        $this->Dao->transaction = true;
        $this->Dao->connect();
    }

    function viewUserRegForm() {
        $this->result_uri    = "user_reg.html";
        $this->dispatcher();
    }

    // POST 로 전송된 값을 맴버변수로 세팅합니다.
    function setPostVars() {
        $this->user_id       = $_POST['user_id'];
        $this->user_pw      = $_POST['user_pw'];
        $this->user_name  = $_POST['user_name'];
    }

    //위에서 저장된 맴버변수 값을 DB에 Insert 합니다.
    function regUser() {
       
        $this->setPostVars();
       
        $query = " Insert Into user_info(user_id,user_pw,user_name,reg_date) values(?,password(?),?,NOW()) ";
        $this->Dao->prepareStatement($query);
       
        $param = array($this->user_id,$this->user_pw,$this->user_name);
        $this->Dao->setParam($param);
       
        $this->Dao->executeStatement();

        echo "회원가입에 성공했습니다.";

        $this->Dao->closeStatement();


    }


}
?>



브라우저로 결과값을 확인합니다.

* 가입폼 입력 및 전송.


* 가입처리 및 결과 출력


* DB 저장내역 확인



다음에는 User 클래스에 메소드를 추가하여 가입된 회원 조회 및 수정/삭제 프로그램을 작성해 보도록 하겠습니다.

Posted by webdata
Spac 매뉴얼/MySQL Dao2009. 11. 26. 21:20

이전까지는 쿼리문이 단순해서 조건문이 없었습니다만, 조금 더 세밀한 결과를 얻기 위해선 조건문이 들어가고 해당 조건문에 변수를 이용해 쿼리문을 작성해야 할 경우가 있을것입니다.

쿼리문에 변수를 넣는 방법은 직접 변수를 대입하는 리터럴과 변수가 들어갈 부분에 "?" 나  :VAR 할당하여  쿼리를 만들고 변수 별도로 할당하여 실행하는 바인딩이 있습니다.

일반적으로 바인딩을 사용하는것이 쿼리캐시나 SQL 인젝션 공격 방어 등에 유리하다고 알려져 있습니다.

1. 리터럴

$user_id = 'bidam';
$query = " Select * From member Where user_id = 'bidam' And user_name = '비담' ";
$this->Dao->execute($query);


리터럴은 변수를 쿼리문에 직접 대입하여 작성합니다.


위 쿼리문을 바인딩으로 처리하는 방법은 아래와 같이 두가지 방법이 있습니다.

아래 두 가지 방법은 사용법만 다를 뿐 작동 원리는 같습니다.


2. 바인딩(1)

$query = " Select * From member Where user_id = ? And user_name = ?";

$param = array("bidam","비담");

$this->Dao->execute($query,$param);


3. 바인딩(2)

$query = " Select * From member Where user_id = :user_id And user_name = :user_name";

$param = array("user_id"=>"bidam","user_name"=>"비담");

$this->Dao->execute($query,$param);



위 바인딩 관련 메소드는 Mysql 4.1 이상 버전에서 지원됩니다.



Posted by webdata

윈도우에 Spac 개발환경을 구성하는 예제를 설명합니다.


1. 윈도우용 Apache + Php + Mysql 을 설치합니다.


윈도우용 APM 은 다양한 무료버전이 있습니다만, 여기서는 쉽고 간단한 Autoset 6 을 이용해 설치하는 과정을 설명드리겠습니다.
Autoset6 은 http://www.autoset.net/sites/front/pages.php/download/autoset_6_0_0 에서 "오토셋 6 Full Package" 를 다운로드 받아 설치합니다.

설치경로는 "C:\AutoSet6" 으로 하겠습니다.

설치가 완료되면 홈 디렉토리를 설정합니다.
홈디렉토리는 Autoset 의 기본 홈디렉토리를 그대로 쓰지 않고 "C:\AutoSet6" 에 "www" 폴더를 생성합니다.

그 후 "www" 안에 다시 "public_html" 폴더를 생성합니다.

이제 생성한 "C:\AutoSet6\www\public_html" 을 웹디렉토리로 설정합니다.
Autoset6 매니저를 실행한 후 아래와 같이 설정합니다.

   =>  



이제 Spac 패키지를 "C:\AutoSet6\www" 안에 복사하여 아래와 같이 구성합니다.






2. 이클립스 를 설치합니다.


이클립스설치 이전에 이클립스는 자바 환경에서 구동되므로 JRE 를 설치해야 합니다.
JRE는 이곳 에서 다운로드 받습니다.

위의 사이트에 방문하셔서 "Java SE Development Kit (JDK)" 혹은 "Java SE Runtime Environment (JRE)" 를 다운로드 받습니다. (윈도우7 64비트 인경우에 32비트버전을 설치해야 문제 없이 구동됨 - 현재 64비트는 오류가 생김)

다음으로 이곳 에 방문하셔서 이클립스 PHP 버전을 다운로드 받습니다.
이클립스 시작에 문제가 생기는 경우 이클립스 설치경로에 가셔서 "eclipse.ini" 파일을 열어 JRE 경로를 추가해줍니다.
아래 내용 중 파란색 부문이 추가해 준 부분입니다. 자신의 JRE 경로를 넣어주시기 바랍니다.
아래내용은 윈도우7 인경우 입니다.
-startup
plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-product
org.eclipse.epp.package.php.product
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx256m
-vm
C:\Program Files (x86)\Java\jre6\bin



그리고 윈도우 환경설정 Path에도 JRE 경로를 설정해 줍니다.




이제 이클립스를 실행한 후 새 PHP 프로젝트를 생성합니다.



프로젝트 이름은 "MyProject" 로 하겠습니다.
아래 "Contents" 영역은 "Create project from existing source" 를 선택한 후 이전에 생성한 디렉토리인 "C:\AutoSet6\www" 를 지정해 줍니다.



자 이제 Spac 개발환경이 만들어졌습니다.


Posted by webdata
이 예제는 우분투리눅스 9.10 에서 작성되었으며, 윈도우에서는 구성이 다를 수 있습니다.

[준비]
1. 로컬영역에 Apache + Php + Mysql 개발 환경을 구축해 놓습니다.
   우분투리눅스에 APM을 구성하는 예제는 http://spac.tistory.com/28 을 참조하시기 바랍니다.
   예제에서 기본 아파치 웹서비스 디렉토리는 "/home/계정/www/public_html" 로 설정합니다.
 
2. 웹서비스 디렉토리는 아래와 같이 구성합니다.
    - 예제에서의 계정은 "sue" 이며, 계정안에 "www" 디렉토리를 만들고 그 안에 프로그램을 위치했습니다.
    - "Spac"  디렉토리는 Spac 프레임웍 영역이며, "public_html" 디렉토리는 웹에서 접근가능한 디렉토리입니다.






이클립스 최신 PHP 버전을 다운로드 받습니다.
이클립스 다운로드 받기 ☞ http://www.eclipse.org/downloads/

PHP이클립스를 실행시키면 아래와 같이 PHP 개발환경이 열립니다.


새 PHP 프로젝트를 생성합니다. 프로젝트 이름은 MyProject 로 하겠습니다.




Contents 항목은 이미 구성하신 로컬 계정 영역으로 합니다. (/home/sue/www)



프로젝트 구성을 마치면 아래와 같은 프로젝트 트리가 나타납니다.



코드자동완성 설정을 합니다. (Window - Preferences)




개발환경 구성이 완료되었습니다.
이제 클래스 작성시 코드 자동완성기능을 활용하실 수 있습니다.





이클립스 내에 PHP서버를 등록 해 놓으면 "Run As" 메뉴를 이용하여 쉽게 이클립스 내 브라우저로 결과를 확인할 수 있습니다.








Posted by webdata
Spac 매뉴얼/MySQL Dao2009. 11. 20. 00:19
이전 예제까지는 모델 클래스에서 직접 출력해 보았습니다.
이번 예제에선 모델클래스에서 가져온 결과값을 뷰에 출력하는 예제를 해보겠습니다.

예제3 의 Member 클래스를 좀 더 수정해 보겠습니다.

* Spac/model/Member.Class.php
<?php
class Member extends Controller {

    var $db_msg;
    var $data_list;
    var $total_count = 0;

    
    function Member() { }

    function initMember() {               //맴버클래스 초기화메소드를 만들고 여기서 DB 연결을 합니다.
        $this->getControllerInstance("Dao");        // Dao 클래스를 로드합니다.
        $this->Dao->transaction = true;                    // 트랜젝션을 Start 합니다.
        $this->Dao->Connect();                            // DB를 연결합니다.
    }

    function getCount() {
        $query = " Select count(*) From member ";
        $this->Dao->executeQuery($query);
        //echo "<p>회원수는 " . $this->Dao->getResult() ." 명 입니다.</p>";  //주석처리

        $this->total_count            = $this->Dao->getResult();          //총레코드수를 맴버변수에 담습니다.

    }

    function getList() {
   
        $this->data_list = array();                         //결과를 담을 변수를 초기화 합니다.

        $query = " Select * From member ";          //전체 데이터 검색 쿼리문 작성
        $this->Dao->
executeQuery($query);                //쿼리문 실행

      $Result = $this->Dao->result;
        while( $Rows = $this->Dao->getFetchArray() ) { //결과값을 행을 돌며
             $this->data_list[] = $Rows;                       //결과 변수에 배열로 담습니다.
        }

        /*  --결과값을 뷰로 출력하기 위해 이부분을 주석처리 합니다.
        ec
ho "<pre>";                                      //배열로 담긴 결과값을 보기 쉽도록 출력합니다.
        print_r($this->data_list);
        echo "</pre>";
        */
     
        $this->result_uri    = "list.html";              // 뷰로 사용할 파일을 지정합니다.
        $this->dispatcher();                             // 뷰를 배치합니다.
   

  }



    function execute() {                                     //Spac의 기본 액션메소드를 정의합니다.
        $this->initMember();                               
//기본메소드가 호출되면 DB연결을 수행합니다.

        $this->db_msg = "
데이터베이스 연결에 성공했습니다."; 

      $this->getCount();
       $this->getList();
  


    }

}
?>


위와 같이 결과값을 클래스에서 출력하지 않고 클래스 맴버변수에 저장한 뒤 뷰를 배치합니다.

뷰로 사용할 파일을 정의하였기때문에 해당 파일을 생성합니다.

* Spac/view/list.html
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>회원리스트</title>
</head>
<body>

<?php echo $this->db_msg ?>
<br/><br/>

회원수는 <?php echo $this->total_count?> 명 입니다.
<br/><br/>

<table border="1">

 <tr bgcolor="#f2f2f2">
  <td width="100">아이디</td>
  <td width="120">이름</td>
  <td width="150">등록일</td>
 </tr>

<?php
foreach($this->data_list as $Rows) {
?>

 <tr>
  <td width="100"><?=$Rows['user_id']?></td>
  <td width="120"><?=$Rows['user_name']?></td>
  <td width="150"><?=$Rows['reg_date']?></td>
 </tr>

<?php
}
?>


</table>

</body>
</html>


위의 list.html 내용을 보면 클래스내부에서 맴버변수를 가져다 사용하듯 $this->변수  방식으로 사용하는것을 알 수 있습니다.

아래는 결과 입니다.




이상으로 간단한 데이터베이스 예제를 해보았습니다.
다음 예제에서는 조건문이 들어간 쿼리문을 실행하는 예제를 해보겠습니다.

Posted by webdata
Spac 매뉴얼/MySQL Dao2009. 11. 18. 22:35
먼저 데이터 조회 예제를 수행하기 위해 기본 데이터를 넣어 놓겠습니다.

Insert Into member ( user_id, user_name, reg_date) values ( 'dukman', '덕만', now() );
Insert Into member ( user_id, user_name, reg_date) values ( 'misil', '미실', now() );
Insert Into member ( user_id, user_name, reg_date) values ( 'bidam', '비담', now() );

위의 쿼리문을 실행하여 데이터를 3건 등록한 후 예제2의 회원수구하는 클래스인 "Member" 를 바로 호출해 보도록 하겠습니다.


브라우저에서 결과를 확인 합니다.

결과는 "회원수는 3 명 입니다." 라고 메세지가 출력될 것입니다.


그럼 이제 실제 3명의 상세 데이터값을 가져와 봅니다.
Member 클래스를 좀 더 보완하겠습니다.

* Spac/model/Member.Class.php
<?php
class Member extends Controller {

    var $data_list;
    
    function Member() { }

    function initMember() {               //맴버클래스 초기화메소드를 만들고 여기서 DB 연결을 합니다.
        $this->getControllerInstance("Dao");        // Dao 클래스를 로드합니다.
        $this->Dao->transaction = true;                    // 트랜젝션을 Start 합니다.
        $this->Dao->Connect();                            // DB를 연결합니다.
    }

    function getCount() {
        $query = " Select count(*) From member ";
        $this->Dao->
executeQuery($query);
        echo "<p>회원수는 " . $this->Dao->getResult() ." 명 입니다.</p>";
    }

    function getList() {
   
        $this->data_list = array();                         //결과를 담을 변수를 초기화 합니다.

        $query = " Select * From member ";          //전체 데이터 검색 쿼리문 작성
        $this->Dao->
executeQuery($query);                //쿼리문 실행

      $Result = $this->Dao->result;
        while( $Rows = $this->Dao->getFetchArray() ) { //결과값을 행을 돌며
             $this->data_list[] = $Rows;               //결과 변수에 배열로 담습니다.
        }

        echo "<pre>";                                      //배열로 담긴 결과값을 보기 쉽도록 출력합니다.
        print_r($this->data_list);
        echo "</pre>";

    }



    function execute() {                                     //Spac의 기본 액션메소드를 정의합니다.
        $this->initMember();                               
//기본메소드가 호출되면 DB연결을 수행합니다.
        echo "<p>데이터베이스 연결에 성공했습니다.</p>"; 


      $this->getCount();
       $this->getList();
  


    }

}
?>




브라우저에서 결과를 확인 합니다.

결과는 "회원수는 3 명 입니다." 와 회원 테이블의 정보들이 배열형태로 출력될 것입니다.





지금까지는 뷰를 거치지 않고 클래스에서 바로 출력하는 예제를 실행 해봤습니다.
다음 예제에서는 클래스에서 출력하지 않고 해당 클래스와 연결된 뷰에서 데이터를 출력하는 예제를 작성해 보겠습니다.

Posted by webdata
Spac 매뉴얼/MySQL Dao2009. 11. 18. 22:35

성공 메세지가 출력된다면 쿼리문의 실행 예제를 위한 테이블을 만들어보도록 하겠습니다.

회원정보를 저장할 테이블로 "member" 라는 이름의 테이블을 만듭니다. 간단한 필드만 넣어서 만들어보겠습니다.

Create Table `member` (
  `user_id` varchar(12) not null,
  `user_name` varchar(20) not null,
  `reg_date` datetime,
  primary key (`user_id`)
) engine=innodb;



위에서 만든 Member 클래스에  내용을 추가하여 위 테이블의 레코드 수를 화면에 출력 하도록 해봅시다.

* Spac/model/Member.Class.php
<?php
class Member extends Controller {
   
    function Member() {}                  //이번예제는 생성자에서 별도 할일이 없으므로 정의만 해 놓습니다.

    function initMember() {               //맴버클래스 초기화메소드를 만들고 여기서 DB 연결을 합니다.
        $this->getControllerInstance("Dao");        // Dao 클래스를 로드합니다.
        $this->Dao->transaction = true;                    // 트랜젝션을 Start 합니다.
        $this->Dao->Connect();                            // DB를 연결합니다.
    }

    function getCount() {
        $query = " Select count(*) From member ";
        $this->Dao->executeQuery($query);
        echo "<p>회원수는 " . $this->Dao->getResult() ." 명 입니다.</p>";
    }

    function execute() {                                     //Spac의 기본 액션메소드를 정의합니다.
        $this->initMember();                               
//기본메소드가 호출되면 DB연결을 수행합니다.
        echo "<p>데이터베이스 연결에 성공했습니다.</p>"; 


      $this->getCount();

    }

}
?>


getCount() 메소드를 추가 하여 "member"  테이블의 레코드 수가 출력되도록 작성합니다.




브라우저에 다시 한 번 실행결과를 확인합니다.


현재는 레코드가 없으므로 "회원수는 0 명 입니다." 라고 메세지가 출력될 것입니다.



Posted by webdata
Spac 매뉴얼/MySQL Dao2009. 11. 16. 23:38

이제 Dao 를 Spac 프레임웍 내부로 불러와 데이터베이스에 연결하는 예제를 작성해보겠습니다.

회원 테이블을 관리하는 모델클래스를 만듭니다.

회원관리 클래스는 "Member"라는 이름으로 만듭니다.

이번 예제부터는 Spac 컨트롤러의 외부클래스 로드기능을 사용해야 하므로 "Controller" 를 상속받아 작성합니다.

* Spac/model/Member.Class.php
<?php
class Member extends Controller {

    var $Dao;
   
    function Member() {}                

    function initMember() {                            //맴버클래스 초기화메소드를 만들고 여기서 DB 연결을 합니다.
        $this->getControllerInstance("Dao");      // Dao 클래스를 로드합니다.
        $this->Dao->transaction = true;              // 트랜젝션을 Start 합니다.
        $this->Dao->Connect();                        // DB를 연결합니다.
    }

    function execute() {                                 //Spac의 기본 액션메소드를 정의합니다.
        $this->initMember();                           //기본메소드가 호출되면 DB연결을 수행합니다.
        echo "<p>데이터베이스 연결에 성공했습니다.</p>"; 
    }

}
?>

위의 예제는 Spac 컨틀로러의 메소드인 getControllerInstance 를 사용해서 Dao 클래스를 가져왔습니다.
일반적으로 위처럼 사용하면 되지만, 이클립스를 사용하는 경우 코드 자동완성기능을 사용하시려면 직접 Dao 클래스 파일을 삽입하여 사용해야 합니다.


즉, 아래와 같이 사용합니다.
  ==> getControllerInstance 를 사용하지 않는 예제
* Spac/model/Member.Class.php
<?php
require_once("C:\AutoSet6\www\Spac\controller\Dao\Dao.Class.php");
class Member extends Controller {
   
    var $Dao;

    function Member() {}                  //이번예제는 생성자에서 별도 할일이 없으므로 정의만 해 놓습니다.

    function initMember() {               //맴버클래스 초기화메소드를 만들고 여기서 DB 연결을 합니다.

       $this->Dao = new Dao;

        $this->Dao->transaction = true;                    // 트랜젝션을 Start 합니다.
        $this->Dao->Connect();                            // DB를 연결합니다.
    }

    function execute() {                                     //Spac의 기본 액션메소드를 정의합니다.
        $this->initMember();                               //기본메소드가 호출되면 DB연결을 수행합니다.
        echo "<p>데이터베이스 연결에 성공했습니다.</p>"; 
    }

}
?>




위의  두가지 예제의 결과는 모두 같습니다만, 이클립스를 사용하여 개발할 경우 두번째 방법을 사용하면 자동완성기능이 활성화되어 더욱 편하게 개발하실 수 있습니다.





이로서 Database 연결을 구현하였습니다.

브라우저에 아래의 주소를 입력한 후 성공메세지가 출력되는지 확인합니다.


오류가 없었다면 "데이터베이스 연결에 성공했습니다." 라는 메세지가 화면에 출력될 것입니다.





Posted by webdata