웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
DB에서 각종 기념일을 내용,순서순으로 뽑아 정렬하기..
2005.03.17 10:42
군바리라..
2536 경교대 홈페이지를 관리하고 있습니다.
그런데 문득, 부대에서 생일자나 입대한지 1주년, 2주년 되었을 때를
홈페이지에 표시해 주는 기능이 있으면 좋지 않을까? 하는 생각이 들어,
바로 코딩에 들어가게 되었습니다.
여기저기서 보고 소스를 많이 참고하여 만들었습니다.
물론 데이터 입력폼, 리스트폼이 있어야 합니다.
데이터 베이스에 저장한 값으로는
이름 name
기수 th
생일 bira
입대일 ina
전역일 outa
입니다.
참고 : 원래 함수에 $num 값을 받아 갯수만큼ㅁ만 추출하려 했지만, 제대로 먹지를 않습니다.;;
때문에 rday 값으로 그 일정 기간만큼만 추출해줍니다.
<?
//1주년 예정자.
function birthday($num, $rday){
$today_t = mktime(0,0,0,date(m),date(d),date(Y)); //오늘의 타임스템프
$rday_s = $rday * 24 * 60 * 60; //몇일후일지 초로 환산
$total_t = $rday_s + $today_t + (60*60*24); //today timestamp 값+ 몇일후 = 총 timestamp 값
$query = "select * from date_table order by th";
include "./date/dbconn.html";
$result = mysql_query($query,$dbconn);
$total_record = mysql_num_rows($result);
$dc = '0'; //데이터카운터
/*
*
*
*
1주년 및 생일 추출
*
*
*/
/* 생일 추출 부분 */
for ($i = 0;$i < $total_record;$i++){
$data = mysql_fetch_array($result);
$입대일 = date("Y-m-d",$data[ina]); //입대일을 date값으로 환산
$입대일_배열 = explode("-",$입대일);
$temp_y = date(Y)+1; //내년
$입대일_t = mktime(23,57,0,$입대일_배열[1],$입대일_배열[2],date(Y)); //현재 "년도"의 입대일 월 일 의 timestamp 값을 구함
$입대일_tnext = mktime(23,56,0,$입대일_배열[1],$입대일_배열[2],$temp_y); //다음 "년도"의 입대일 월 일 의 timestamp 값을 구함
$일주년 = $입대일_배열[0] + 1;
$이주년 = $입대일_배열[0] + 2;
$생일 = date("Y-m-d",$data[bira]); //생일을 date값으로
$생일_배열 = explode("-",$생일); //배열로 저장
$생일_t = mktime(23,55,0,$생일_배열[1],$생일_배열[2],date(Y)); //생일의 월. 일의 현재년도의 값을 타입스템프로 저장.
$생일_tnext = mktime(23,58,0,$생일_배열[1],$생일_배열[2],$temp_y); //생일의 월. 일의 다음년도의 값을 타입스템프로 저장.
/* 1,2주년 추출 */
if($data[outa] >= time()){ //출력할 범위 설정 //
if($today_t <= $입대일_t && $입대일_t <= $total_t){
if ($일주년 == date(Y)){
$mark[$dc] = '1주년';
}
else if($이주년 == date(Y)){
$mark[$dc] = '2주년';
}
//echo "".$data[name]." ".$입대일_t." map : ".$map[$입대일_t]."
";
$기념일[$dc] = $data;
for ($i = 1;$i <= '10';$i++){
if ($tm[$dc-$i] == $입대일_t){
$입대일_t++;
}
}
//echo "".$data[name]." ".$입대일_t." map : ".$map[$입대일_t]."
";
while ($map[$입대일_t]){
$입대일_t++;
}
$tm[$dc]= $입대일_t;
$map[$입대일_t] = $dc;
$dc++;
//echo "".$data[name]." ".$입대일_t." map : ".$map[$입대일_t]."
";
}
if($today_t<= $입대일_tnext && $입대일_tnext <=$total_t ){
if ($일주년 == $temp_y){
$mark[$dc] = '1주년';
}
else if($이주년 == $temp_y){
$mark[$dc] = '2주년'+ ';
}
$기념일[$dc] = $data;
if ($tm[$dc-1] == $입대일_tnext){
$입대일_tnext++;
}
while ($map[$입대일_tnext]){
$입대일_tnext++;
}
$tm[$dc]= $입대일_tnext;
$map[$입대일_tnext] = $dc;
$dc++;
}
if($today_t <= $생일_t && $생일_t <= $total_t){
$mark[$dc] = '생일';
$기념일[$dc] = $data;
for ($i=1;$i <= $dc;$i++){
if ($tm[$dc-$i] == $생일_tnext){
$생일_tnext++;
}
}
$tm[$dc]= $생일_t;
$map[$생일_t] = $dc;
$dc++;
}
if($today_t <= $생일_tnext && $생일_tnext <= $total_t){
$mark[$dc] = '생일';
$기념일[$dc] = $data;
for ($i=1;$i <= $dc;$i++){
if ($tm[$dc-$i] == $생일_tnext){
$생일_tnext++;
}
}
//$micro = (double)microtime();
//$생일_tnext = doubleval($생일_tnext);
//$생일_tnext += $micro;
//$tm[$dc] = doubleval($tm[$dc]);
$tm[$dc]= $생일_tnext;
$map[$생일_tnext] = $dc;
$dc++;
}
}
}
if ($dc){ //시간순 정렬
sort($tm);
}
/**********test form*********************
*
* $test_temp = implode(" = ",$tm);
* $test_temp1[0] = $map[$tm[0]];
* $test_temp1[1] = $map[$tm[1]];
* $test_temp1[2] = $map[$tm[2]];
* $temp = implode(" : ",$test_temp1);
* echo (" $test_temp
$temp
");
****************************************/
//출력부분
$today = date("m-d");
$outdate = date("m-d",$total_t);
$subject_n = "대원 1, 2주년 및 생일";
//생일자 및 1주년 2주년자 추출
echo("
<table cellpadding = 4>
<tr>
<td align = center bgcolor = '#6F86BC'>
$subject_n
$today ~ $outdate 까지
</td>
</tr>
<tr>
<td bgcolor = '#F0F0F0'>
");
for($i = 0; $i < sizeof($tm) ; $i++){
$n = $map[$tm[$i]];
if ($mark[$n] == '생일'){
$출력일 = date("[m-d]", $기념일[$n][bira]);
}
else if ($mark[$n] == '1주년' || $mark[$n] == '2주년'){
$출력일 = date("[m-d]", $기념일[$n][ina]);
}
$p_th = $기념일[$n][th];
$p_name = $기념일[$n][name];
$p_mark = $mark[$n];
$string = "".$출력일."".$기념일[$n][th]."기 ".$기념일[$n][name]."-".$mark[$n]."";
if (!$map){
echo("
기간중 행사가 없습니다.
");
}
else{
echo("
$string
");
}
}
echo("
</td>
</tr>
</table>
");
}
?>
완성된 예제를 보시려면 http://ns2536.go.kr
왼쪽 하단을 보시면 됩니다.
2536 경교대 홈페이지를 관리하고 있습니다.
그런데 문득, 부대에서 생일자나 입대한지 1주년, 2주년 되었을 때를
홈페이지에 표시해 주는 기능이 있으면 좋지 않을까? 하는 생각이 들어,
바로 코딩에 들어가게 되었습니다.
여기저기서 보고 소스를 많이 참고하여 만들었습니다.
물론 데이터 입력폼, 리스트폼이 있어야 합니다.
데이터 베이스에 저장한 값으로는
이름 name
기수 th
생일 bira
입대일 ina
전역일 outa
입니다.
참고 : 원래 함수에 $num 값을 받아 갯수만큼ㅁ만 추출하려 했지만, 제대로 먹지를 않습니다.;;
때문에 rday 값으로 그 일정 기간만큼만 추출해줍니다.
<?
//1주년 예정자.
function birthday($num, $rday){
$today_t = mktime(0,0,0,date(m),date(d),date(Y)); //오늘의 타임스템프
$rday_s = $rday * 24 * 60 * 60; //몇일후일지 초로 환산
$total_t = $rday_s + $today_t + (60*60*24); //today timestamp 값+ 몇일후 = 총 timestamp 값
$query = "select * from date_table order by th";
include "./date/dbconn.html";
$result = mysql_query($query,$dbconn);
$total_record = mysql_num_rows($result);
$dc = '0'; //데이터카운터
/*
*
*
*
1주년 및 생일 추출
*
*
*/
/* 생일 추출 부분 */
for ($i = 0;$i < $total_record;$i++){
$data = mysql_fetch_array($result);
$입대일 = date("Y-m-d",$data[ina]); //입대일을 date값으로 환산
$입대일_배열 = explode("-",$입대일);
$temp_y = date(Y)+1; //내년
$입대일_t = mktime(23,57,0,$입대일_배열[1],$입대일_배열[2],date(Y)); //현재 "년도"의 입대일 월 일 의 timestamp 값을 구함
$입대일_tnext = mktime(23,56,0,$입대일_배열[1],$입대일_배열[2],$temp_y); //다음 "년도"의 입대일 월 일 의 timestamp 값을 구함
$일주년 = $입대일_배열[0] + 1;
$이주년 = $입대일_배열[0] + 2;
$생일 = date("Y-m-d",$data[bira]); //생일을 date값으로
$생일_배열 = explode("-",$생일); //배열로 저장
$생일_t = mktime(23,55,0,$생일_배열[1],$생일_배열[2],date(Y)); //생일의 월. 일의 현재년도의 값을 타입스템프로 저장.
$생일_tnext = mktime(23,58,0,$생일_배열[1],$생일_배열[2],$temp_y); //생일의 월. 일의 다음년도의 값을 타입스템프로 저장.
/* 1,2주년 추출 */
if($data[outa] >= time()){ //출력할 범위 설정 //
if($today_t <= $입대일_t && $입대일_t <= $total_t){
if ($일주년 == date(Y)){
$mark[$dc] = '1주년';
}
else if($이주년 == date(Y)){
$mark[$dc] = '2주년';
}
//echo "".$data[name]." ".$입대일_t." map : ".$map[$입대일_t]."
";
$기념일[$dc] = $data;
for ($i = 1;$i <= '10';$i++){
if ($tm[$dc-$i] == $입대일_t){
$입대일_t++;
}
}
//echo "".$data[name]." ".$입대일_t." map : ".$map[$입대일_t]."
";
while ($map[$입대일_t]){
$입대일_t++;
}
$tm[$dc]= $입대일_t;
$map[$입대일_t] = $dc;
$dc++;
//echo "".$data[name]." ".$입대일_t." map : ".$map[$입대일_t]."
";
}
if($today_t<= $입대일_tnext && $입대일_tnext <=$total_t ){
if ($일주년 == $temp_y){
$mark[$dc] = '1주년';
}
else if($이주년 == $temp_y){
$mark[$dc] = '2주년'+ ';
}
$기념일[$dc] = $data;
if ($tm[$dc-1] == $입대일_tnext){
$입대일_tnext++;
}
while ($map[$입대일_tnext]){
$입대일_tnext++;
}
$tm[$dc]= $입대일_tnext;
$map[$입대일_tnext] = $dc;
$dc++;
}
if($today_t <= $생일_t && $생일_t <= $total_t){
$mark[$dc] = '생일';
$기념일[$dc] = $data;
for ($i=1;$i <= $dc;$i++){
if ($tm[$dc-$i] == $생일_tnext){
$생일_tnext++;
}
}
$tm[$dc]= $생일_t;
$map[$생일_t] = $dc;
$dc++;
}
if($today_t <= $생일_tnext && $생일_tnext <= $total_t){
$mark[$dc] = '생일';
$기념일[$dc] = $data;
for ($i=1;$i <= $dc;$i++){
if ($tm[$dc-$i] == $생일_tnext){
$생일_tnext++;
}
}
//$micro = (double)microtime();
//$생일_tnext = doubleval($생일_tnext);
//$생일_tnext += $micro;
//$tm[$dc] = doubleval($tm[$dc]);
$tm[$dc]= $생일_tnext;
$map[$생일_tnext] = $dc;
$dc++;
}
}
}
if ($dc){ //시간순 정렬
sort($tm);
}
/**********test form*********************
*
* $test_temp = implode(" = ",$tm);
* $test_temp1[0] = $map[$tm[0]];
* $test_temp1[1] = $map[$tm[1]];
* $test_temp1[2] = $map[$tm[2]];
* $temp = implode(" : ",$test_temp1);
* echo (" $test_temp
$temp
");
****************************************/
//출력부분
$today = date("m-d");
$outdate = date("m-d",$total_t);
$subject_n = "대원 1, 2주년 및 생일";
//생일자 및 1주년 2주년자 추출
echo("
<table cellpadding = 4>
<tr>
<td align = center bgcolor = '#6F86BC'>
$subject_n
$today ~ $outdate 까지
</td>
</tr>
<tr>
<td bgcolor = '#F0F0F0'>
");
for($i = 0; $i < sizeof($tm) ; $i++){
$n = $map[$tm[$i]];
if ($mark[$n] == '생일'){
$출력일 = date("[m-d]", $기념일[$n][bira]);
}
else if ($mark[$n] == '1주년' || $mark[$n] == '2주년'){
$출력일 = date("[m-d]", $기념일[$n][ina]);
}
$p_th = $기념일[$n][th];
$p_name = $기념일[$n][name];
$p_mark = $mark[$n];
$string = "".$출력일."".$기념일[$n][th]."기 ".$기념일[$n][name]."-".$mark[$n]."";
if (!$map){
echo("
기간중 행사가 없습니다.
");
}
else{
echo("
$string
");
}
}
echo("
</td>
</tr>
</table>
");
}
?>
완성된 예제를 보시려면 http://ns2536.go.kr
왼쪽 하단을 보시면 됩니다.
댓글 0
제목 | 글쓴이 | 날짜 |
---|---|---|
나만의 미니홈 만들기 ㅡ 간단한 최근글 불러오기 [6] | 예뜨락 | 2005.05.09 |
나만의 미니홈 만들기 ㅡ password.php [8] | 예뜨락 | 2005.05.07 |
winamp 방송정보 읽어오기 심각한 문제해결 | 이승원 | 2005.05.04 |
[초보]아주쉬운 PHP로 그림에 글자 입히기 [11] | 김규백 | 2005.04.04 |
DB에서 각종 기념일을 내용,순서순으로 뽑아 정렬하기.. | 박순영 | 2005.03.17 |
ASC(순차), DESC(역순) 정렬하기. [4] | Xian | 2005.03.03 |
사용자 등록/DB생성/테이블 생성 [3] | QQQ | 2005.03.03 |
[날짜 구하는함수업]내일 날짜와 1년 후 년도 구하기 [8] | ssukai | 2005.02.24 |
자바스크립트 단축키 지정을 쉽게하자. [1] | 권태수 | 2005.02.14 |
내 컴퓨터가 표현할 수 있는 문자들. [6] | 최호성 | 2005.01.30 |
게시판 테이블 생성을 쉽게하자. [2] | QQQ | 2005.01.29 |
날짜 구하는 함수.. ... [3] | 김명현 | 2005.01.24 |
우리가 사랑한지 몇일째 날짜세주는 PHP 소스 [12] | 레드 | 2005.01.16 |
PHP 왕초보 입문기(총괄) [4] | 하나둘 | 2005.01.15 |
퍼미션을 보기좋게 구하자! [4] | 플로렐라 | 2005.01.03 |
나만의 미니홈 만들기 ㅡ delete.php 파일 [2] | 예뜨락 | 2005.01.03 |
"를 그냥 사용하기 [3] | 추천대화상대 | 2005.01.02 |
IE 에서도 투명 알파값이 적용된 PNG 이미지를 맘껏 활용하자! [8] | THE PAPER™ | 2004.12.27 |
4. 쿼리문 [6] | 티다 | 2004.12.11 |
'참조'에 관한 간단한 예제 | 플로렐라 | 2004.12.09 |