BCHAT登录与UCHOME的结合

2008年11月2日

UCHOME是一个非常方便的SNS网站程序,可以用UCHOME登录用户,然后以MD5KEY的方式让已登录用户可以直接进入聊天室,从而实现两者的整合。
在UCHOME目录下建一个chat.php来显示聊天室的登录界面,如果用户未处于登录状态就提示用户输一个聊天名字,如果用户已经处于登陆状态就提示用户点击选择进入聊天室。当用户点击进入聊天室的时候是去访问chatlogin.php,这个页面提取已登陆用户的用户名进行MD5KEY的运算,生成真正进入聊天室的登陆页面并进行登陆。
chat.php放在UCHOME目录下,其代码如下:

<?php
include_once('./common.php');
 
$_TPL['titles'] = array('聊天');
include template('header');
?>
<style type="text/css">
#listdiv{ width:500px; margin:20px 20px 20px 20px; }
#listdiv ul,li{ list-style:none; padding:0; }
#listdiv li{ width:220px; float:left; margin:0px;padding:0px; line-height:25px}
#listdiv p{color:Gray}
#listdiv span{color:Gray}
#listdiv .roomname{color:#886349}
</style>
<script language="JavaScript">
function b(pport,phost,roomid)
{
  	if(validname(document.form1.elements[0])){
	  	document['form1'].action='chatlogin.php';
	  	document['form1'].ROOMID.value=roomid;
	  	document['form1'].HOST.value=phost;
	  	document['form1'].PORT.value=pport;
	  	launchchat();
	  	document['form1'].method='post';
  		document.form1.submit();
  	}
}
function validname(str1)
{
	var s,i,j;
	if (str1.value.length <1) {
		alert("请输入您的大名,名字不能为空!");
		str1.focus();
      		return false;
   	}
	s="'#&*\"";
	str=str1.value.toString();
	for (i=0; i<str.length; i++) {
	   for(j=0;j<s.length;j++){
		if (str.charAt(i) == s.charAt(j))
        	{
			alert("名字中不能包含特殊字符: # & * .");
 			str1.focus();
      			return false;
   		}
	  }
	}
  return true;
}
 
var focusok=false;
if (navigator.appName == "Netscape") {
	focusok=true;
}
vers = navigator.appVersion;
if (navigator.appName == "Microsoft Internet Explorer") {
 pos = vers.lastIndexOf('.');
 vers = vers.substring(pos-1,vers.length);
}
proper_version = parseFloat(vers);
 
if(proper_version>=5){
	focusok=true;
}
 
function launchchat() {
 
  var chat = window.open("","chat","top=0,left=0,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=790,height=530");
  if(focusok){
   	chat.focus();
  }
  return true;
}
</script>
 
<div id="listdiv">
<?php
if($_SGLOBAL['username']){
?>
<p>你好,<?php echo $_SGLOBAL['username']; ?>
</p>
<form action=/ method=post name=form1 target="chat"  align="center">
<input type="hidden" name="USER" value="<?php echo $_SGLOBAL['username']; ?>">
<input type="hidden" name="PASS" value="<?php echo $PASSWORD; ?>">
<input type="hidden" name="ROOMID">
<input type="hidden" name="HOST">
<input type="hidden" name="PORT">
</form>
<?php
}else{
?>
<p>
<form action=/ method=post name=form1 target="chat"  align="center">
您尚未登陆,请输一个进聊天室所用的游客名字:
<input type="text" name="USER" size="6" MAXLENGTH="15" value="游客">
<input type="hidden" name="PASS" value="">
<input type="hidden" name="ROOMID">
<input type="hidden" name="HOST">
<input type="hidden" name="PORT">
</form>
</p>
<?php
}
?>
<p>请点击聊天室名称前面的小圈进入聊天室:
<ul>
<?php
$conn=odbc_connect('chatdb','','');
if (!$conn)
  {exit("Connection Failed: " . $conn);}
$sql="SELECT * FROM room";
$rs=odbc_exec($conn,$sql);
if (!$rs)
  {exit("Error in SQL");}
while (odbc_fetch_row($rs))
{
  $my_port=odbc_result($rs,"port");
  $my_host=odbc_result($rs,"host");
	if ($my_port>65535) {
		$my_roomid= $my_port%1000;
		$my_port=floor($my_port/1000);
	}else{
		$my_roomid=0;
	}
  $my_roomname=iconv( "gb2312", "UTF-8//IGNORE" , odbc_result($rs,"roomname"));
  $my_num=odbc_result($rs,"num");
  echo "<li>\r\n";
  echo "<input name=\"r\" onclick=\"if(this.checked){b('".$my_port."','".$my_host."','".$my_roomid."')}\" type=\"radio\">\r\n";
  echo "<span class=\"roomname\">".$my_roomname."</span><span>(".$my_num."人)</span>\r\n";
  echo "</li>\r\n";
}
odbc_close($conn);
?>
</ul>
</p>
</div>
<div class="f_status f_status_w s_clear">
	<a href="javascript:;" onclick="window.scrollTo(0,0);" id="a_top" title="TOP">TOP</a>
</div>
 
<?php
include template('footer');
?>

chatlogin.php也是放在UCHOME目录下,代码如下:

<?php
include_once('./common.php');
 
$chatip=$_POST['HOST'];
$chatport=$_POST['PORT'];
$roomid=$_POST['ROOMID'];
$USERNAME=$_POST['USER'];
$PASSWORD=$_POST['PASS'];
 
if($_SGLOBAL['username']){
	$MD5KEY="md5key";
	$USERNAME=iconv( "UTF-8", "gb2312//IGNORE" , $_SGLOBAL['username']);
	$PASSWORD=md5($USERNAME.$MD5KEY);
}else{
	$USERNAME=iconv( "UTF-8", "gb2312//IGNORE" , $USERNAME);
}
?>
<html><body>
<form name="chatlogin" action="http://<?php echo $chatip; ?>:<?php echo $chatport; ?>/" method="post">
<input type="hidden" name="USER" value="<?php echo $USERNAME; ?>">
<input type="hidden" name="PASS" value="<?php echo $PASSWORD; ?>">
<input type="hidden" name="ROOMID" value="<?php echo $roomid; ?>">
</form>
<script langauge="javascript">
setTimeout("document.chatlogin.submit()",1);
</script>
</body></html>

由于聊天室使用GB2312而UCHOME用的是UTF8,所以这里对用户名进行了一个编码转换。
chat.php文件以UTF8编码格式保存,而chatlogin.php要以GB2312编码保存。





标签: , , , ,
归类: BCHAT

Leave a Reply

*

您也可以使用微博账号登陆