기본예제/회원관리2009. 12. 4. 23:47
이제 리스트 화면에서 특정회원을 삭제해 보도록 하겠습니다.

특정 회원을 삭제하기 위해선 해당 회원의 키값을 전달해야 하는데 회원가입예제에서 POST 처리를 했으므로 이번에는 GET방식으로 회원 키값을 받아 처리하는 예제를 해보겠습니다.

먼저 list.html 에 각 회원목록에 버튼을 만들어 회원의 정보를 삭제할 수있도록 GET방식으로 삭제 메소드에 변수를 전달하는 코드를 만듭니다.

기존 list.html 을 아래의 내용으로 수정합니다.

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

<script>
function deleteUser(user_id) {
    document.location.href="/User/deleteUser/"+user_id;
}
</script>

</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>
        <td width="60">처리</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>
        <td width="60"><a href="#" onClick="deleteUser('<?=$Rows['user_id']?>')">삭제</a></td>              
    </tr>

<?php
}
?>

</table>

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

</body>
</html>

회원 삭제처리 메소드는 User 클래스내에 "deleteUser" 로 하겠습니다.
따라서 위의 예제에서는 각 회원리스트중 "삭제" 버튼을 클릭하면 "/User/deleteUser/아이디" 를 브라우저로 호출하도록 했습니다.
URL에서 슬래시를 기준으로 첫번째는 클래스명, 두번째는 메소드명, 세번째이상은 전달 GET 변수입니다.
따라서 위 주소의 뜻은 User 클래스의 deleteUser 메소드를 "아이디"를 인자로 호출한다는의미입니다.

이제 실행할 실제 deleteUser 메소드를 작성합니다.
 
* Spac/model/User.Class.php
<?php
require_once("../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();

        //print_r($param);
        //exit;
       
        $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->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();      

    }

    function getDeleteGetVars() {
        $this->user_id = $this->args[0];
    }
   
    function deleteUser() {
       
        $this->getDeleteGetVars();
       
        $query = " Delete From user_info Where user_id = ?";
        $this->Dao->prepareStatement($query);       
        $param = array($this->user_id);       
       
        $this->Dao->setParam($param);
      
        $this->Dao->executeStatement();
        $this->Dao->closeStatement();

        $this->result_uri    = "/User/getUserList";
        $this->redirect();
       
    }
   
   
   
   
   
   

}
?>


:::[getDeleteGetVars] 설명:::
위 내용중 파란색 글자 부분이 기존 User 클래스에서 추가된 내용입니다.
"getDeleteGetVars" 메소드를 보면 GET변수를 받는 방법을 알 수 있습니다.

 도메인/클래스명/메소드명/parameter1/parameter2.....

위의 형식 중 parameter를 받는 방법은
$param1 = $this->args[0];
$param2 = $this->args[1];


위의 getDeleteGetVars 예제에선 전달 변수가 1개이므로
    function getDeleteGetVars() {
        $this->user_id = $this->args[0];
    }

이처럼 변수를 받아 맴버변수로 저장했습니다.


[deleteUser] 설명

먼저 위의 getDeleteGetVars 메소드를 호출하여 전달된 변수를 맴버변수로 받습니다.
해당 변수를 user_id  조건으로 삭제 SQL 문을 처리합니다.

처리 후엔
        $this->result_uri    = "/User/getUserList";
        $this->redirect();

이처럼 회원 리스트 화면으로 이동시킵니다.


이제 브라우저에서 삭제처리를 실행하여 제대로 삭제가 이루어 지는지 테스트합니다.


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

2. 회원리스트 조회  (0) 2009.12.01
1. 회원가입 예제  (0) 2009.12.01
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
첫번째 예제로 브라우저 화면에 "Hello World" 를 출력하는 프로그램을 만들어보겠습니다.

예제를 수행하기 위해 "Controller.ini" 파일의 설정값을 약간 수정하겠습니다.

아래는 "Controller.ini" 파일의 일부입니다. 아래 해당하는 항목을 아래의 경로로 수정합니다.

modelPath = "../Spac/model"                ; 모델클래스의 경로
viewPath = "../Spac/view"                     ; 뷰의 경로
.
.
.
errPrintView = true                                 ; 에러 화면출력
.
.
useViewCache = false                           ; 뷰캐시 기능 끔


위와 같이 모델경로와 뷰경로를 변경 하고 예제를 작성해보겠습니다.


모델클래스를 만들기 전에 클래스 생성 규칙이 있습니다.

1. Spac 에 사용되는 클래스명은 알파벳 대/소문자, 숫자, 언더바 만 사용 가능하며
2. 클래스명의 첫글자는 알파벳 대문자로 시작해야 합니다.
3. 마지막으로 파일명은 "클래스명.Class.php" 로 생성해야 합니다.
4. 클래스파일내에 클래스를 작성할때 클래스명의 선언은 파일의 "클래스명" 과 동일하여야 합니다.
5. 클래스를 작성할때는 클래스명과 동일한 메소드(생성자) 외에 기본 실행 메소드가 반드시 존재해야 합니다.
   Spac에서는 기본메소드명을 "execute" 로 정하고 있습니다.


아래와 같이 클래스의 명명규칙에 따라 모델경로 내에 "HelloWorld.Class.php" 파일을 작성합니다.





간단한 "Hello World" 어플리케이션이 완성되었습니다.

이제 이 어플리케이션을 실행해 보겠습니다.
브라우저에 아래처럼 주소를 입력하고 실행합니다.


작성한 모델클래스를 웹브라우저에서 호출하는 방법은 http://www.mydomain.com/?/클래스명/메소드명 의 방식으로 호출합니다.

아파치 서버를 사용하는 경우 "Rewrite" 설정을 통해 ".htaccess" 파일을 생성한 후, 주소의 물음표(?) 를 없애 더욱 깔끔한 주소를 사용할 수도 있습니다만,
이는 별도의 메뉴에서 설명하고, 여기서는 일반적으로 호출 할 수 있는 방식을 설명드리겠습니다.


위에서 2개의 주소를 안내한 이유는 클래스내에 "execute" 메소드가 있는경우에는 생략이 가능하다는것을 보여주기 위해서 입니다.
"execute" 메소드는 Spac 모델클래스의 기본 실행 메소드 입니다.
즉, 브라우저 주소에 메소드명을 명시하지 않으면 기본 메소드인 "execute" 메소드가 호출되게 됩니다.


Posted by webdata

이전 예제에서는 사용자 클래스에서 직접 출력하여 "View" 가 필요없었지만, 이제부터는 View를 사용하여 "Hello World" 를 출력해 보겠습니다.

복잡한 비즈니스로직은 모델 클래스 로 구현하고, 결과값을 화면에 출력하는 부분에선 "View" 를 이용하면 모델과 뷰를 분리할 수 있습니다.

아래와같이 이전 HelloWorld 클래스를 조금 변경합니다.

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

    var $string;

    function HelloWorld() {}

    function execute() {
        $this->string        = "Hello World";
        $this->result_uri   = "helloworld.html";
        $this->dispatcher();
    }

}



이전클래스와 비교하여 변경된 부분에 대해서 설명하면

1. "Controller" 를 상속받습니다. (dispatcher 메소드를 사용하기 위해서)
2. 출력할 메세지를 뷰에 전달하기 위해 $string 변수를 사용합니다.
3. "$this->result_uri" 라는 맴버변수에 뷰로 사용할 파일을 지정합니다.
    ("Spac/view" 로부터 시작되는 뷰파일의 경로를 입력합니다.)
4. $this->dispatcher 메소드를 사용하여 HelloWorld 클래스의 실행결과값을 뷰에 전달합니다.



위에서 뷰로 사용할 파일을 "helloworld.html" 로 정의 하였으므로 뷰 경로안에 이 파일을 생성합니다.

* Spac/view/helloworld.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Hello World</title>
</head>
<body>
<h3><? echo $this->string; ?></h3>
</body>
</html>



다 완성됐습니다.
이제 브라우저에서 호출해봅니다.

Posted by webdata