- 获取当前登录会员的ID。
- 根据这个ID查询并显示会员的详细信息。
下面是详细的步骤和代码示例。

第一步:获取当前登录会员的ID
DedeCMS提供了一个全局变量 $_SESSION['aid'] 来存储当前登录会员的ID,你可以在任何需要的地方直接使用这个变量。
验证代码:
你可以在模板文件(如 index.htm)中先输出一下这个ID,确认是否能正确获取。
{dede:php}
// 检查会员是否已登录
if(emptyempty($_SESSION['aid'])) {
echo "您尚未登录!";
} else {
$member_id = $_SESSION['aid'];
echo "当前登录会员ID是: " . $member_id;
}
{/dede:php}
如果页面显示了您的会员ID,说明第一步已经成功。
第二步:查询并显示会员信息(地址、年龄等)
DedeCMS会员的信息存储在 dede_member 表(基本字段)和 dede_member_tpData 表(扩展字段,如地址、年龄等)中。

使用 dede:php 标签(推荐,更灵活)
这是最常用且最强大的方法,你可以在模板中直接嵌入PHP代码来查询数据库并显示结果。
操作步骤:
-
登录后台 -> 系统 -> 会员设置 -> 会员模型管理。
-
点击你正在使用的会员模型(通常是“普通会员”)后面的 [字段管理]。
(图片来源网络,侵删) -
你可以看到所有会员扩展字段,确保你的“地址”和“年龄”字段已经存在并且是正确的字段名(
address和age),如果不存在,你需要先添加它们。 -
在你需要显示会员信息的模板文件(
member/index.htm或其他自定义页面)中,添加以下代码:
{dede:php}
// 1. 确保会员已登录
if(!emptyempty($_SESSION['aid'])) {
$member_id = $_SESSION['aid'];
// 2. 连接数据库(DedeCMS已经自动连接,通常不需要手动连接)
global $dsql;
// 3. 查询会员信息
// 注意:根据你的实际字段名修改 `m.address` 和 `m.age`
$query = "SELECT m.*, t.address, t.age
FROM dede_member m
LEFT JOIN dede_member_tpData t ON m.mid = t.mid
WHERE m.mid = $member_id";
$row = $dsql->GetOne($query);
// 4. 显示信息
if(is_array($row)) {
echo "<h3>我的个人信息</h3>";
echo "<p>用户名: " . $row['uname'] . "</p>";
echo "<p>性别: " . ($row['sex'] == '男' ? '男' : '女') . "</p>";
// 判断地址和年龄是否存在,避免显示空值
if(!emptyempty($row['address'])) {
echo "<p>地址: " . $row['address'] . "</p>";
}
if(!emptyempty($row['age'])) {
echo "<p>年龄: " . $row['age'] . "</p>";
}
} else {
echo "未找到会员信息。";
}
} else {
echo "请先登录!";
}
{/dede:php}
代码解释:
$_SESSION['aid']: 获取当前登录会员ID。global $dsql;: 调用DedeCMS的全局数据库连接对象。SELECT m.*, t.address, t.age ...: SQL查询语句,从主表dede_member(m) 和扩展表dede_member_tpData(t) 中联合查询所需字段。m.mid = t.mid是两个表的关联条件。$dsql->GetOne($query): 执行查询并只获取第一条结果,返回一个关联数组。$row['字段名']: 通过数组键名访问查询到的数据。
使用自定义函数(更优雅,适合多处调用)
如果你想在多个模板页面中重复使用这个功能,创建一个自定义函数是更好的选择。
操作步骤:
-
创建函数文件: 在
include/extend.func.php文件中(如果不存在,请创建这个文件)添加以下函数:// 函数功能:根据会员ID获取会员信息 function GetMemberInfo($mid) { global $dsql; if (empty($mid)) { return false; } $query = "SELECT m.*, t.address, t.age FROM dede_member m LEFT JOIN dede_member_tpData t ON m.mid = t.mid WHERE m.mid = $mid"; $row = $dsql->GetOne($query); return $row; } -
在模板中调用函数: 你可以在任何模板文件中非常简洁地调用这个函数。
{dede:php} // 调用我们刚刚创建的函数 $member_info = GetMemberInfo($_SESSION['aid']); if ($member_info) { echo "<h3>我的个人信息</h3>"; echo "<p>用户名: " . $member_info['uname'] . "</p>"; if(!emptyempty($member_info['address'])) { echo "<p>地址: " . $member_info['address'] . "</p>"; } if(!emptyempty($member_info['age'])) { echo "<p>年龄: " . $member_info['age'] . "</p>"; } } else { echo "请先登录或会员信息不存在。"; } {/dede:php}
这种方法代码更整洁,逻辑更清晰,并且易于维护。
重要提示和常见问题
- 字段名必须正确:在SQL查询中,
t.address和t.age中的address和age必须与你后台添加的扩展字段名完全一致,包括大小写。 - 会员模型和表:如果你的网站使用了自定义的会员模型,那么扩展字段所在的表可能不是
dede_member_tpData,而是类似dede_member_model_1这样的表,请务必检查你使用的模型对应的表名。 - 未登录状态:代码中已经包含了判断会员是否登录的逻辑(
if(!emptyempty($_SESSION['aid']))),这可以防止未登录用户看到错误信息。 - 安全考虑:直接在模板中写SQL查询是可行的,因为DedeCMS的
$dsql对象已经做了基本的安全处理,但对于更复杂的系统,始终要对用户输入进行过滤和转义。
对于绝大多数情况,方法一(使用 dede:php 是最直接、最容易理解的解决方案,如果你追求代码的复用性和可维护性,方法二(自定义函数) 是更优的选择。
根据你的实际需求选择一种方法,并确保你的数据库字段名和表名正确无误,就可以成功显示当前登录会员的地址、年龄等详细信息了。
