본문 바로가기
셈틀 Com/제로보드

회원가입시 음력사용가능 하게 만들기

by 길목 2005. 5. 24.
<제로보드 수정을 위해 어디에선가 퍼온 소스같음>


암튼... 제가 사용한 방법은 우선 회원들의 음력생일을 받기 위해서 member_join.php와 member_modify.php 파일에 있는 "공개" 옵션을 "음력" 옵션으로 전환해서 사용했습니다. (이 과정에서 원본에서는 선택적으로 사용할 수 있었던 공개여부를 전부 공개되도록 했습니다. 아래 내용을 보시면 압니다^^)

먼저 member_join.php 파일을 열어서 아래와 같은 부분을 찾으세요.

<input type=checkbox value=1 checked name=open_birth> 공개

위와 같은 부분을 전 아래와 같이 수정했습니다. (음력 생일을 받기 위해서...)

<input type=hidden value=0 name=open_birth><input type=checkbox value=1 name=open_birth>음력


참.... 위에 보시면 name=open_birth 라는 부분이 있는데... 원래는 생일의 공개여부를 체크하는 내용이었지만, 그냥 그대로 사용하면서 생일의 음력여부를 체크하는 것으로 사용하고자 했습니다. (원본을 최대한 건드리지 않기 위해서^^) 따라서 제가 쓰고 있는 글에서 open_birth라는 것은 생일의 공개여부가 아니라 음력을 나타낸다는 점을 꼭 기억하셔야 합니다.



그리고... member_modify.php 파일을 열어서 아래와 같은 부분을 찾으세요.

<? if($group_data[use_birth]) { ?>
<tr height=28 align=right>
    <td style=font-family:Tahoma;font-size:8pt;><b>Birthday </td>
    <td align=left> <input type=text name=birth_1 size=4 maxlength=4 value="<?=date("Y",$member[birth])?>" style=border-color:#d8b3b3 class=input> 년
                    <input type=text name=birth_2 size=2 maxlength=2 value="<?=date("m",$member[birth])?>" style=border-color:#d8b3b3 class=input> 월
                    <input type=text name=birth_3 size=2 maxlength=2 value="<?=date("d",$member[birth])?>" style=border-color:#d8b3b3 class=input> 일
         <input type=checkbox value=1 name=open_birth <?=$check[$member[open_birth]]?>> 공개
</tr>        <tr>
         <td colspan="5" bgcolor="#EBD9D9" align="center"><img src="images/t.gif" width="10" height="1"></td>
       </tr>
<? } ?>

위와 같은 부분을 찾으셨으면... <? if($group_data[use_birth]) { ?>와  <? } ?>를 삭제합니다. (모두 공개되도록...) 그리고....

<input type=checkbox value=1 name=open_birth <?=$check[$member[open_birth]]?>> 공개

위와 같은 부분을 아래와 같이 수정합니다.

<input type=hidden value=0 name=open_birth><input type=checkbox value=1 name=open_birth <?=$check[$member[open_birth]]?>>음력

이렇게 해서 회원들이 가입하거나 회원정보를 수정할 때 음력생일을 처리할 수 있도록 했습니다.


이제 아래와 같은 내용으로 birth.php 파일을 만들고 첨부된 파일을 풀어서 얻은 luncal.inc 두 개의 파일을 계정에 올린 후 사용하시면 됩니다.

제가 사용한 음력/양력 생일자를 위한 월별 생일자 표시 방법은.... 아래 하나하나 설명을 하도록 하겠습니다^^ (혹시 제 설명 중 틀리는 부분이 있으면 고수님들께서 지적해 주세요. 위에서 말했지만... 제가 원래 PHP는 모르는 사람이거든요^^)


<?
$디비호스트 = "  ";
$디비아이디 = "  ";
$디비비밀번호 = "  ";
$디비네임 = "  ";
$제로보드경로 = ".";
$conn=mysql_connect($디비호스트,$디비아이디,$디비비밀번호);
mysql_select_db($디비네임, $conn);
// 위의 내용은 개인환경에 맞게 입력하시고...


include ("luncal.inc");
// 첨부된 압축파일의 php 파일을 인클루드합니다.

$now_month = date("n");
$now_day   = date("n월 d일");

$now_year  = date("Y");
$now_month = date("n");
$now_day   = date("d");

$sol2lun_day   = sol2lun($now_year,$now_month,$now_day);  // 오늘 날짜가 음력으로 며칠인지 계산합니다

//$sol2lun_day   = date("$sol2lun_day[1].$sol2lun_day[2]"); // 위에서 계산된 오늘의 음력 날짜...
$sol2lun_month = date("$sol2lun_day[1]"); // 위에서 오늘 날짜를 음력으로 전환했을 때, 오늘은 음력 몇 월인지...
$sol2lun_month_1 = date("$sol2lun_day[1]")-1; // 위의 결과보다 음력으로 한 달 전...
$sol2lun_month_2 = date("$sol2lun_day[1]")+1; // 위의 결과보다 음력으로 한 달 후...


$result=mysql_query("select user_id, name, no, birth, open_birth from zetyx_member_table where (from_unixtime(birth,'%c')='$now_month' and open_birth='0') or (from_unixtime(birth,'%c')='$sol2lun_month' and open_birth='1') or (from_unixtime(birth,'%c')='$sol2lun_month_1' and open_birth='1') or (from_unixtime(birth,'%c')='$sol2lun_month_2' and open_birth='1') order by from_unixtime(birth,'%c.%d') asc", $conn);

// 이 부분이 가장 중요한 부분 중 하나입니다. 음력 생일자를 추출해 오는 과정이니까요.

// from_unixtime(birth,'%c')='$now_month' and open_birth='0'
// 우선 양력생일을 사용하는 회원 중 이달에 생일이 있는 회원의 정보를 가져옵니다.

// 이번달 양력 5월은 음력 3월 19일부터 4월 20일까지가 포함된다는 사실을 먼저 기억하시구요...

// from_unixtime(birth,'%c')='$sol2lun_month_1' and open_birth='1'
// 음력생일자의 생월이 오늘날짜를 음력으로 전환해서 얻은 음력월보다 한 달 이전인 회원의 정보를 가져옵니다.

// from_unixtime(birth,'%c')='$sol2lun_month' and open_birth='1'
// 음력생일자의 생월이 오늘날짜를 음력으로 전환해서 얻은 음력월과 같은 회원의 정보를 가져옵니다.

// from_unixtime(birth,'%c')='$sol2lun_month_2' and open_birth='1'
// 음력생일자의 생월이 오늘날짜를 음력으로 전환해서 얻은 음력월보다 한 달 이후인 회원의 정보를 가져옵니다.

// 위와 같이 세 달의 정보를 가져오는 것은.... 오늘의 음력날짜가 음력 3월일 경우(그러니까 양력으로 5월 초순) $sol2lun_month와 함께 음력 4월인 $sol2lun_month_2의 정보도 필요하며... 오늘의 날짜가 음력 4월일 경우(그러니까 양력으로 5월 하순) $sol2lun_month와 함께 음력 3월을 규정하는 $sol2lun_month_1의 정보도 필요하기 때문입니다.

// 천천히 생각해 보시면 아시겠지만... 위와 같이 해야 별다른 문제가 없을 것 같습니다^^

$total=mysql_num_rows($result);

if ($total)        {
for ($i=1; $i<=$total; $i++)         {
$frev=mysql_fetch_array($result);
$data[user_id]=$frev["user_id"];
$data[name]=$frev["name"];
$data[no]=$frev["no"];
$data[birth]=date("n월 d일", $frev[birth]);
$data[birth_]=date("n.d", $frev[birth]);  // 개인적으로 보다 나은 생일자 표시를 위해서 같은 데이터($frev[birth])의 표현방식을 $data[birth]와 $data[birth_]에서 두 가지로 정의했습니다.
$data[open_birth]=$frev["open_birth"];

$lun2sol_year  = date("Y");
$lun2sol_month = date("n", $frev[birth]);
$lun2sol_day   = date("d", $frev[birth]);

$lun2sol_day   = lun2sol($lun2sol_year,$lun2sol_month,$lun2sol_day);  // 위의 내용은 위에서 추출된 회원의 생일을 음력으로 가정하고 양력날짜로 전환한 것입니다.

$lun2sol_month = date("$lun2sol_day[1]"); // 음력생일을 양력으로 전환한 값의 양력월
$lun2sol_day   = date("$lun2sol_day[1]월 $lun2sol_day[2]일"); // 음력생일을 양력으로 전환한 값의 날짜

// 아래는 표현방식...

// 우선.... 양력생일자($data[open_birth]==0) 전체를 아이디와 이름 양력생일로 보여주고...

// 음력 생일자($data[open_birth]==1) 중에서 양력으로 전환된 생일값의 월이 이번달과 같은 회원( $lun2sol_month==$now_month)은 아이디와 이름, 그리고 양력생일과 음력생일을 보여주는 것입니다.

// 그리고 나머지... 그러니까 음력 생일자 중에서 이번달에 생일이 아닌 회원은 그냥 공란으로 표시합니다.

if ( $data[open_birth]==0 )
echo " <a href=void(window.open('./view_info.php?member_no=$data[no]','view_info','width=400,height=510,toolbar=no,scrollbars=yes'))>$data[user_id] $data[name] - $data[birth]</a></p> ";
elseif ( $data[open_birth]==1 && $lun2sol_month==$now_month )
echo " <a href=void(window.open('./view_info.php?member_no=$data[no]','view_info','width=400,height=510,toolbar=no,scrollbars=yes'))>$data[user_id] $data[name] - $lun2sol_day(음$data[birth_])</a></p> ";
else
echo " ";
}
echo " ";
}

mysql_close($conn);
?>




실제 birth.php 파일은 아래 첨부한 파일로...마퀴태그 써넣으것...

댓글