비밀번호

  • 단순 설문 조사 (선택)

  • 짧은주소 : http://dreamphp.com/s/c0ea

  • 작 성 자 : BiHonHomepage

  • 조 회 수 : 7605

  • 등 록 일 : 2001-12-20 19:37:55

  • ▶ 단순 설문 조사 (선택)

    본문 내용이 마음에 들지 않아 새롭게 작성해보렵니다. (힘내자 힘~!)

    이번에 다룰 강의는 설문 조사 일명 투표에 대한 내용입니다. 강의 계획서가 사라지는
    바람에 잊고 있었던 주제였습니다. (나름대로 계획이 있었답니다.)

    많은 홈페이지에서 설문 조사를 사용하고 있습니다. 설문 조사에 대해 별도의 설명이
    필요없겠죠?

    아주 간단한 설문 조사 프로그램을 제작해볼 것입니다. 기능이 많아질수록 코드와
    설명의 양이 늘어나기 때문에 글쓰는 사람이나 보는 사람이나 힘들기 때문이죠.


    ▷ 설문 조사에 필요한 부분들에 대해 알아볼까요?

    - 질문이 필요합니다. 당연하죠.
    - 질문에 답할 수 있는 항목들이 필요합니다.
    - 해당 항목을 선택했을때 투표값이 1 증가해야합니다.
    - 중복 투표를 방지해야합니다. 공정성을 위해.
    - 투표 결과를 그래프 등을 이용해 깔끔하게 보여주면 좋겠죠?

    여기까지입니다. ^^


    ▷ 예제 질문과 항목

    ※ 좋아하는 게임 장르는?
    ① 액션/슈팅
    ② 롤플레잉
    ③ 어드벤쳐
    ④ 시뮬레이션
    ⑤ 퍼즐/퀴즈

    ...사실 "운영자 중 좋아하는 사람은? 제로/야미/lifesay/순진소녀/개굴펭귄/BiHon"
    이렇게 해볼까 했는데 계획을 변경했답니다. (하하하~ 어색;;;)


    ▷ 이제 예제 문서를 만들어볼까요?

    [index.html]
    --------------------------------------------------------------------------------
    <html>
    <head>
    <meta http-equiv='content-type' content='text/html; charset=euc-kr'>
    <title>::: BiHon's DreamPHP.com ::: - 단순 설문 조사 (선택)</title>
    <style>
    <!--
    body,td   { font-family:굴림체; font-size:9pt; }
    a:link    { color:#666666; text-decoration:none; }
    a:active  { color:#666666; text-decoration:none; }
    a:visited { color:#666666; text-decoration:none; }
    a:hover   { color:#666666; text-decoration:underline; }
    -->
    </style>
    </head>
    <body bgcolor='white' text='black' link='blue' vlink='purple' alink='red'>
    안녕하세요! 비혼입니다.<br><br>
    강의글의 예제를 위한 임시 문서입니다.<br><br><br>
    이번 강의글 주제는 "단순 설문 조사 (선택)"입니다. ^^<br><br>
    <table border='0' cellpadding='2' cellspacing='1' bgcolor='black'>
      <tr><td bgcolor='#CCCCCC'> ▷ 다음 중 좋아하는 게임 장르는? </td></tr>
      <tr><td bgcolor='#EEEEEE'> <a href='vote.php?no=1'>① 액션/슈팅</a></td></tr>
      <tr><td bgcolor='#EEEEEE'> <a href='vote.php?no=2'>② 롤플레잉</a></td></tr>
      <tr><td bgcolor='#EEEEEE'> <a href='vote.php?no=3'>③ 어드벤쳐</a></td></tr>
      <tr><td bgcolor='#EEEEEE'> <a href='vote.php?no=4'>④ 시뮬레이션</a></td></tr>
      <tr><td bgcolor='#EEEEEE'> <a href='vote.php?no=5'>⑤ 퍼즐/퀴즈</a></td></tr>
      <tr><td bgcolor='#CCCCCC' align='right'>결과보기 ◁ </td></tr>
    </table>
    <br>
    (결과보기는 다음 강의에 다룹니다)<br><br>
    1998-2001 by BiHon <a href='mailto:master@dreamphp.com'>master@dreamphp.com</a>
    </body>
    </html>
    --------------------------------------------------------------------------------
    - 미리보기 : http://dreamphp.com/study2/vote
    - 소스보기 : http://dreamphp.com/study2/vote/index.phps


    해당 문서를 보면 항목에 대해 vote.php?no=1 ... vote.php?no=5 등과 같이 번호를
    부여했습니다. 링크를 클릭했을 때 vote.php 파일에서 이 번호값을 가지고 처리하도록
    프로그램을 작성하면 됩니다.


    ▷ 투표를 처리하는 프로그램을 작성하자.

    먼저 코드를 보세요.

    [vote.php]
    --------------------------------------------------------------------------------
    <?

    // 제일 먼저 기본 설정을 합니다. (IP와 투표값이 기록되는 파일명 지정)
    $ip_file   = "ip.cgi";
    $vote_file = "vote.cgi";

    // 해당 파일이 없을 경우 기본값으로 생성을 해줍니다.
    if (!file_exists($ip_file)) { touch($ip_file); chmod($ip_file,0606); }
    if (!file_exists($vote_file)) {
      $vote_mp = fopen($vote_file,"w");
      fwrite($vote_mp,"0:0:0:0:0");
      fclose($vote_mp);
    }

    // 에러 메시지 출력 함수 (자바 스크립트)
    function message ($str) {
      echo "<script>window.alert('$str');history.go(-1);</script>"; exit;
    }

    // $no 값이 없을 경우 (또는 범위에 맞지 않을 경우 에러)
    if ($no<1 || $no>5) message("1~5번 항목 중에서 선택해주세요.");

    // 이제 해당 IP가 존재하는지 검사를 해야합니다.
    $ipp = @fopen($ip_file,"r"); // 읽기 모드로 파일을 열고
    $ip_data = @fread($ipp,filesize($ip_file)); // 파일의 크기만큼 내용을 읽은 후
    @fclose($ipp); // 파일을 닫습니다
    // 내용 안에서 IP가 발견되면 에러 메시지 출력
    if (strpos($ip_data,$REMOTE_ADDR)) message("이미 투표하셨습니다.");

    // 이제 투표값을 더합니다.
    $vote_temp = file($vote_file); // 투표값이 기록되는 파일을 배열 형태로 읽고
    $vote_data = explode(":",chop($vote_temp[0])); // : 기준으로 분리합니다
    $i = $no-1; // 배열은 0부터 시작하니 $no 값에서 1을 미리 빼줍니다
    $vote_data[$i]++; // 해당 배열의 값을 1 추가합니다.

    // 새로운 투표값을 파일에 기록합니다.
    $vp = fopen($vote_file,"w"); // 쓰기 모드로 파일을 열고
    fwrite($vp,implode(":",$vote_data)); // :을 이용해 배열의 값을 묶어 기록후
    fclose($vp); // 파일을 닫습니다

    // IP를 기록합니다.
    $ipp = fopen($ip_file,"a+"); // 추가 모드로 파일을 열고
    fwrite($ipp," $REMOTE_ADDR\n"); // IP를 기록하고
    fclose($ipp); // 파일을 닫습니다

    message("투표하였습니다.");
    ?>
    --------------------------------------------------------------------------------
    - 소스보기 : http://dreamphp.com/study2/vote/vote.phps


    짧은 코드며, 주석을 달아놓았기 때문에 이해하는데 어려움은 없을 것입니다. 모든
    명령은 기존의 강의에 다뤘었기 때문이죠. ^^


    ▷ 그럼에도 불구하고 간단한 설명을 추가

    1. 기본적인 설정을 합니다. 파일명을 변수로 지정해두면 이용이 편리하죠.

    2. 기본적인 파일을 생성합니다. IP의 경우 빈 파일을, 투표값이 저장되는 파일은
    숫자:숫자:숫자:숫자 형식으로 생성합니다. [이들 파일이 웹상에서 생성되기 때문에
    vite.php 파일이 있는 디렉토리의 권한이 707 등으로 설정되어 있어야 합니다.]

    3. 투표값의 범위가 맞지 않거나, 기존 파일에 IP가 있을 경우 에러를 출력합니다.

    4. 해당 투표값을 1 증가시킨 값과 IP를 파일에 각각 기록합니다.


    투표를 처리하는 부분은 끝났습니다. 통계를 보여주는 글만 작성하면 되겠군요. ^^

+ 이름

- 홈페이지

+ 내용

+ 비밀번호

* 4~20자

+ CAPTCHA

CAPTCHA Image [새로고침] (대소문자 무시)

  • 번호

  • 제목

  • 이름

  • 등록일

  • 조회수