马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
php manual(PHP手册)肯定是要从网上下载一个的,它很权威,也很全面,我自己认为它是一本很好的参考书,但是不适合新手当教材使用。在线 处理了昨天的成绩:表了局变了一下,以下:
CREATE TABLE TB_User ( --用户表
N_UserId Number(5) NOT NULL, --用户ID
V_NickName VARCHAR2(10) NOT NULL, --昵 称
V_PWD VARCHAR2(10) NOT NULL, --密 码
V_TrueName VARCHAR2(20), --姓 名
Primary Key (N_UserId)
)
CREATE TABLE TB_OnlineUser ( --在线用户
N_OnlineUserId Number(5) NOT NULL, --在线用户ID
D_LoginTime Number (16), --上岸工夫以秒计
N_OnlineID Number(5), --与onlineusercount相干联。
Primary Key (N_OnlineID)
)
/
CREATE TABLE TB_OnlineUserCount ( --在线用户统计表
N_OnlineID Number(5) NOT NULL, --体系ID号
N_OnlineUserId Number(5) NOT NULL, --在线用户ID
D_LoginDate Date , --上岸日期
D_LoginTime Number (16) , --上岸工夫以秒计
D_OverDate Date , --停止日期
D_OverTime Number (16) , --停止工夫
Primary Key (N_OnlineID)
)
/
/*---LoginselectNew.php---该法式是上岸反省法式----*/
<?
session_start();
/*思绪:起首用户上岸,判别是不是有该用户,判别是不是暗码经由过程,不然前往参数停止特别处置。(上岸不胜利)
上岸胜利后,假如该用户不在线(普通不在线,特别情形假如他用另外一台机械翻开阅读重视新再上岸,那末他有能够在线),
先辈行session变量注册,获得响应前提向1.统计表与2.在线表中插数据。进入到上岸页。
假如用户在线:先获得在线用户的体系ID,由于在备份该用户分开时有效。接着删除该在线用户.接着停止该用户分开工夫的备份.
*/
session_register("objsNickName");
require('oracle8conn.php');
$name=trim($name);
$pwd=trim($pwd);
ob_start(); //缓冲输入
$stmtNick = OCIParse($conn,"select count(*) countnickname from tb_user where v_nickname='$name'");
OCIExecute($stmtNick);
while(OCIFetchInto($stmtNick,&$arrN)){
if ($arrN[0]==0){
Header("Location:Logintest.php?Msg=1");
}else{
//用户名经由过程
unset($arrNickName); //取消一时数组
$stmtPwd = OCIParse($conn,"select count(*) countpwd from tb_user where v_pwd='$pwd' and v_nickname='$name'");
OCIExecute($stmtPwd);
while(OCIFetchInto($stmtPwd,&$arrP,OCI_NUM)){
if ($arrP[0]==0){
Header("Location:Logintest.php?Msg=2");
}else{//暗码经由过程
//掏出用户的ID号
$stmtUid = OCIParse($conn,"select n_userID from tb_user where v_nickname='$name'");
OCIExecute($stmtUid);
while(OCIFetchInto($stmtUid,&$arrU,OCI_NUM)){
$intOnlineUserID=$arrU[0];
}//while_Over
//假如该用户经由过程另外一个阅读重视复上岸,处理以下
$stmOnlineFlag=OCIParse($conn,"select count(*) from tb_onlineuser where N_ONLINEUSERID='$intOnlineUserID'");
OCIExecute($stmOnlineFlag);
while(OCIFetchInto($stmOnlineFlag,&$arronlineFlag,OCI_NUM)){
if ($arronlineFlag[0]!=0){ //暗示已在线
//先取到在线用户联系关系体系ID
$stmtSysID= OCIParse($conn,"select N_ONLINEID from tb_onlineuser where N_ONLINEUSERID='$intOnlineUserID'");
OCIExecute($stmtSysID);
while(OCIFetchInto($stmtSysID,&$arrSysID,OCI_NUM)){
$SysID=$arrSysID[0];
}//while_Over //找完后踢出该用户
$stmt = OCIParse($conn, "delete from tb_onlineuser where N_ONLINEUSERID='$intOnlineUserID'");
OCIExecute($stmt);
print "删除胜利"; //最初作纪录备份
$tmpTime=time(); //停止工夫
$DatLoginDate = date( "Y-m-d");//停止日期
$DatLoginDate = "to_date('".$DatLoginDate."','YY/MM/DD')";
$stmtUserCount = OCIParse($conn, "update tb_onlineusercount set D_OverDate=$DatLoginDate ,D_OverTime=$tmpTime where N_OnlineID='$SysID'");//前提是相干联的体系ID
OCIExecute($stmtUserCount);
print "添加胜利到统计表中。";
}//endif //不在线正常注册
$objsNickName=$name; //注册Session变量
unset($arrPwd); //取消一时数组
srand((double)microtime()*1000000000);
$intOnlineID = rand(); //取一个体系ID号
$DatLoginDate = date( "Y-m-d"); //获得体系日期存入到Online表中去。
$DatLogintime = time(); //取体系工夫
$DatLoginDate = "to_date('".$DatLoginDate."','YY/MM/DD')";
$stmt = OCIParse($conn, "insert into tb_onlineuser (N_OnlineUserId,D_LoginTime,N_OnlineID) values ($intOnlineUserID,$DatLogintime,$intOnlineID)");
OCIExecute($stmt);
$stmtC = OCIParse($conn, "insert into TB_OnlineUserCount (N_OnlineID,N_OnlineUserId,D_LoginDate,D_LoginTime) values ($intOnlineID,$intOnlineUserID,$DatLoginDate,$DatLogintime)");
OCIExecute($stmtC);
Header("Location:index.php"); //胜利上岸!
}//whileOVER
}//end if
}//while_Over
}//end if
}//while_Over
?>
<?ob_end_flush();?>
/*-------CheckSession-----反省刷新法式---*/
<?
/*30分钟刷新法式
先统计出在线的用户数,假如没有在线用户,体系要包管一个体系指定用户。该体系用户不时在线的缘由是包管该刷新法式的履行
假如该上岸用户Session不存在了,暗示用该用户离线。统计出工夫。
*/
session_start();
require('oracle8conn.php');
print $objsNickName;
?>
<html><head><meta HTTP-EQUIV=refresh Content='1800;url="CheckSession.php"'>
<?
$NowDate = date("Y-m-d");
$NowDate = "to_date('".$NowDate."','YY/MM/DD')";
$NowTime = time();
//统计在耳目数。30分钟更新一次
$stmtCount = OCIParse($conn,"select count(*) from tb_onlineuser");
OCIExecute($stmtCount);
while(OCIFetchInto($stmtCount,&$arrCountUser)){
$CountUser=$arrCountUser[0];
}
print "今朝在耳目数为:".$CountUser."<br>";
//判别在线否?
if ($CountUser==0){
print "没有人在线!特别处置!";
}else{
$stmtOnlineUser = OCIParse($conn,"select N_OnlineUserId,D_LoginTime,N_OnlineID from tb_onlineuser");
OCIExecute($stmtOnlineUser);
$arrTest = array();
while(OCIFetchInto($stmtOnlineUser,&$arrUser[])){
$arrTest += $arrUser;
}
$j = sizeof($arrTest);
if($j>0){
$i = sizeof($arrTest[0]);
}
}
for($b=0;$b<$j;$b++){ //由于存入二维数组中,所以两重轮回。
for($a=0;$a<1;$a++){ //内轮回一次找到工夫。
//注重双轮回中是为了取数组值
// $arrTest[$b][0] 暗示用户ID
// $arrTest[$b][1] 暗示上岸起的工夫
// $arrTest[$b][1] 联系关系体系ID
if (ceil(($NowTime-$arrTest[$b][1])/60)>300){ //假如以后工夫与一笔记录的旧工夫相差大于30分钟。
if ($objsNickName==""){ //假如此用户session不存在,暗示已加入。
//删失落。
$temGlid= $arrTest[$b][2]; //联系关系体系ID
$temuserid= $arrTest[$b][0]; //用户ID
$stmt = OCIParse($conn, "delete from tb_onlineuser where $intOnlineID='$temGlid' and N_ONLINEUSERID='$temuserid'");
print "delete from tb_onlineuser where $intOnlineID='$temGlid' and N_ONLINEUSERID='$temuserid'";
OCIExecute($stmt);
print "删除胜利";
//添加到统计表中
$tmpTime=time(); //停止工夫
$DatLoginDate = date( "Y-m-d");//停止日期
$DatLoginDate = "to_date('".$DatLoginDate."','YY/MM/DD')";
$stmtUserCount = OCIParse($conn, "update tb_onlineusercount set D_OverDate=$DatLoginDate ,D_OverTime=$tmpTime where N_OnlineID='$temGlid'");//前提是相干联的体系ID
OCIExecute($stmtUserCount);
print "添加胜利到统计表中。";
}else{
$tmpTime=time(); //获得一时用户工夫
$temuserid= $arrTest[$b][0];
$stmt = OCIParse($conn, "update tb_onlineuser set d_logintime=$tmpTime where N_ONLINEUSERID='$temuserid'");
OCIExecute($stmt);
print "更新胜利";
print $tmpTime;
}
}else{
print session_id();
print "体系工夫:".$NowTime."<br>";
print "数据库中旧工夫:".$arrTest[$b][1]."<br>";
print "用户ID:".$arrTest[$b][0]."<br>";
print "相差工夫:".ceil(($NowTime-$arrTest[$b][1])/60)."<br>";
}
}
}
/*假如要欢察统计表与在线表用户工夫(当用户未离线时)
select a.D_Logintime,b.D_logintime from tb_onlineuser a,tb_onlineusercount b
where a.N_OnlineID=b.N_ONLINEID; 相差
假如要统计出指定用户在线工夫(当用户离线时)
select D_logintime,D_OverTime from tb_onlineusercount where N_OnlineUserId='$USERID'; 相差
*/
?>
感谢你的匡助!:_)
开发相册系统过程中就有过这样的问题,因为没有交流好,出现重复工作问题,因为文档没有详细的说明而经常临时问对方。 |