현재 접속자 (php+자바 스크립트 이용해 색 다르게 표현하기) > 유익한 싸이트

본문 바로가기
 

현재 접속자 (php+자바 스크립트 이용해 색 다르게 표현하기)

페이지 정보

작성자 이름으로 검색 댓글 0건 조회 14,909회 작성일 06-07-12 00:10

본문

팁코리아에 올렸던 내용인데 반응이 나쁘지 않아서 올려봅니다



php와 자바 스크립트를 적절하게 합쳐서 만든 현재 접속자 소스입니다

제 홈에서 올초에 만들어 쓰고 있는데 그리 나쁘지는 않습니다



자바 스크립트의 innerHTML을 이용해서 히든으로 잡아둔 아이프레임에서

리로드 한후 부모창(메인 인덱스 페이지)의 현재 접속자의 아이디 값을

가진 부분에 뿌려줍니다 



일종의 세이클럽의 메일이나 쪽지를 생각하시면 됩니다

제로보드의 이름레이어도 설정해 봤었는데 소스가 중복되어지는게 많아서 파일이 뚱뚱해

지더군요 그래서  빼버렸습니다



내공이 쌓이면 다음에 한번 내놓죠



특징은

보여지는 부분이 리로드 되는게 아닌 자바 스크립트로 쏴주는 방식이기에

아이프레임의 리로드 되면서 현재 접속자 부분이 잠깐씩 버벅이는 현상이 해소됩니다

보기에도 깔끔하구요



또한 쪽지가 있을 경우 자동으로 팝업됩니다

접속자 클릭하면 쪽지 보내기 창 뜨구요





이하 소스라고 써진 부분을

member_connect.php로 저장하신후 인덱스 선상에 업로드 하신후

아래의 소스를 인덱스 페이지 맨 밑에 넣어 두시면 됩니다 어디든 괜챦지만 맨 밑에 두는게

제일 낫더군요



<IFRAME name=iframe2 align=top marginWidth=0 marginHeight=0 src="member_connect.php" frameBorder=0 width="0" height="0" scrolling=auto></IFRAME>



이하 소스

-------------------------------------------------------------------------------





<?//디비 연결

  $_zb_url ="홈주소/bbs/";

  $_zb_path ="제로보드 상대주소";

  include $_zb_path."outlogin.php";



  $member=member_info();



  //읽지 않은 쪽지의 갯수



  $temp1=mysql_fetch_array(mysql_query("select count(*) from $get_memo_table where readed='1' and member_no='$member[no]'"));



  $new_total=$temp1[0];





  //현재 접속자 파일을 열어서 :을 기준으로 배열을 쪼개서 갯수를 세어 현재 인원을 체크

  $_str = trim(zReadFile("$_zb_path/data/now_member_connect.php"));

  if($_str) {

  $_str = str_replace("<?/*","",$_str);

  $_str = str_replace("*/?>","",$_str);

  $_connector = explode(":",$_str);

  $total = count($_connector);

  }



  //회원의 데이터 불러오기

  $data=mysql_fetch_array(mysql_query("select * from $member_table where no='$member[no]'"));



?>



<html>



<head>

<title>현재 접속자</title>

<meta name="generator" content="Namo WebEditor v4.0">



<?//멤버이면서 자신의 쪽지함에 읽지 않은 메모가 하나 이상일 때 쪽지 알림 작동;

if($member&&$new_total>=1&&$data[new_memo]!=0){?> 

<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0' width='0' height='0'>

<param name=menu value=false>

<param name=wmode value=transparent>

<param name=movie value='쪽지알림음주소'>

<param name=quality value=low>

<param name='LOOP' value='false'>

<embed src='memo.swf' quality=low pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash' type='application/x-shockwave-flash' width='0' height='0' loop='false' wmode=transparent menu='false'>

</embed>

</object><?}?> 



<script language="JavaScript">

function popup()

{

  window.open('<?=$_zb_url?>member_memo.php', 'newmemo', 'left=300,top=150,width=400,height=430,toolbar=no,menubar=no,status=no,scrollbars=yes,resizable=no');

}

window.setTimeout('window.location.reload()',30000); //30초마다 리플리쉬 시킨다 1000이 1초가 된다.





// 이후의 자바스크립트는 리플레쉬 되면서 innerHTML을 이용해 부모창에 실시간으로 기록 시켜줌



var contac_member = "";//변수에 대입





contac_member  = "<table cellspacing=0 cellpadding=0 width=100%>";

<?

for($loop_number=0;$loop_number<$total;$loop_number++) {

        $member_no = substr($_connector[$loop_number],12);

                $s_que = " where no = '$member_no' ";

                $que = "select * from $member_table $s_que";

                $result=mysql_query($que) or Error(mysql_error());

                $data=mysql_fetch_array($result);

                $name=stripslashes($data[name]);







// 이름 아이콘 불러오기 ;

    if ( file_exists( "./bbs/icon/private_name/$data[no].gif" ) )

  {

    $temp_name = "$_zb_url"."icon/private_name/$data[no].gif";

    if($temp_name)

    {

    $name ="<img src='$temp_name' border=0 align=absmiddle>";

    }

    else{

    $name ="$data[name]";

    }

  }else{

    $name ="$data[name]";

  }





?>





var name = "<?=$name?>";//루프를 돌려야 하기에 변수 정의를 루프안에서 해줌       

                if(name != '')

                {

contac_member  += "<tr height=15><td> <IMG src='이미지주소' align=absMiddle border=0> ";

contac_member  += "<a href = \\".javascript\\" onclick=\\"window.open('<?=$_zb_url?>view_info.php?member_no=<?=$member_no?>','name_editer' , 'toolbar=0, location=0, status=0, menubar=0, scrollbars=0, resizable=0, top=90, left=320, width=420, height=520')\\" onfocus='this.blur()'>"+name+"</a>";







contac_member  += "</td></tr>";               

}<?// 루프 끝

}?> 

contac_member  += "</table>";





function Timer() {// 문서가 로드될 시간만큼 후에 기록되게 함



parent.document.all.contac_total.innerHTML = "<?=$total?>";

<?if($member[no]){?>

parent.document.all.contac_member.innerHTML = contac_member;

<?}?>

}

setTimeout("Timer()",3000);

</script>

</head>



<?// 멤버이면서 새로운쪽지가 있을경우만 팝업펑션을 작동시킴;

if($member&&$new_total>=1&&$data[new_memo]!=0){?> 

<BODY Onload="popup();">

<?



// 새쪽지 왔습니다;; 알람 없애기

        mysql_query("update $member_table set new_memo='0' where no='$member[no]'");

}else{?>

<BODY><?}?>

</body>

</html>



<?





if($connect) mysql_close($connect);

?>









현재 접속자 총수를 나타내고 싶은곳에 아래의 글을 써주세요



현재 접속자 :  <span id="contac_total">데이터 읽는 중...</span> 명   







접속한 멤버를 나타내고 싶은곳엔 아래의 소스를  넣어주시면 됩니다





<table border="1" width="148">

    <tr>

        <td width="138" height="33" align="center" valign="middle">

            <p>현재접속자</p>

        </td>

    </tr>

    <tr>

        <td width="138" height="90" align="center" valign="middle">



<span id="contac_member">읽는 중...</span>





        </td>

    </tr>

</table>





-------------------------------------------------------------------------------

이상 소스





회원이 별로 없는 관계로 많은 회원이 접속했을 경우 어떻게 나오는지는 테스트 못해봤습니다



쪽지알림음주소는 제로보드 쪽지 알림음 주소를 넣어주시면 됩니다

위에 중간에 이미지 주소라고 쓰인 부분은 도토나 필요한 아이콘을 넣어주시면 됩니다

이름만 달랑 나오면 아무래도 허전할거 같아서
[이 게시물은 human님에 의해 2007-05-14 17:58:49 bilkboard1에서 복사 됨]
[이 게시물은 human님에 의해 2007-05-15 09:09:28 bulk3에서 이동 됨]

댓글목록

등록된 댓글이 없습니다.

Total 224건 5 페이지
유익한 싸이트 목록
번호 제목 글쓴이 조회 날짜
152 이름으로 검색 8216 08-02
151 이름으로 검색 14221 08-02
150 이름으로 검색 9304 07-20
149 이름으로 검색 15428 07-20
148 이름으로 검색 15450 07-20
147 이름으로 검색 13535 07-20
146 이름으로 검색 7984 07-20
145 이름으로 검색 14779 07-19
열람중 이름으로 검색 14910 07-12
143 이름으로 검색 14160 07-10
142 이름으로 검색 8092 06-28
141 이름으로 검색 14535 06-24
140 이름으로 검색 15009 06-24
139 이름으로 검색 16974 06-16
138 이름으로 검색 16829 06-16
137 이름으로 검색 11780 06-15
136 이름으로 검색 15450 06-15
135 이름으로 검색 10780 06-14
게시물 검색