웹 컨설팅의 동반자 PHP(II)

양일등 / FBISKR@orgio.net

 

     

    안녕하세요! PHP Power User 여러분! 6월이 되니 제법 더운 것이 여름이 우리에게 한 걸음 다가온 것 같습니다. 이번 호에서는 간단한 WEB Program을 만들어 보면서 PHP의 실제 사용을 알아 보겠습니다.

 

1.제작구성

    우리말에 ‘한번 부딪혀 보자’, ‘모르고 가도 서울만 가면 된다’라는 말이 있습니다. 이 말은 옳은 경우도 있지만, 프로그램의 생산성과 관련지어 보면 맞지가 않습니다. 철저한 준비없이 개발에 들어간다면(너무나 간단해서 10줄도 안되는 것일지라도 이것이 클래스의 모듈이거나 독립함수일 경우에 전체에 미치는 영향등을 고려해야 함) 나중에 디버깅과 제작방향의 수정으로 비용이 더 들어갑니다. 우리가 광속의 속도를 이야기하면 실제 감이 안오는 이야기도 껌 한 개와 자동차 한대 값이라는 실제적인 이야기로 비교해 보면 이해가 갈 것입니다. 자 그럼 시작하기에 앞서 너무나 중요한 설계를 해보겠습니다.

 

2. 설계

    시스템 운용환경
    OS : LINUX
    WEB SERVER : APACHE
    SCRIPT LANGUAGE : PHP
    DATABASE : mSQL

    개발목적
    회원관리(입력/전체조회)
     

    DATA FORMAT
      db name : test
      table structure
            create table user_info
            (
                        r_id int,
                        r_name char(20),
                        r_id_num char(20),
                        r_address char(20),
                        r_work_address char(20),
                        r_email_address char(20),
                        r_tel_number char(20)
            )

    create sequence on user_info step 1 value 1


    mSQL의 sequence기능을 회원 ID를 생성함.

    파일 구조
    data.txt  데이터 구조를 문서화 한 파일
    index.php3  초기 메뉴 화면
    user_add.php3  사용자 입력 화면
    user_process.php3  입력 처리 화면
    user_show.php3  사용자 정보 출력 화면

    요약
    등록이 안된 사용자가 처음 접속할 때는 사용자 입력 화면이 나오고 등록이 된 사용자는 해당컴퓨터의 사용자의 이름이 출력됨

 

3. 예상실행화면

    실행화면(가입하지 않은 사용자의 초기 실행화면 : index.php3)

    가입신청화면(user_add.php3)

    오류발생화면(user_process.php3)

    정상입력화면(user_process.php3)

    가입 후 인덱스 화면(index.php3)

    회원등록정보(user_show.php3)

     

4. 소스분석

 

4-1 index.php3
 

    <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0//EN”>
    <html>
    <head>
    <title>Untitled</title>
    <meta name=”generator” content=”Namo WebEditor v3.0”>
    <style><!--
    .leading200 { line-height: 200% }
    .leading180 { line-height: 180% }
    .leading150 { line-height: 150% }
    .leading100 { line-height: 100% }
    -->
    </style>
    </head>

    <body bgcolor=”white” text=”black” link=”blue” vlink=”purple” alink=”red”>

    <p align=”center”><font face=”돋움체” size=”7”><b><u>회원가입 시험 페이지</u></b></font></p>
    <p align=”center”>&nbsp;</p>

    <%
           if ( $user_id <> “” ):

      $conn = msql_connect();

      msql_select_db(“test”, $conn);

      $sql = “select r_name from user_info where r_id = $user_id”;

      $result = msql_query($sql, $conn);

      $data=msql_fetch_row($result);

           msql_close($conn);
    %>

    <p align=”center”><font face=”돋움체” size=”4”><b>&nbsp;<? echo $data[0]; ?>님 환영합니다.</b></font></p>

    <%
           endif;
    %>

    <%
           if ( $user_id == “” ):
    %>

    <p align=”center”><a href=”user_add.php3”><font face=”돋움체” size=”4”><b><u>가입신청</u></b></font></a></p>

    <%
           endif;
    %>

    </body>

    </html>

 

    index.php3는 두분이 화면을 가지고 있습니다. 하나는 user_id가 있는 부분이고 다른 하나는 없는 부분입니다. user_id 부분에서 쿠키의 값을 검사합니다. 검사를 하고 쿠키의 값이 존재하면 if ( $user_id <> “” ): 그 사람의 신상정보를 mSQL에서 얻어 옵니다.
    이것을 if(): endif;로 처리합니다. 형식은 테그와 기타 코드를 블록화 시킬 수 있습니다. 다른 부분은 if ( $user_id == “” ): 은 가입신청이라는 하이퍼 링크를 생성시킵니다. 쿠키가 존재하면 자동으로 PHP가 변수로 만들어 놓기 때문에 쿠키의 값을 검사할 수 있습니다.

 

4-2 user_add.php3
 

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0//EN”>
<html>
<head>
<title>회 원 가 입 신 청 서</title>
<meta name=”generator” content=”Namo WebEditor v3.0”>
<style><!--
.leading200 { line-height: 200% }
.leading180 { line-height: 180% }
.leading150 { line-height: 150% }
.leading100 { line-height: 100% }
-->
</style>
</head>

<body bgcolor=”white” text=”black” link=”blue” vlink=”purple” alink=”red”>

<form name=”form” method=”get” action=”user_process.php3”>
<p align=”center”><font face=”돋움체” size=”7”><b>회 원 가 입 신 청 서</b></font></p>
<p align=”left”>&nbsp;
<table border>
   <tr>
      <td width=”141”><p align=”center”><font face=”돋움체” size=”4”><b>성
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;명
          </b></font></td>
      <td width=”818”><p align=”left”>&nbsp;<input type=”text” name=”r_name”></td>
   </tr>
   <tr>
      <td width=”141” height=”18”><p align=”center”><font face=”돋움체” size=”4”><b>주민등록번호</b></font></td>
      <td width=”818” height=”18”><p align=”left”>&nbsp;<input type=”text”name=”r_id_num”></td>
   </tr>
   <tr>
      <td width=”141” height=”20”><p align=”center”><font face=”돋움체” size=”4”><b>주           &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;소
          </b></font></td>
      <td width=”818” height=”20”><p align=”left”>&nbsp;<input type=”text”name=”r_address” size=”114”></td>
   </tr>
   <tr>
      <td width=”141”><p align=”center”><font face=”돋움체” size=”4”><b>직장 &nbsp;주 소</b></font></td>
      <td width=”818”><p align=”left”>&nbsp;<input type=”text” name=”r_work_address” size=”114”></td>
   </tr>
   <tr>
      <td width=”141”><p align=”center”><font face=”돋움체” size=”4”><b>전자우편주소</b></font></td>
      <td width=”818”><p align=”left”>&nbsp;<input type=”text” name=”r_email_address” size=”33”></td>
   </tr>
   <tr>
      <td width=”141”><p align=”center”><font face=”돋움체” size=”4”><b>연 &nbsp;&nbsp;락 &nbsp;&nbsp;처          </b></font></td>
      <td width=”818”><p align=”left”>&nbsp;<input type=”text” name=”r_tel_number”></td>
   </tr>
</table>
<p align=”left”>&nbsp;</p>
<p align=”center”><font face=”돋움체” size=”4”><b><input type=”submit” name=”submit” value=”가입“></b></font></p>
<p align=”center”>&nbsp;</p>
<p align=”left”>&nbsp;</p>
<p align=”left”>&nbsp;</p>
<p align=”center”>&nbsp;</p></form>

</body>

</html>

 

    user_add.php3는 단순히 태그로 나열되었습니다. 실제 처리 작업은 user_process.php3가 실행합니다.

 

4-3 user_process.php3
 

    <%
             $flag = 1;

      if ($r_name == “” )
      $flag = 0;

      if ($r_id_num == “” )
      $flag = 0;

      if ($r_address == “” )
      $flag = 0;

      if ($r_work_address == “” )
      $flag = 0;

      if ($r_email_address == “”)
      $flag = 0;

      if ($r_tel_number == “” )
      $flag = 0;

      if ($flag == 1)
      {
               $conn = msql_connect();

        msql_select_db(“test”, $conn);

        $sql = “select _seq from user_info”;

        $result = msql_query($sql, $conn);

        $data=msql_fetch_row($result);

        $tmp_id = $data[0];

                      $sql = “insert into user_info values ( $tmp_id, ‘$r_name’, ‘$r_id_num’, ‘$r_address’, ‘$r_work_address’, ‘$r_email_address’, ‘$r_tel_number’)”;

        msql_query($sql, $conn);

        msql_close($conn);

                      setcookie(“user_id”, $tmp_id, time()+3600*360);
             }
    %>

    <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0//EN”>
    <html>
    <head>
    <title>가입이 완료되었습니다.</title>
    <meta name=”generator” content=”Namo WebEditor v3.0”>
    <style><!--
    .leading200 { line-height: 200% }
    .leading180 { line-height: 180% }
    .leading150 { line-height: 150% }
    .leading100 { line-height: 100% }
    -->
    </style>

    <script language=”JavaScript”>
    <!--
    function namosw_goto(url, targetstr)
    {
       if (url == ‘backward’)
         history.back(1);
       else if (url == ‘forward’)
         history.forward(1);
       else {
         var frameobj = eval(targetstr);
         frameobj.location = url;
       }
    }

    //-->
    </script>

    </head>

    <body bgcolor=”white” text=”black” link=”blue” vlink=”purple” alink=”red”>

    <%
             if ($flag == 1):
    %>

    <p align=”center”><font face=”돋움체” size=”5”><b>가입이 완료되었습니다.</b></font></p>
    <form name=”form” method=”get”>
    <p align=”center”><font face=”돋움체” size=”5”><b><input type=”button” value=”돌아가기”
    onclick=”namosw_goto(‘index.php3’, ‘self’)”></b></font></p>
    </form>
    <p align=”center”>&nbsp;</p>

    <%
             endif;
    %>

    <%
             if($flag == 0 ):
    %>

    <p align=”center”><font face=”돋움체” size=”5”><b>가입도중 오류가 발생했습니다. 올바른 자료를 입력하세요.</b></font></p>
    <form name=”form” method=”get”>
    <p align=”center”><font face=”돋움체” size=”5”><b><input type=”button”value=”다시입력” onclick=”namosw_goto(‘user_add.php3’, ‘self’)”></b></font></p>

    <%
             endif;
    %>

    </form>
    <p align=”center”>&nbsp;</p>
    <p align=”center”>&nbsp;</p>
    <p align=”center”>&nbsp;</p>
    </body>

    </html>

 

    user_process.php3도 두개의 페이지가 들어가 있습니다. 사용자 등록 확인 페이지와 오류 생성 페이지입니다. 처음에 flag를 1로 세팅하여 오류에 발생하면 0으로 세팅합니다. 이것은 뒤에 오류발생 페이지의 생성 근거를 제공합니다. 모든 검사를 마친 후에(주로 공백검사)는 데이터 베이스에 등록을 합니다. 여기에 독자들이 좀더 세분화된 오류 검사 루틴을 넣을 수 있습니다. 그 다음 등록된 사용자가 index.php3 에 다시 접속할 때 setcookie(“user_id”, $tmp_id, time()+3600*360);를 설정하여 이름을 출력하는 근거를 만듭니다. 아래로 내려와서 flag의 값에 따라 두 개의 페이지를 출력합니다.

 

4-4 user_show.php3
 

    <%
             $conn = msql_connect();

      msql_select_db(“test”, $conn);

      $sql = “select * from user_info”;

      $result = msql_query($sql, $conn);

    %>

    <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0//EN”>
    <html>
    <head>
    <title>가입자 현황</title>
    <meta name=”generator” content=”Namo WebEditor v3.0”>
    </head>

    <body bgcolor=”white” text=”black” link=”blue” vlink=”purple” alink=”red”>

    <p align=”center”><font face=”돋움체” size=”7”><b><u>가입자 현황</u></b></font></p>
    <p align=”center”>&nbsp;
    <table border>
          <tr>
          <td width=”155”><p align=”center”><font face=”돋움체” size=”4”><b>이름
          </b></font></td>
          <td width=”155”><p align=”center”><font face=”돋움체” size=”4”><b>주민등록번호
          </b></font></td>
          <td width=”155”><p align=”center”><font face=”돋움체” size=”4”><b>주소
          </b></font></td>
          <td width=”155”><p align=”center”><font face=”돋움체” size=”4”><b>직장주소
          </b></font></td>
          <td width=”155”><p align=”center”><font face=”돋움체” size=”4”><b>전자메일
          </b></font></td>
          <td width=”155”><p align=”center”><font face=”돋움체” size=”4”><b>전화번호
          </b></font></td>
          </tr>

    <%
             $rows = msql_num_rows($result);

             for($a=0; $a<$rows; $a++):

             $data=msql_fetch_row($result);
    %>
          <tr>
             <td width=”155”><p>&nbsp;<% echo $data[1]; %></td>
             <td width=”155”><p>&nbsp;<% echo $data[2]; %></td>
             <td width=”155”><p>&nbsp;<% echo $data[3]; %></td>
             <td width=”155”><p>&nbsp;<% echo $data[4]; %></td>
             <td width=”155”><p>&nbsp;<% echo $data[5]; %></td>
             <td width=”155”><p>&nbsp;<% echo $data[6]; %></td>
          </tr>
    <%
             endfor;
    %>

    </table>
    <p align=”center”>&nbsp;</p>
    </body>

    </html>

    <%
             msql_close($conn);
    %>

 

    user_show.php3는 단순히 등록된 사용자를 출력합니다. 여기서도 역시 블록 for문을 사용하여 연속된 테이블에 데이터를 나타내고 있습니다. 여기서 좀더 코드를 사용하면 페이지를 분할하여 나타낼 수 있습니다. 그러고 보면 우리가 다른 페이지를 한번 클릭할 때마다 데이터 베이스가 쿼리를 실행하니 데이터베이스들의 마술에 가까운 데이터 수집 능력에 경탄을 하지 않을 수 없습니다.

 

5. 마치며

    정말 간단한 Web Program입니다. 하지만 처음 연재에서처럼 아무리 간단한 Web Program이라도 개발환경의 열악한 조건 때문에 그리 간단하지 않습니다. 특히 페이지가 여러 개로 분할되어 그 각각의 쓰임새에 대한 정확한 정의와 구성을 하기가 참 까다롭습니다. 그래서 모 채팅사이트의 Web Program을 보면 정말 경탄을 금할 수 없습니다. 그럼 좋은 하루되세요.




▲ top

home으로...