首页 > 其他分享 >帝国cms会员空间模板显示最近来访访客信息

帝国cms会员空间模板显示最近来访访客信息

时间:2024-10-05 15:33:31浏览次数:1  
标签:ip dbtbpre gbk IP NULL cms 访客 模板

为了实现用户登录状态下的信息记录以及未登录状态下的IP地区记录功能,你可以按照以下步骤操作:

第一步:创建数据表

在帝国CMS后台执行以下SQL语句创建数据表:

CREATE TABLE `{$dbtbpre}_userkjf` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `lfuserid` varchar(20) CHARACTER SET gbk DEFAULT NULL,
  `bfuserid` varchar(100) CHARACTER SET gbk NOT NULL,
  `ip` char(50) CHARACTER SET gbk DEFAULT NULL,
  `ipdl` char(50) CHARACTER SET gbk DEFAULT NULL,
  `lftime` char(20) CHARACTER SET gbk NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=latin1 AUTO_INCREMENT=65;

第二步:复制代码到 header.temp.php

将以下代码复制到 e/space/template/default/header.temp.php 文件中:

<?php
// 取得登陆者信息
$userid = getcvar('mluserid');    // 会员ID
$uid = $_GET['userid']; // 当前空间的主人ID

if ($uid != $userid) {
    // 如果访客已登陆,则记录访客信息
    if ($userid) {
        $lfUname = $_COOKIE["lfUname"]; // 获取访客信息

        $fkdd = $empire->fetch1("SELECT * FROM {$dbtbpre}userkjf WHERE bfuserid='{$uid}' AND lfuserid='{$userid}'");

        if (!$fkdd) {
            $empire->query("INSERT INTO {$dbtbpre}userkjf (lfuserid, bfuserid, lftime) VALUES ('{$userid}', '{$uid}', '".date('Y-m-d H:i:s')."')");
        }
    } else { // 如果访客未登陆,则记录IP和地区信息
        // 取得IP 和地区
        $gifo = new get_gust_info();
        $ip = $gifo->Getip();
        $ipadds = $gifo->Getaddress();
        $ipdl = '';
        foreach ($ipadds[0] as $value) {
            $ipdl .= iconv("utf-8", "gbk", $value);
        }

        // 获取访客信息
        $lfUname = $_COOKIE["lfUname"];

        if ($lfUname == '') {
            $empire->query("INSERT INTO {$dbtbpre}userkjf (bfuserid, ip, ipdl, lftime) VALUES ('{$uid}', '{$ip}', '{$ipdl}', '".date('Y-m-d H:i:s')."')");
            setcookie("lfUname", "游客", time() + 1200); // 创建来访客信息,20分钟过期
        }
    }
}
?>

<?php
// 作用取得客户端的ip、地理信息、浏览器、本地真实IP
class get_gust_info {
    // 获得访客真实ip
    function Getip() {
        if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
            $ip = $_SERVER["HTTP_CLIENT_IP"];
        }
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { // 获取代理ip
            $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        }
        if ($ip) {
            array_unshift($ips, $ip);
        }

        $count = count($ips);
        for ($i = 0; $i < $count; $i++) {
            if (!preg_match("/^(10|172.16|192.168)./i", $ips[$i])) { // 排除局域网ip
                $ip = $ips[$i];
                break;
            }
        }
        $tip = empty($_SERVER['REMOTE_ADDR']) ? $ip : $_SERVER['REMOTE_ADDR'];
        if ($tip == "127.0.0.1") { // 获得本地真实IP
            return $this->get_onlineip();
        } else {
            return $tip;
        }
    }

    // 获得本地真实IP
    function get_onlineip() {
        $mip = file_get_contents("http://city.ip138.com/city0.asp");
        if ($mip) {
            preg_match("/[.*]/", $mip, $sip);
            $p = array("/[/", "/]/");
            return preg_replace($p, "", $sip[0]);
        } else {
            return "获取本地IP失败!";
        }
    }

    // 根据ip获得访客所在地地名
    function Getaddress($ip = '') {
        if (empty($ip)) {
            $ip = $this->Getip();
        }
        $ipadd = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=" . $ip); // 根据新浪api接口获取
        if ($ipadd) {
            $charset = iconv("gbk", "utf-8", $ipadd);
            preg_match_all("/[\x{4e00}-\x{9fa5}]+/u", $charset, $ipadds);

            return $ipadds; // 返回一个二维数组
        } else {
            return "地址未知";
        }
    }
}
?>

<?php
// 会员空间访客显示开始
$fkSQL = "SELECT * FROM {$dbtbpre}userkjf WHERE bfuserid='{$uid}' ORDER BY id DESC LIMIT 5";
$fkSQL = $empire->query($fkSQL);

while ($rs = $empire->fetch($fkSQL)) {
    if ($rs['lfuserid']) {
        $fkxxrs = $empire->fetch1("SELECT userid, truename, userpic FROM {$dbtbpre}enewsmemberadd WHERE userid='{$rs['lfuserid']}' LIMIT 1");
        ?>
        <li>
            <a href="/e/space/index.php?userid=<?=$fkxxrs['userid']?>"><img src="<?=$fkxxrs['userpic'] ? $fkxxrs['userpic'] : '/templets/member/common/images/dfboy.png'?>" alt="<?=$fkxxrs['truename']?>" /></a>
            <a href="/e/space/index.php?userid=<?=$fkxxrs['userid']?>"><?=$fkxxrs['truename']?></a>
        </li>
        <?php
    } else {
        ?>
        <li>
            <a href="#"><img src="../data/images/nouserpic.gif" /></a>
            <span>
                <div><?= $rs['ipdl'] ? "来自: " . $rs['ipdl'] : "未知地区" ?></div>
                <br>
                <div><?= $rs['lftime'] ?></div>
            </span>
        </li>
        <?php
    }
}
// 会员空间访客显示结束
?>

注意事项

  1. 表前缀:确保在创建数据表时使用正确的表前缀({$dbtbpre})。
  2. 字符集转换:确保在处理中文数据时使用正确的字符集转换。
  3. API接口:确保使用的IP地址解析API接口有效且能正常访问。
  4. 安全性和隐私:确保在记录用户信息时遵守相关法律法规,并保护用户隐私。

通过以上步骤,你应该能够实现用户登录状态下的信息记录以及未登录状态下的IP地区记录功能。

标签:ip,dbtbpre,gbk,IP,NULL,cms,访客,模板
From: https://www.cnblogs.com/hwrex/p/18447887

相关文章

  • 织梦数据库表结构_Dedecms数据库表和字段详细介绍
    织梦CMS(DedeCMS)使用多个数据库表来存储各种数据。下面详细介绍一些主要的数据库表及其字段,帮助你更好地理解和操作这些表。主要数据库表及字段1. dede_arctype 表用途:存储网站的栏目信息。主要字段:id:栏目ID。typeid:父栏目ID。typename:栏目名称。sendmail:发送邮件设置......
  • 找到织梦CMS的数据库配置文件,以便了解数据库的具体连接信息
    首先,找到织梦CMS的数据库配置文件,以便了解数据库的具体连接信息。数据库配置文件路径织梦CMS安装目录假设织梦CMS安装在 /var/www/html 目录下。数据库配置文件位于 include/config.inc.php。打开配置文件使用FTP工具或服务器上的文件管理器,打开织梦CMS安装目录下......
  • 织梦CMS遇到数据库连接失败怎么办?
    当织梦CMS遇到数据库连接失败时,可能有多种原因导致此问题。以下是一些常见的故障排查和解决方法:1.检查数据库配置文件打开配置文件打开织梦CMS的数据库配置文件 include/config.inc.php。使用FTP工具或SSH连接到服务器,然后打开该文件。检查配置信息确认数据库配置......
  • 如何查找和管理织梦CMS数据库
    登录MySQL命令行使用SSH连接到服务器。登录MySQL命令行:bash mysql-uroot-p输入MySQLroot用户的密码。查看数据库列表在MySQL命令行中查看所有数据库:sql SHOWDATABASES;选择织梦CMS数据库选择织梦CMS使用的数据库:sql USEdedecmsv......
  • 织梦cms连接数据库失败怎么办
    当织梦CMS(DedeCMS)出现数据库连接失败的问题时,可以通过以下几个步骤进行排查和解决:1.检查数据库配置文件打开配置文件打开织梦CMS的数据库配置文件 include/config.inc.php。使用FTP工具或SSH连接到服务器,然后打开该文件。检查配置信息确认数据库配置信息是否正确。......
  • 织梦DEDECMS数据库配置文件在哪?
    织梦CMS(DedeCMS)的数据库配置文件通常位于织梦CMS安装目录下的 include 目录中。具体路径如下:数据库配置文件路径织梦CMS安装目录假设织梦CMS安装在 /var/www/html 目录下。数据库配置文件数据库配置文件位于 include/config.inc.php。具体路径如下:plainte......
  • DedeCMS Error Track:DedeCMS错误警告:连接数据库失败
    当织梦CMS(DedeCMS)出现“连接数据库失败”的错误时,可以通过以下几个步骤进行排查和解决:1.检查数据库配置文件打开配置文件打开织梦CMS的数据库配置文件 include/config.inc.php。使用FTP工具或SSH连接到服务器,然后打开该文件。检查配置信息确认数据库配置信息是否正......
  • 织梦如何数据库备份,织梦cms网站数据怎么备份与还原
    织梦CMS(DedeCMS)的数据库备份和还原是非常重要的操作,可以帮助你在出现问题时快速恢复数据。下面详细介绍如何进行织梦CMS的数据库备份和还原。一、数据库备份1.使用phpMyAdmin备份数据库登录phpMyAdmin登录到你的网站控制面板(如cPanel)。找到并打开phpMyAdmin。选择......
  • 模板设计模式
    模板设计模式是一种行为设计模式,它在一个方法中定义了一个算法的骨架,而将一些步骤的实现延迟到子类中。结构抽象类(AbstractClass)定义了模板方法(TemplateMethod),它包含了算法的骨架,通常是一个final方法,以防止子类重写整个算法流程。同时定义了一些抽象方法(AbstractMethod),这......
  • PbootCms上传图片变模糊、上传图片尺寸受限的解决方案
    在使用PbootCMS的过程中,如果上传的图片被压缩变得模糊,通常是因为上传的图片尺寸过大。PbootCMS默认的上传图片限制宽度为1920像素,缩略图的限制大小为1000×1000像素。可以通过调整这些参数来解决这个问题。解决方案打开 config.php 文件调整 max_width 和 max_heigh......