PHP 프로그래밍

본문 바로가기
사이트 내 전체검색


Web Programming >> PHP Programming
[목차]
제19장 대화방 만들기(MySQL)

    6. 대화내용 출력 기능 수정

 

대화내용이 출력될 때, reflash기능을 이용하면, 반짝반짝하는 화면이 눈에 거슬릴 것이다. 이것을 처리하는 것이 이번장의 목표이다.

 

1. 테이블 추가하기

CREATE TABLE room_login (
   uid int(10) unsigned NOT NULL auto_increment,
   chat_id varchar(30) NOT NULL,
   room_uid int(10) unsigned NOT NULL,
   signdate int(10) unsigned NOT NULL,
   PRIMARY KEY (uid)
);

위와 같이 추가하기 위해서는 테이블을 삭제하고 다시 만들 수도 있고, alter명령으로 필드를 추가할 수 도 있습니다.

여기서는 필드를 추가해보기로 합니다. 테이블을 삭제하면, 기존레코드들도 모두 지워지기 때문입니다.

 

ALTER TABLE room_login ADD signdate INT (10) UNSIGNED DEFAULT '0' not null 

 

위와 같이 하면 추가됩니다.

 

2. 대화내용을 출력기능 수정

대화내용이 출력될 때, reflash기능을 이용하면, 반짝반짝하는 화면이 눈에 거슬릴 것이다. 이것을 처리하기 위해서는 Reflash기능을 사용하지 않고, 자바스크립트를 사용하면, 처리할 수 있다.

이전장의 예제를 순서대로 수정해 보자.

 여기에 나오지 않은 웹문서는 19.5장의 내용과 같습니다.

 

파일명 : user_function.html

사용자 정의함수를 따로 만든 파일입니다.

 

<?

 

function write($username, $room_uid, $message, $tomsg, $message_dir){

        global $fontsize, $fontcolor, $bold, $italic, $user_name;

 

     $lines = file("${message_dir}/${room_uid}.html");

 

     if(!strcmp($tomsg ,"all")) {

                 $to_ear = "Y";

     } else if($tomsg != "") {

                

         $query = "SELECT name,ear FROM member  WHERE id ='$tomsg' ";

 

         $result= mysql_query($query);

         if (!$result) {

             error("QUERY_ERROR");

             exit;

         }

 

         $total_record = mysql_num_rows($result);

         if($total_record) {

             $to_name = mysql_result($result,0,0);

             $to_ear = mysql_result($result,0,1);

         }

         else {

             $tomsg = "all";

             $to_ear = "Y";

         }

                

    }

    else {

         $tomsg = "";

         $to_ear = "N";

    }

 

    $total = count($lines);

    $start = $total - 20;

    if($start < 0) $start = 0;

    $end = $total;

 

    $signdate=time();

 

    if($to_ear == "Y") {

        if($bold == "Y") $message = "<b>$message</b>";

        if($italic == "Y") $message = "<i>$message</i>";

        $message = "<font size='${fontsize}' color='${fontcolor}'><b>${user_name}</b> : ${message}</font><br>";

        $newmessage = "$tomsg|$username|$signdate|$message|";

    }else {

        $message = "<font size='3' color='blue'><b>${to_name}</b> 님께서 귀속말을 거부하였습니다.</font><br>";

        $newmessage = "|$username|$signdate|$message|";

    }

 

    $fp=fopen ("${message_dir}/${room_uid}.html", "w");

 

    for ($i = $start; $i < $end; $i++)  {

        fwrite($fp, "$lines[$i]");

    }

 

    fwrite($fp, "$newmessage\n");

    fclose($fp);

 

}

 

function error($text) {

    echo "$text";

    exit;

 

}

 

?>

 

 

파일명 : room_create.html

대화방 만들기 기능을 구현한 부분입니다. 대화방을 만들고, 대화창으로 이동합니다.

 

<?

if(!$user_id || !$user_name) {

        echo "<SCRIPT>self.close();</SCRIPT>";

        exit;

}

 

if (!$room) {

        echo ("

                <script>

                window.alert ('대화방제목은?')

                history.go(-1)

                </script>

        ");

        exit;

}

 

$message_dir = "./data"; //message 디랙토리의 절대경로

 

include("user_function.html");

include("dbconn.html");

 

// 대화방이름이 중복될 수 없으므로 같은 대화방명이 있는가를 검색하는 부분입니다.

$result= mysql_query ("select * from room where room = '$room'", $dbconn);

$Total = mysql_num_rows($result);

 

if($Total) {

    echo ("

         <script>

            window.alert ('같은 대화방 제목이 있습니다.')

            history.go(-1)

         </script>

    ");

    exit;

}

 

// 대화방을 만드는 부분입니다.

$room_uid = time();

mysql_query("insert into room (uid,room) values($room_uid,'$room')", $dbconn);

 

// 대화방에 입실한 것을 저장하는 부분입니다. chat_list.html에서 검색할 때 사용할 수 있습니다.

$signdate = $room_uid -1;

mysql_query("insert into room_login (chat_id,room_uid,signdate) values('$user_id',$room_uid,$signdate)", $dbconn);

 

// 대화방에 입실할 때 메시지를 출력하기위한 부분입니다.

$tomsg = all;

$newmessage = "$tomsg|$user_id|$room_uid|<font size=2 color=red><B>$user_name</B>님께서 대화방을 만들었습니다.</font><br>|";

 

$fp=fopen ("$message_dir/${room_uid}.html", "w");

fwrite($fp, "$newmessage\n");

fclose($fp); 

// 대화창으로 이동하는 부분입니다.

echo ("

     <script>

         location.replace('room_login.html?room_uid=$room_uid');

     </script>

");

exit;

?>

 

 

 

 

 

 

파일명 : room_in.html

대화방 입실하기 기능을 구현한 부분입니다. room_login테이블에 레코드를 추가하고, 대화창으로 이동합니다.

 

<?

if(!$user_id || !$user_name) {

        echo "<SCRIPT>self.close();</SCRIPT>";

        exit;

}

 

$message_dir = "./data"; //message 디랙토리의 절대경로

 

include("user_function.html");

include("dbconn.html");

 

// 기존에 입실한 내용이 남아있는 가를 체크하는 부분입니다. 만약에 있다면, 바로 대화창으로 넘어갑니다.

$query = "select * from room_login where room_uid = '$room_uid' AND chat_id = '$user_id'";

//echo $query;

$result= mysql_query ($query, $dbconn);

$Total = mysql_num_rows($result);

if($Total) {

        echo ("

                 <script>

                         location.replace('room_login.html?room_uid=$room_uid');

                 </script>

        ");

    exit;

}

 

// room_login테이블에 추가합니다. 입실한 것을 체크하기위해 필요합니다.

$signdate = time();

mysql_query("insert into room_login (chat_id,room_uid,signdate) values('$user_id',$room_uid,$signdate)", $dbconn);

 

// 입실할 때 대화창에 메시지를 남기기위한 부분입니다.

$tomsg = all;

$message = "<font color=blue>님께서 대화방에 입실하였습니다.</font>";

write($user_id, $room_uid, $message, $tomsg,$message_dir);

 

// 대화창으로 이동합니다.

echo ("

     <script>

         location.replace('room_login.html?room_uid=$room_uid');

     </script>

");

 

?>

 

 

 

 

파일명 : room_login.html

대화창입니다. 대화내용을 출력해야하고, 대화방 입실자를 보야줘야하고, 대화내용을 입력해야합니다. 그러므로, 프레임기능을 이용하여, 화면을 분할해서 내용을 출력합니다.

 

<?

if(!$user_id || !$user_name) {

        echo "<SCRIPT>self.close();</SCRIPT>";

        exit;

}

 

echo ("

<frameset rows='0,55,*,60' frameborder='NO' border='0' framespacing='0'>

  <frame name='room_say' scrolling='NO' noresize src='room_say.html?room_uid=$room_uid'>

  <frame name='room_top' scrolling='NO' noresize src='room_top.html?room_uid=$room_uid'>

        <frameset cols='*,200' frameborder='NO' border='0' framespacing='0'>

          <frame name='msg_list' src='say.html?room_uid=$room_uid'>

          <frame name='chat_list' src='chat_list.html?room_uid=$room_uid' scrolling='NO' noresize >

        </frameset>

  <frame name='msg_input' scrolling='NO' noresize src='chat.html?room_uid=$room_uid'>

</frameset>

<noframes><body bgcolor='#FFFFFF'>

");

?>

 

 

 파일명 : say.html

대화내용을 출력되는 부분입니다. 기존하고 많이 바뀌었지요. 여기서는 대화내용을 처리하지 않고, 보여주기만합니다. 기존에 처리하는 부분은 room_say.html에서 처리합니다.

 

<style type="text/css">

<!--

table { font-size:10pt; }

//-->

</style>

<BODY BGCOLOR=#FFFFFF>

 

 

파일명 : room_say.html

대화내용을 출력하는 부분입니다. Reflash기능을 자바스크립트로 바꾸는 중요한 부분입니다. 이 파일이 추가되었고, 나머지는 수정형태로 되었있습니다.

<?

//message 디랙토리의 절대경로

$message_dir = "./data";

 

// Database 연결

include "user_function.html";

include "dbconn.html";

 

// 마지막 메시지 출력시간을 받는다.

$query6 = "SELECT signdate FROM room_login WHERE chat_id='$user_id'";

        

$result6 = mysql_query($query6);

if (!$result6) {

   error("QUERY_ERROR");

   exit;

}

$rows6 = mysql_num_rows($result6);

if($rows6){

        $signdate = mysql_result($result6,0,0);

} else {

        $signdate = time();

}

 

// 대화내용 파일에서 읽어들입니다.

$lines = file("${message_dir}/${room_uid}.html");

 

$total = count($lines);

$start = $total - 20;

if($start < 0) $start = 0;

$end = $total;

?>

<SCRIPT LANGUAGE='JavaScript'>

<!--

//alert("<?echo "$room_uid";?>");

 

<?

for ($i = $start; $i < $end; $i++)  {

        $talk = $lines[$i];

        $lsat = split('\|', $talk);

        if($lsat[0] == "all"){

                $message = "$lsat[3]";

        }

        else if($lsat[0] == "") {

                if(!strcmp($lsat[1] , $user_id))        $message="$lsat[3]";

        }

        else{

                if($lsat[0] == $user_id) $message = "<font size=2 color=blue>☎귓속말 </font>$lsat[3]";

                elseif($lsat[1] == $user_id) $message = "<font size=2 color=blue>☏귓속말 </font>$lsat[3]";

        }

        if($lsat[2] > $signdate) {

?>

text = "<?echo("$message");?>"

parent.msg_list.document.write(text);

//alert(text);

 

<?

        }

}

$signdate = $lsat[2];

$query1 = "UPDATE room_login set signdate = $lsat[2] where chat_id='$user_id'";

//echo($query1);

$result1 = mysql_query($query1);

if (!$result1) {

   error("QUERY_ERROR");

   exit;

}

 

?>

text="<script>scroll(1,100000)<\/script>\n";

parent.msg_list.document.write(text);

//-->

</SCRIPT>

<SCRIPT LANGUAGE='JavaScript'>

<!--

function regenerate(){

if(navigator.appName=="Microsoft Internet Explorer") window.location.reload();

else if(navigator.appName=="Netscape")  window.location.href='room_say.html?room_uid=<?echo("$room_uid");?>';

}

 

function regenerate2(){

setTimeout("regenerate()",5000)

}

 

//-->

</SCRIPT>

 

<body onload="regenerate2()">

</body>

<?

exit;

?>

 

 

 

파일명 : chat.html

대화내용을 입력할 때 처리하는 부분입니다. 여기서는 방청소 기능까지 처리하였습니다.

 

<?

header("Content-type: text/html");

 

if(!$user_id || !$user_name) {

        echo "<SCRIPT>self.close();</SCRIPT>";

        exit;

}

 

include("user_function.html");

include("dbconn.html");

 

//message 디랙토리 절대경로

$message_dir = "./data";

 

if(!$fontcolor) $fontcolor = "black";

if(!$fontsize) $fontsize = "3";

if(!$bold) $bold = "N";

if(!$italic) $italic = "N";

 

if($room_uid == "") {

      error("대화명이 없습니다.");

}

 

print"

<HTML>

 <HEAD>

   <TITLE>대화방</TITLE>

   <style>

    a:link, a:visited, a:active { text-decoration:none; color:#003366; }

    A:hover{color:blue;}

    body, tr, td { font-size : 10pt;}

   </style>

 

 <SCRIPT LANGUAGE='JavaScript'>

 <!--

 function FocusOn() {

 document.form_submit.message.focus();

 return;

 }

 

function chat()

{

  form_submit.submit();

 

}

//방청소 처리부분입니다.

 function room_clean()

{

     parent.msg_list.document.location.href='say.html'

 

}

 

//-->

 </SCRIPT>

 

 </HEAD>

  <BODY bgcolor=#FFFFFF text=#000000 topmargin=5 onLoad=FocusOn()>

     <table  cellspacing=0 cellpadding=1 border=0>

      <tr>

        <form name='form_submit' action='chat.html' method='post'>

        <input name=room_uid type=hidden value='$room_uid'>

                <td align=\"left\">

&nbsp;&nbsp;&nbsp;&nbsp;";

 

$query = "SELECT uid,chat_id FROM room_login  WHERE room_uid =$room_uid ORDER BY uid DESC";

 

$result= mysql_query($query);

if (!$result) {

   error("QUERY_ERROR");

   exit;

}

 

$total_record = mysql_num_rows($result);

?>

                <select name="tomsg">

                <option value="all">모두에게</option>

<?

for($i = 0; $i < $total_record; $i++) {

   $my_uid = mysql_result($result,$i,0);   

   $my_chat_id = mysql_result($result,$i,1);

 

   if($user_id != $my_chat_id) {

           $query5 = "SELECT name FROM member WHERE id = '$my_chat_id'";

           $result5 = mysql_query($query5);

           if(!$result5) {

                  error("QUERY_ERROR");

                  exit;

           }

           $my_chat_name = mysql_result($result5,0,0);

?>

                <option value="<?echo("$my_chat_id");?>" <?if($my_chat_id == $tomsg) echo(" selected");?>><?echo("$my_chat_name");?></option>

<?

        }

}

print " </select>

           <input type=text name=message value='' size=45>

          </td>

        </tr>

                <tr>

                <td align=\"left\">

&nbsp;&nbsp;&nbsp;&nbsp;

                <INPUT TYPE=\"checkbox\" NAME=\"bold\" value='Y'";

                if(!strcmp($bold,"Y")) echo(" checked");

                print ">진하게

                &nbsp;&nbsp;&nbsp;&nbsp;<INPUT TYPE=\"checkbox\" NAME=\"italic\" value='Y'";

                if(!strcmp($italic,"Y")) echo(" checked");

                print ">기울림

                &nbsp;&nbsp;&nbsp;&nbsp;<select name=\"fontcolor\">

      <option  value=\"black\" ";

          if(!strcmp($fontcolor,"black")) echo(" selected");

          print ">black</option>

      <option  value=\"#004080\" ";

          if(!strcmp($fontcolor,"#004080")) echo(" selected");

          print ">dark blue</option>

          <option  value=\"#3232CD\"";

          if(!strcmp($fontcolor,"#3232CD")) echo(" selected");

          print ">medium blue</option>

          <option  value=\"purple\"";

          if(!strcmp($fontcolor,"purple")) echo(" selected");

          print ">purple</option>

          <option  value=\"green\"";

          if(!strcmp($fontcolor,"green")) echo(" selected");

          print ">green</option>

          <option  value=\"orange\"";

          if(!strcmp($fontcolor,"orange")) echo(" selected");

          print ">orange</option>

          <option  value=\"brown\"";

          if(!strcmp($fontcolor,"brown")) echo(" selected");

          print ">brown</option>

          <option  value=\"gray\"";

          if(!strcmp($fontcolor,"gray")) echo(" selected");

          print ">gray</option>

          <option  value=\"#007FFF\"";

          if(!strcmp($fontcolor,"#007FFF")) echo(" selected");

          print ">slate blue</option>

          <option  value=\"orchid\"";

          if(!strcmp($fontcolor,"orchid")) echo(" selected");

          print ">orchid</option>

          <option  value=\"fuchsia\"";

          if(!strcmp($fontcolor,"fuchsia")) echo(" selected");

          print ">magenta</option>

          <option  value=\"#FF7F00\"";

          if(!strcmp($fontcolor,"#FF7F00")) echo(" selected");

          print ">coral</option>

          <option  value=\"#9F5F9F\"";

          if(!strcmp($fontcolor,"#9F5F9F")) echo(" selected");

          print ">blue violet</option>

          <option  value=\"violet\"";

          if(!strcmp($fontcolor,"violet")) echo(" selected");

          print ">violet</option>

          <option  value=\"#FF6EC7\"";

          if(!strcmp($fontcolor,"#FF6EC7")) echo(" selected");

          print ">neon pink</option>

          <option  value=\"#D98719\"";

          if(!strcmp($fontcolor,"#D98719")) echo(" selected");

          print ">cooper</option>

          <option  value=\"#9932CD\"";

          if(!strcmp($fontcolor,"#9932CD")) echo(" selected");

          print ">dark orchid</option>

          <option  value=\"#7093DB\"";

          if(!strcmp($fontcolor,"#7093DB")) echo(" selected");

          print ">dark turquoise</option>

          <option  value=\"#8E236B\"";

          if(!strcmp($fontcolor,"#8E236B")) echo(" selected");

          print ">maroon</option>

          <option  value=\"mediumpurple\"";

          if(!strcmp($fontcolor,"mediumpurple")) echo(" selected");

          print ">medium orchid</option>

          <option  value=\"#4D4DFF\"";

          if(!strcmp($fontcolor,"#4D4DFF")) echo(" selected");

          print ">neon blue</option>

          <option  value=\"#EAADEA\"";

          if(!strcmp($fontcolor,"#EAADEA")) echo(" selected");

          print ">plum</option>

          <option  value=\"#8C1717\"";

          if(!strcmp($fontcolor,"#8C1717")) echo(" selected");

          print ">scarlet</option>

          <option  value=\"#238E68\"";

          if(!strcmp($fontcolor,"#238E68")) echo(" selected");

          print ">sea green</option>

          <option  value=\"#3299CC\"";

          if(!strcmp($fontcolor,"#3299CC")) echo(" selected");

          print ">sky blue</option>

          <option  value=\"#38B0DE\"";

          if(!strcmp($fontcolor,"#38B0DE")) echo(" selected");

          print ">summer sky</option>

          <option  value=\"#CC3229\"";

          if(!strcmp($fontcolor,"#CC3229")) echo(" selected");

          print ">violet red</option>

          <option  value=\"#32CD99\"";

          if(!strcmp($fontcolor,"#32CD99")) echo(" selected");

          print ">aquamarine</option>

          <option  value=\"cadetblue\"";

          if(!strcmp($fontcolor,"cadetblue")) echo(" selected");

          print ">cadetblue</option>

          <option  value=\"chocolate\"";

          if(!strcmp($fontcolor,"chocolate")) echo(" selected");

          print ">chocolate</option>

          <option  value=\"darkgoldenrod\"";

          if(!strcmp($fontcolor,"darkgoldenrod")) echo(" selected");

          print ">darkgoldenrod</option>

          <option  value=\"darkkhaki\"";

          if(!strcmp($fontcolor,"darkkhaki")) echo(" selected");

          print ">darkkhaki</option>

          <option  value=\"darkred\"";

          if(!strcmp($fontcolor,"darkred")) echo(" selected");

          print ">darkred</option>

          <option  value=\"darksalmon\"";

          if(!strcmp($fontcolor,"darksalmon")) echo(" selected");

          print ">darksalmon</option>

          <option  value=\"darkslateblue\"";

          if(!strcmp($fontcolor,"darkslateblue")) echo(" selected");

          print ">darkslateblue</option>

          <option  value=\"lightslategray\"";

          if(!strcmp($fontcolor,"lightslategray")) echo(" selected");

          print ">lightslategray</option>

          <option  value=\"salmon\"";

          if(!strcmp($fontcolor,"salmon")) echo(" selected");

          print ">salmon</option>

          <option  value=\"silver\"";

          if(!strcmp($fontcolor,"silver")) echo(" selected");

          print ">silver</option>

          <option  value=\"tan\"";

          if(!strcmp($fontcolor,"tan")) echo(" selected");

          print ">tan</option>

          <option  value=\"tomato\"";

          if(!strcmp($fontcolor,"tomato")) echo(" selected");

          print ">tomato</option>

          <option  value=\"turquoise\"";

          if(!strcmp($fontcolor,"turquoise")) echo(" selected");

          print ">turquoise</option>

          <option  value=\"#FF9696\"";

          if(!strcmp($fontcolor,"#FF9696")) echo(" selected");

          print ">난이옷</option>

          <option  value=\"#A537DC\"";

          if(!strcmp($fontcolor,"#A537DC")) echo(" selected");

          print ">보라색</option></select>

      &nbsp;&nbsp;&nbsp;&nbsp;<select name=\"fontsize\">

      <option  value=\"2\"";

          if(!strcmp($fontsize,"2")) echo(" selected");

          print ">작게</option>

          <option  value=\"3\"";

          if(!strcmp($fontsize,"3")) echo(" selected");

          print ">보통</option>

          <option  value=\"4\"";

          if(!strcmp($fontsize,"4")) echo(" selected");

          print ">크게</option>

          <option  value=\"5\"";

          if(!strcmp($fontsize,"5")) echo(" selected");

          print ">아주크게</option>

                </select>

          &nbsp;&nbsp;<a href=javascript:room_clean()>방청소</font>

     </td>

    </tr>

</form>

   </table>

        ";

 

if ($message) {

   write($user_id, $room_uid, $message, $tomsg,$message_dir);

   echo(" <SCRIPT LANGUAGE='JavaScript'>

    <!--

    top.room_say.document.location.href='room_say.html?room_uid=$room_uid'

    //-->

    </SCRIPT>");

}               

exit;

 

?>

</body></html>

 

 

[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.