PHP 프로그래밍

본문 바로가기
사이트 내 전체검색


Web Programming >> PHP Programming
[목차]
제7장 회원관리(MySQL)

    1. MySQL을 이용한 회원 관리

앞의 4절에서 MySQL 데이터베이스와의 연결을 포함하는 웹 프로그램, 즉 웹 데이터베이스 연동 프로그램을 개발하는데 필요한 MySQL API 함수의 사용법을 소개하였다.
이번 절에서는 이러한 API 함수를 이용하여 실제 웹상에서 데이터베이스를 조작하는 프로그램이 어떠한 절차에 따라 구현되는지, 그 개념에 초점을 맞추어 간단한 연동 프로그램 예제를 통해 살펴보도록 하자.
여기서 살펴볼 예제는 앞서의 userdb 테이블을 대상을 하여 이 테이블에 새로운 사용자를 등록하는 기능과 또 이미 등록되어 있는 사용자의 정보를 수정, 삭제하는 기능을 갖는 일반적인 웹 데이터베이스 연동 프로그램이다.
소스코드를 살펴보기 전에 PHP로 웹 데이터베이스를 연동할 때 작성해야 할 프로그램의 흐름 도를 보자.
 
웹 데이터베이스 연동의 구현 방식
PHP 프로그램의 흐름을 보면 웹 연동을 위해서는 우선 데이터베이스가 있는 MySQL 서버에 연결해야 한다. 이를 위해 mysql_connect() 나 mysql_pconnect() 함수를 호출한다.
 
mysql_connect() 함수로 서버에 대한 연결이 제대로 이루어지면 mysql_select_db() 함수를 호출하여 이 서버 내에 존재하는 여러 데이터베이스 중에서 작업할 데이터베이스를 선택한다. 여기서는 userdb  라는 테이블에 저장된 데이터를 대항으로 작업할 것이므로 이 userdb 테이블이 속한 "sample"이라는 데이터베이스를 선택해야 한다.
 
일단 해당 데이터베이스에까지 성공적으로 연결이 되면 이 데이터베이스 내에 존재하는 테이블과 각 테이블에 저장되어 있는 레코드에 대해 SELECT나 INSERT, UPDATE, DELETE, CREATE TABLE, DROP TABLE등의 여러 가지 데이터 정의문과 조작문을 전송, 실행할 수 있다. 이러한 데이터 정의문과 조작문은 SQL 문의 형태로 서버에 전송되며 mysql_query() 함수가 이러한 쿼리문을 서버에 전송하는 역할을 한다.
쿼리가 서버에 전송되어 실행이 되면 해당 쿼리문에 대한 실행 결과가 반환되는데 이 결과는 보통 결과 레코드 세트의 형태로 반환된다. 따라서 이들 레코드에 담긴 값을 가져오는 함수를 통해 결과 값을 PHP 변수에 저장하여 프로그램의 목적에 맞는 다양한 방식의 HTML 형태로 가공하여 출력할 수 있다. 이때 겨로가 레코드 세트로부터 값을 가져오는 함수로는 mysql_fetch_row(), mysql_fetch_array(), mysql_fetch_object(), mysql_result() 등이 잇다.
 
이미 앞에서 설명한 것처럼 mysql_fetch_row()나 mysql_fetch_array(), mysql_fetch_object() 함수는 실행 결과를 한 줄씩 레코드 단위로 가져와 각 레코드의 필드값을 배열에 저장하는 함수이고 mysql_result() 함수는 레코드에서 하나의 필드값만을 가져오는 함수이다.
 
쿼리 결과를 출력한 후 해당 서버에 대한 작업을 마치면 mysql_close() 함수로 서버와의 연결을 해제한다. 보통은 PHP 스크립트가 종료되면 자동적으로 데이터베이스 서버와의 연결이 해제되므로 함수 호출을 생략하기도 한다.
 
회원 관리 프로그램
userdb 사용자 관리 프로그램은 "sample" 데이터베이스 내의 userdb 테이블를 사용합니다.

파일명 : sample.sql

INSERT INTO user (host,user,password) VALUES ('localhost','php',password('php99'));
INSERT INTO db VALUES ('localhost','sample','php','Y','Y','Y','Y','Y','Y',
'Y','Y','Y','Y');
create database sample;
flush privileges;

파일명 : userdb.sql

create table userdb (
name CHAR(8),
id VARCHAR(10) NOT NULL,
email VARCHAR(40),
sex CHAR(1),
milage INT,
level CHAR(1),
PRIMARY KEY(id)
);

 

mysql -u root -p mysql < sample.sql

mysql -u php -p sample < userdb.sql

위와 같이 sample 데이터베이스와 userdb테이블을 생성하고, php라는 id를 생성해줍니다.

그리고, 새로운 사용자를 추가하고, 저장되어 있는 사용자의 정보를 조회하며 이들 정보를 각각 수정, 삭제할 수 있는 프로그램을 작성합니다.
프로그램은 다음과 같이 네 가지 루틴으로 나누어진다.
 
·등록되어 있는 사용자의정보를 조회할 수 있는 출력 부분 - list.html
·새로운 사용자를 등록하는 부분 - adduserform.html, adduser.html
·등록되어 있는 사용자의 정보를 수정하는 부분 - modifyform.html, modify.html
·등록되어 있는 사용자의 정보를 삭제하는 부분 - deleteform.html, delete.html
 
이제 각각의 기능을 수행하는 파일에 대한 코드를 살펴보자.
 
1. 사용자 정보 출력 루틴(list.html)
출력 루틴은 userdb 테이블에 등록되어 있는 모든 사용자에 대해서 사용자의 이름과 아이디, 이메일 주소, 성별, 마일리지, 사용자 등급의 정보를 출력하는 부분으로 실행 스크립트 파일명은 list.html이다. 지금까지는 보통 PHP스크립트에 대한 파일 확장자로 php3를 사용했지만 우리가 이미 PHP를 설치할 때 httpd.conf 파일에서 html 파일도 PHP의 확장자로 등록하였으므로 list.php3 대신 list.html로 확장자를 바꾸어도 php3와 동일하게 PHP 스크립트를 만들 수 있다.
 
출력 루틴에서는 왼쪽으로부터 모두 여섯 개의 사용자 정보를 출력하고 그 오른쪽에는 각 사용자 정보를 개별적으로 수정 및 삭제할 수 있도록 수정과 삭제 기능을 수행하는 스크립트 파일과 연결된 링크를 출력한다. 또한 하단에는 새로운 사용자를 userdb 테이블에 등록할 수 있도록 사용자 등록 스크립트(adduserform.html)와 연결되어 있는 링크를 출력한다.
 
list.html 파일의 코드는 다음과 같다.
 


 
<html>
<head>
   <style type="text/css">
   <!--
   a:link,a:visited,a:active {
      text-decoration : none;
      font-size : 10pt;
   }
   a:hover {
      text-decoration : underline;
      color : red;
      font-size : 10pt;
   }
   BODY, TR, TD, TH {
      font-size : 10pt;
   }
   //-->
   </style>
</head>
<body>
 
<?
########## 데이터베이스 서버에 연결한다. ##########
$dbconn = mysql_connect("localhost","php","php99") or die("DB서버 연결에 실패하였습니다!");
 
########## 작업 데이터베이스로 sample을 선택한다. ##########
$status = mysql_select_db("sample",$dbconn);
if(!$status) {
   $errNO = mysql_errno($dbconn);
   $errMSG = mysql_error($dbconn);
   
   echo("서버의 sample 데이터베이스연결에 실패하였습니다!<br>");
   echo("에러코드 $errNO : $errMSG<br>");
   exit;
}
 
########## SELECT 쿼리문으로 userdb테이블에 저장되어 있는 모든 사용자 데이터를 불러온다. ##########
$query = "SELECT name,id,email,sex,milage,level FROM userdb ORDER BY id";
$result = mysql_query($query,$dbconn);
if(!$result) {
   $errNO = mysql_errno($dbconn);
   $errMSG = mysql_error($dbconn);
      
   echo("에러코드 $errNO : $errMSG<br>");
   exit;
}
 
$rows = mysql_num_rows($result);
if(!$rows) {
   echo("현재 등록되어 있는 사용자가 없습니다.");
   exit;
}
?>
 
<table width=750 border=0 cellpadding=10 align=center>
<tr>
   <td colspan=8 align=center>현재 <b><?echo("$rows")?></b>명의 사용자가 등록되어 있습니다.</td>
</tr>
<tr>
   <th bgColor=pink align=center>이름</td>
   <th bgColor=pink align=center>아이디</td>
   <th bgColor=pink align=center>이메일주소</td>
   <th bgColor=pink align=center>성별</td>
   <th bgColor=pink align=center>마일리지</td>
   <th bgColor=pink align=center>사용자등급</td>
   <th bgColor=pink align=center>수정</td>
   <th bgColor=pink align=center>삭제</td>   
</tr>   
 
<?
########## 테이블내 모든 레코드의 각 데이터 값을 각각의 변수에 저장하여 출력한다. ##########
while($row = mysql_fetch_array($result)) {
   $my_name = $row["name"];
   $my_id = $row["id"];
   $my_email = $row["email"];
   $my_sex = $row["sex"];
   $my_milage = $row["milage"];
   $my_level = $row["level"];
   
   echo("
      <tr>
         <td bgColor=lightyellow align=center>$my_name</td>
         <td bgColor=lightyellow align=center>$my_id</td>
         <td bgColor=lightyellow align=center><a href=\"mailto:$my_email\">$my_email</a></td>
         <td bgColor=lightyellow align=center>$my_sex</td>
         <td bgColor=lightyellow align=center>$my_milage</td>
         <td bgColor=lightyellow align=center>$my_level</td>
         <td bgColor=lightyellow align=center><a href=\"modifyform.html?id=$my_id\">[수정]</a></td>
         <td bgColor=lightyellow align=center><a href=\"deleteform.html?id=$my_id\">[삭제]</a></td>         
     </tr>
   ");
}
?>
 
</table>
 
<p align=center>
<a href="adduserform.html">[새로운 사용자 등록]</a>
</p>
 
</body>
</html>
 
<?
########## 데이터베이스 연결을 해제한다. ##########
mysql_close($dbconn);
?>
 

[예제] userdb 테이블의 출력 루틴(list.html)
 
1~53행은 MySQL 서버의 "sample" 데이터베이스에 연결하여 userdb 테이블에 저장되어 있는 모든 사용자의 레코드를 가져오는 쿼리문을 서버에 전송하는 코드이다.
 
먼저 24행에서는 mysql_connect() 함수를 호출하여 MySQL 서버에 연결한다. 연결할 때의 사용자와 패스워드는 제3절에서 "sample" 데이터베이스를 생성할 때 이 데이터베이스의 소유자로 등록한 "php"와 "php99"가 된다.
27~35행에서는 연결된 서버 내에 "sample"이라는 이름을 갖는 데이터베이스가 존재할 경우 이 데이터베이스를 작업 대상 데이터베이스로 선택한다. 만일 지정한 데이터베이스가 서버 내에 존재하지 않거나 데이터베이스에 대한 사용 허가 권한이 없을 경우에는 에러가 발생하는데 29~34행에서 mysql_errno()와 mysql_error() 함수를 호출함으로써 어떠한 원인으로 에러가 발생하였는지를 자세히 알 수 있다.
 
55~95행은 쿼리문의 실행 결과로 반환된 결과 레코드 세트에서 mysql_fetch_array() 함수로 하나의 레코드씩 가져와 각 레코드에 저장된 이름($my_name)과 아이디($my_id), 이메일($my_email), 성별($my_sex), 마일리지($my_milage), 사용자 등급($my_level)의 여섯 가지 필드값을 각각의 변수에 저장한 뒤 테이블 형태로 출력하는 코드이다. 결과 레코드 세트에서 가져온 레코드에 대해 mysql_fetch_arr
ay() 함수를 이용하였으므로 73~78행처럼 배열의 인덱스 번호 대신 필드명을 적어주어도 된다.
97~107행에서는 새로운 사용자를 등록하는 스크립트(adduserform.html)에 대한 링크를 출력한 후 mysql_close() 함수로 MySQL 서버에 대한 연결을 해제한다.
 
2. 사용자 등록 루틴(adduserform.html, adduser,html)
사용자 등록 루틴은 사용자로부터 데이터를 입력받는 입력 양식 파일(adduserform.html)과 입력된 데이터를 userdb 테이블에 저장하는 스크립트 파일(adduser.html)로 구성된다.
 
다음은 사용자 등록 입력 양식의 코드이다.
 

 
<html>
<head>
   <style type="text/css">
   <!--
   a:link,a:visited,a:active {
      text-decoration : none;
      font-size : 10pt;
   }
   a:hover {
      text-decoration : underline;
      color : red;
      font-size : 10pt;
   }
   BODY, TR, TD, TH {
      font-size : 10pt;
   }
   //-->
   </style>
</head>
<body>
 
<!-- 각각의 입력양식에 입력한 값을 adduser.html로 보낸다. -->
<form name="signform" method="post" action="adduser.html">
 
<table width="402" border="0" cellspacing="1" cellpadding="0" align="center">
<tr>
   <td bgColor="#8080FF">
 
   <table width="400" border="0" cellspacing="1" cellpadding="5" align="center">
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>이 름</font></td>
      <td width="280" bgColor="#FAFAEE"><input type="text" name="name" size="15"></td>
   </tr>
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>아이디</font></td>
      <td width="280" bgColor="#FAFAEE"><input type="text" name="id" size="20"></td>
   </tr>
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>이메일주소</font></td>
      <td width="280" bgColor="#FAFAEE"><input type="text" name="email" size="25"></td>
   </tr>      
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>성별</font></td>
      <td width="280" bgColor="#FAFAEE">
      <input type="radio" name="sex" value="M">남자
      <input type="radio" name="sex" value="F">여자
      </td>
   </tr>   
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>마일리지</font></td>
      <td width="280" bgColor="#FAFAEE"><input type="text" name="milage" size="10"></td>
   </tr>   
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>사용자등급</font></td>
      <td width="280" bgColor="#FAFAEE">
      <select name="level">
         <option value="A">User Level A
         <option value="B">User Level B
         <option value="C">User Level C
      </select>      
      </td>
   </tr>   
   <tr>
      <td align="center" colspan="2" bgColor="#CFD0ED">
      <font size=2>
      <input type="submit" value="사용자 등록">
      <input type="reset" value="취   소">
      </font>
      </td>
   </tr>
   </table>
 
   </td>
</tr>
</table>
 
</form>
 
</body>
</html>
 

[예제] 사용자 등록 입력 양식의 HTML 코드(adduserform.html)
 
위의 코드는 사용자로부터 이름과 아이디, 이메일주소, 성별, 마일리지, 사용자등급의 여섯 가지 항목을 입력받아 이 값을 25행의 action에서 지정한 adduser.html 스크립트로 전송한다.
여기서 사용자가 입력한 이름은 adduser.html에서 변수 $name에 저장되고, 아이디는 $id에, 이메일주소는 $email에, 성별은 $sex에, 마일리지는 $milage에, 사용자 등급은 $level에 각각 저장된다.
 
adduser.html 스크립트를 보면 다음과 같다.
 

 
<?
########## 데이터베이스 서버에 연결한다. ##########
$dbconn = mysql_connect("localhost","php","php99") or die("DB서버 연결에 실패하였습니다!");
 
########## 작업 데이터베이스로 sample을 선택한다. ##########
$status = mysql_select_db("sample",$dbconn);
if(!$status) {
   $errNO = mysql_errno($dbconn);
   $errMSG = mysql_error($dbconn);
   
   echo("서버의 sample 데이터베이스연결에 실패하였습니다!<br>");
   echo("에러코드 $errNO : $errMSG<br>");
   exit;
}
 
########## 사용자가 입력양식에 입력한 값을 userdb테이블에 삽입한다. ##########
$query = "INSERT INTO userdb (name,id,email,sex,milage,level) VALUES ('$name', '$id', '$email', '$sex', $milage, '$level')";
$result = mysql_query($query,$dbconn);
if($result) {
   ########## 사용자가 성공적으로 등록되면 리스트 출력화면으로 이동한다. ##########
   echo ("<meta http-equiv='Refresh' content='0; URL=list.html'>");
} else {
   $errNO = mysql_errno($dbconn);
   $errMSG = mysql_error($dbconn);
      
   echo("에러코드 $errNO : $errMSG<br>");
   exit;
}
?>
 

[예제] 사용자 등록 스크립트(adduser.html)
 
adduser.html 스크립트는 사용자 등록 입력 양식에 입력된 값을 userdb 테이블에 저장하는 스크립트파일이다.
1~14행은 앞서의 예제와 마찬가지로 MySQL 서버의 "sample" 데이터베이스에 연결하는 코드이다.
17~18행은 입력 양식에 사용자가 입력한 값을 INSERT 명령문으로 userdb 테이블에 삽입하는 코드이다. 삽입이 성공적으로 이루어지면 mysql_query() 함수는 true를 반환하고 그 결과 21행에서 메타 태그를 이용하여 회원 정보를 출력하는 파일(list.html)로 이동하여 새로 등록된 회원 정보를 볼 수 있다. 만일 입력해야 할 값이 누락되었다거나 하는 이유로 데이터 삽입에 문제가 발생하면 $result는 false 가 되므로 26행에서 에러 코드를 출력하고 스크립트의 실행이 중단된다.
 
3. 사용자 정보 수정 루틴(modifyform.html, modify.html)
사용자 정보수정 루틴도 등록 루틴과 마찬가지로 사용자 정보를 수정하기 위한 입력 양식 파일(modifyform.html)과 사용자가 수정한 값으로 테이블에 저장된 필드의 값을 변경하는 스크립트 파일(modify.html)로 구성된다.
 
사용자 정보 수정을 위한 입력 양식 파일(modifyform.html)은 다음과 같다.
 

 
<html>
<head>
   <style type="text/css">
   <!--
   a:link,a:visited,a:active {
      text-decoration : none;
      font-size : 10pt;
   }
   a:hover {
      text-decoration : underline;
      color : red;
      font-size : 10pt;
   }
   BODY, TR, TD, TH {
      font-size : 10pt;
   }
   //-->
   </style>
</head>
<body>
 
<?
########## 데이터베이스 서버에 연결한다. ##########
$dbconn = mysql_connect("localhost","php","php99") or die("DB서버 연결에 실패하였습니다!");
 
########## 작업 데이터베이스로 sample을 선택한다. ##########
$status = mysql_select_db("sample",$dbconn);
if(!$status) {
   $errNO = mysql_errno($dbconn);
   $errMSG = mysql_error($dbconn);
   
   echo("서버의 sample 데이터베이스연결에 실패하였습니다!<br>");
   echo("에러코드 $errNO : $errMSG<br>");
   exit;
}
 
########## 수정하고자 하는 사용자의 정보를 뽑아온다. ##########
$query = "SELECT name,id,email,sex,milage,level FROM userdb WHERE id = '$id'";
$result = mysql_query($query,$dbconn);
if(!$result) {
   $errNO = mysql_errno($dbconn);
   $errMSG = mysql_error($dbconn);
      
   echo("에러코드 $errNO : $errMSG<br>");
   exit;
}
 
$my_name = mysql_result($result,0,0);
$my_id = mysql_result($result,0,1);
$my_email = mysql_result($result,0,2);
$my_sex = mysql_result($result,0,3);
$my_milage = mysql_result($result,0,4);
$my_level = mysql_result($result,0,5);
?>
 
<form name="signform" method="post" action="modify.html?id=<?echo("$id")?>">
 
<table width="402" border="0" cellspacing="1" cellpadding="0" align="center">
<tr>
   <td bgColor="#8080FF">
 
  <table width="400" border="0" cellspacing="1" cellpadding="5" align="center">
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>이 름</font></td>
      <td width="280" bgColor="#FAFAEE"><input type="text" name="name" size="15" value="<?echo("$my_name")?>"></td>
   </tr>
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>아이디</font></td>
      <td width="280" bgColor="#FAFAEE"><?echo("$my_id")?></td>
   </tr>
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>이메일주소</font></td>
      <td width="280" bgColor="#FAFAEE"><input type="text" name="email" size="25"  value="<?echo("$my_email")?>"></td>
   </tr>      
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>성별</font></td>
      <td width="280" bgColor="#FAFAEE">
<?      
if(!strcmp($my_sex,"M")) {
   echo("<input type=\"radio\" name=\"sex\" value=\"M\" CHECKED>남자");
   echo("<input type=\"radio\" name=\"sex\" value=\"F\">여자");
} else {
   echo("<input type=\"radio\" name=\"sex\" value=\"M\">남자");
   echo("<input type=\"radio\" name=\"sex\" value=\"F\" CHECKED>여자");      
}      
?>      
      </td>
   </tr>   
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>마일리지</font></td>
      <td width="280" bgColor="#FAFAEE"><input type="text" name="milage" size="10" value="<?echo("$my_milage")?>"></td>
   </tr>   
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>사용자등급</font></td>
      <td width="280" bgColor="#FAFAEE">
      <select name="level">
<?      
if(!strcmp($my_level,"A")) {
   echo("<option value=\"A\" SELECTED>User Level A");
   echo("<option value=\"B\">User Level B");
   echo("<option value=\"C\">User Level C");
} else if(!strcmp($my_level,"B")) {
   echo("<option value=\"A\">User Level A");
   echo("<option value=\"B\" SELECTED>User Level B");
   echo("<option value=\"C\">User Level C");
} else {
   echo("<option value=\"A\">User Level A");
   echo("<option value=\"B\">User Level B");
   echo("<option value=\"C\" SELECTED>User Level C");
}         
?>      
      </select>      
      </td>
   </tr>   
   <tr>
      <td align="center" colspan="2" bgColor="#CFD0ED">
      <font size=2>
      <input type="submit" value="사용자정보 수정">
      <input type="reset" value="취   소">
      </font>
      </td>
   </tr>
   </table>
 
   </td>
</tr>
</table>
 
</form>
 
</body>
</html>
 

[예제] 사용자 정보의 수정을 위한 입력 양식의 출력(modifyform.html)
 
modifyform.html 파일은 각 레코드의 오른쪽에 있는 [수정] 링크를 클릭하면 실행되며 이때 URL을 통해 전달되는 id 필드값으로부터 userdb 테이블에서 해당 id 필드값을 갖는 레코드를 검색한 후 이 레코드의 각 필드값을 입력 양식에 출력한다.
즉, [예제5.17]의 88행을 보면 각 사용자 정보의 오른쪽에 있는 [수정] 링크를 클릭했을때 해당 레코드의 아이디 값을 modifyform.html 파일로 함께 넘겨주게 된다. id 필드는 userdb 테이블에서 각 레코드를 유일하게 구별시켜주는 기본키(primary key)로 선언되어 있으므로 이 아이디 필드값을 변수 $id를 통해 전달함으로써 modifyform.html에서 수정하고자 하는 레코드를 검색하여 입력 양식에 출력하게 되는 것이다.
 
1~35행은 앞의 예제와 마찬가지로 "sample" 데이터베이스에 연결하는 코드이다.
38~53행에서는 프로그램 실행시 넘겨받은 레코드의 아이디값($id)을 이용하여 userdb 테이블에서 변수 $id와 동일한 값을 갖는 레코드를 검색하고 레코드의 각 필드값을 변수에 저장한다.
 
56~129행에서는 수정하고자 하는 사용자의 각각의 정보를 저장한 변수를 입력 양식에 출력한다. 여기서 사용자가 이름이나 아이디, 이메일, 성별, 마일리지, 사용자 등급 등의 정보를 수정하고 [사용자 정보 수정] 버튼을 클릭하면 56행에서 지정한 modify.html 스크립트로 입력 값을 전송한다. 이때 마찬가지로 현재 선택한 레코드의 아이디값을 함께 modify.html 파일에 함께 전송한다.
 
79~85행에서는 검색 결과로부터 가져온 레코드의 성별 필드의 값($sex)이 'M'인지 'F'인지에 따리 라디오버튼의 CHECKED 속성을 해당 항목에 지정함으로써 원래의 레코드가 가진 성별 값을 라디오버튼으로 표시한다.
98~109행 역시 마찬가지로 검색 결과로부터 가져온 레코드의 레벨 필드의 값에 다라 해당 리스트항목의 HTML 태그에 SELECTED 속성을 지정함으로써 원래의 사용자 등급을 표시한다.
 
사용자 정보를 수정한 뒤 [사용자 정보 수정] 버튼을 클릭하면 56행에서와 같이 사용자가 입력한 데이터가 사용자 정보 수정 스크립트 파일(modify.html)로 전송된다.
 
modify.html의 코드는 다음의 예제와 같다.
 

<html>
<head>
   <style type="text/css">
   <!--
   a:link,a:visited,a:active {
      text-decoration : none;
      font-size : 10pt;
   }
   a:hover {
      text-decoration : underline;
      color : red;
      font-size : 10pt;
   }
   BODY, TR, TD, TH {
      font-size : 10pt;
   }
   //-->
   </style>
</head>
<body>
 
<?
########## 데이터베이스 서버에 연결한다. ##########
$dbconn = mysql_connect("localhost","php","php99") or die("DB서버 연결에 실패하였습니다!");
 
########## 작업 데이터베이스로 sample을 선택한다. ##########
$status = mysql_select_db("sample",$dbconn);
if(!$status) {
   $errNO = mysql_errno($dbconn);
   $errMSG = mysql_error($dbconn);
   
   echo("서버의 sample 데이터베이스연결에 실패하였습니다!<br>");
   echo("에러코드 $errNO : $errMSG<br>");
   exit;
}
 
########## 수정하고자하는 id를 갖는 레코드의 각 데이터를 사용자가 입력한 값으로 수정한다. ##########
$query = "UPDATE userdb SET name = '$name', email = '$email', sex = '$sex', milage = '$milage', level = '$level' WHERE id  = '$id'";
$result = mysql_query($query,$dbconn);
if (!$result) {
   $errNO = mysql_errno($dbconn);
   $errMSG = mysql_error($dbconn);
      
   echo("에러코드 $errNO : $errMSG<br>");
   exit;
} else {
   ########## 성공적으로 수정이 되면 리스트 출력화면으로 이동한다. ##########
   echo("<meta http-equiv='Refresh' content='0; URL=list.html'>");
}   
?>

[예제] 사용자 정보 수정 스크립트(modify.html)
 
modify.html 스크립트에서는 38행에서 수정 입력 양식을 통해서 전달받은 id와 동일한 id값을 갖는 레코드를 검색하여 해당 레코드의 각 필드값을 사용자가 입력한 값으로 수정한다. 이때에는 UPDATE 명령문을 전달하며 성공적으로 수정이 되었을 경우 사용자 정보 출력 화면으로 이동한다.
 
4. 사용자 정보 삭제 루틴(deleteform.html, delete.html)
사용자 정보 삭제 루틴은 삭제할 레코드에 대한 정보를 출력하는 파일(deleteform.html)과 실제 레코드를 테이블에서 삭제하는 스크립트 파일(delete.html)로 구성된다.
 
다음은 사용자 정보 삭제 양식화면 코드이다.
 

 
<html>
<head>
   <style type="text/css">
   <!--
   a:link,a:visited,a:active {
      text-decoration : none;
      font-size : 10pt;
   }
   a:hover {
      text-decoration : underline;
      color : red;
      font-size : 10pt;
   }
   BODY, TR, TD, TH {
      font-size : 10pt;
   }
   //-->
   </style>
</head>
<body>
 
<?
########## 데이터베이스 서버에 연결한다. ##########
$dbconn = mysql_connect("localhost","php","php99") or die("DB서버 연결에 실패하였습니다!");
 
########## 작업 데이터베이스로 sample을 선택한다. ##########
$status = mysql_select_db("sample",$dbconn);
if(!$status) {
   $errNO = mysql_errno($dbconn);
   $errMSG = mysql_error($dbconn);
   
   echo("서버의 sample 데이터베이스연결에 실패하였습니다!<br>");
   echo("에러코드 $errNO : $errMSG<br>");
   exit;
}
 
########## 삭제하고자 하는 사용자의 데이터를 뽑아온다. ##########
$query = "SELECT name,id,email,sex,milage,level FROM userdb WHERE id = '$id'";
$result = mysql_query($query,$dbconn);
if(!$result) {
   $errNO = mysql_errno($dbconn);
   $errMSG = mysql_error($dbconn);
      
   echo("에러코드 $errNO : $errMSG<br>");
   exit;
}
 
$my_name = mysql_result($result,0,0);
$my_id = mysql_result($result,0,1);
$my_email = mysql_result($result,0,2);
$my_sex = mysql_result($result,0,3);
$my_milage = mysql_result($result,0,4);
$my_level = mysql_result($result,0,5);
?>
 
<form name="signform" method="post" action="delete.html?id=<?echo("$id")?>">
 
<table width="402" border="0" cellspacing="1" cellpadding="0" align="center">
<tr>
   <td bgColor="#8080FF">
 
   <table width="400" border="0" cellspacing="1" cellpadding="5" align="center">
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>이 름</font></td>
      <td width="280" bgColor="#FAFAEE"><?echo("$my_name")?></td>
   </tr>
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>아이디</font></td>
      <td width="280" bgColor="#FAFAEE"><?echo("$my_id")?></td>
   </tr>
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>이메일주소</font></td>
      <td width="280" bgColor="#FAFAEE"><?echo("$my_email")?></td>
   </tr>      
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>성별</font></td>
      <td width="280" bgColor="#FAFAEE"><?echo("$my_sex")?></td>
   </tr>   
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>마일리지</font></td>
      <td width="280" bgColor="#FAFAEE"><?echo("$my_milage")?></td>
   </tr>   
   <tr>
      <td width="220" align="center" bgColor="#CFD0ED"><font size=2>사용자등급</font></td>
      <td width="280" bgColor="#FAFAEE"><?echo("$my_level")?></td>
   </tr>   
   <tr>
      <td align="center" colspan="2" bgColor="#CFD0ED">
      <font size=2>
      <input type="submit" value="사용자정보 삭제">
      <input type="reset" value="취   소">
      </font>
      </td>
   </tr>
   </table>
 
   </td>
</tr>
</table>
 
</form>
 
</body>
</html>
 

[예] 사용자 정보 삭제 양식화면(deleteform.html)
 
앞에서와 마찬가지로 [예제5.22]의 1~35행은 "sample" 데이터베이스에 연결하는 코드이고 38~53행은 삭제하고자 하는 아이디로부터 해당 레코드를 검색하여 사용자 정보를 각 변수에 저장하는 코드이다.
56~101행에는 변수에 저장된 값을 테이블로 출력한다. 만일 사용자가 [사용자 정보 삭제] 버튼을 클릭하면 해당 사용자의 id 값이 delete.html 파일로 전달되어 이 스크립트에서 해당 id를 갖는 데이터를 검색하여 해당 레코드를 삭제하게 된다.
 
사용자 정보를 삭제하는 스크립트(delete.html)는 다음의 [예제5.23]과 같다.
 

<html>
<head>
   <style type="text/css">
   <!--
   a:link,a:visited,a:active {
      text-decoration : none;
      font-size : 10pt;
   }
   a:hover {
      text-decoration : underline;
      color : red;
      font-size : 10pt;
   }
   BODY, TR, TD, TH {
      font-size : 10pt;
   }
   //-->
   </style>
</head>
<body>
 
<?
########## 데이터베이스 서버에 연결한다. ##########
$dbconn = mysql_connect("localhost","php","php99") or die("DB서버 연결에 실패하였습니다!");
 
########## 작업 데이터베이스로 sample을 선택한다. ##########
$status = mysql_select_db("sample",$dbconn);
if(!$status) {
   $errNO = mysql_errno($dbconn);
   $errMSG = mysql_error($dbconn);
   
   echo("서버의 sample 데이터베이스연결에 실패하였습니다!<br>");
   echo("에러코드 $errNO : $errMSG<br>");
   exit;
}
 
########## 삭제하고자 하는 id를 갖는 레코드를 userdb테이블에서 삭제한다. ##########
$query = "DELETE FROM userdb WHERE id  = '$id'";   
$result = mysql_query($query,$dbconn);
if (!$result) {
   $errNO = mysql_errno($dbconn);
   $errMSG = mysql_error($dbconn);
      
   echo("에러코드 $errNO : $errMSG<br>");
   exit;
}
 
echo("<meta http-equiv='Refresh' content='0; URL=list.html'>");
?>
 

[예제] 사용자 정보 삭제 스크립트(delete.html)
 
[예제]의 delete.html 파일에서는 URL을 통해 전달받은 변수 $id와 id 필드값이 같은 레코드를 검색하여 일치하는 id를 갖는 레코드를 userdb 테이블에서 삭제한다.
 
지금까지 userdb 테이블을 대상으로 데이터를 생성, 수정, 삭제하는 프로그램의 코드를 살펴보았다.
이상과 같은 userdb 프로그램의 코드를 통해 데이터베이스 연결을 포함하는 웹 프로그램은 MySQL 서버에 대한 연결과 데이터베이스 선택, 쿼리 전송 그리고 쿼리 결과 출력과 서버 연결 해제라는 공통된 순서를 따름을 알 수 있다. 단지 전송되는 쿼리가 INSERT 문일 경우 새로운 사용자를 등록하는 루틴이 되고, UPDATE일 경우에는 수정, DELETE일 경우에는 삭제하는 루틴이 되는 것뿐이다.
[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.