织梦会员模型扩展字段添加
会员模型与字段总览
织梦会员系统存储于 dede_member 主表,包含账号、密码、邮箱、积分、等级等基础字段。实际业务中常需要扩展更多会员信息,例如:手机号、真实姓名、性别、生日、公司、行业、所在地、头像、个人简介等。
扩展方式有两种:原生会员字段管理与会员附加表。掌握二者区别与用法,能灵活满足不同业务场景。
方式一:原生会员字段管理
织梦后台提供了可视化的会员字段管理界面,无需写 SQL 即可添加字段。
操作步骤
1. 登录后台 → 会员 → 会员模型管理。
2. 点击“添加新字段”,填写:
字段名称:tel
字段标题:手机号码
字段类型:单行文本
数据类型:varchar
最大长度:20
默认值:(留空)
是否必填:是
前台显示:是
字段值校验:手机号正则 ^1[3-9]\d{9}$
3. 保存后系统会自动在 dede_member 表中新增 tel 字段。
典型扩展字段清单
realname 真实姓名 varchar(50)
gender 性别 radio(男,女)
birthday 生日 date
company 公司 varchar(100)
industry 行业 select
nativeplace 所在地 联动字段
face 头像 img
intro 个人简介 textarea
方式二:会员附加表(高级)
当扩展字段非常多(数十个),直接堆在 dede_member 主表会拖慢登录、查询。此时建议创建独立的“会员附加表”,例如 dede_member_ext,用 mid 与主表关联。
创建附加表
CREATE TABLE `dede_member_ext` (
`mid` mediumint(8) unsigned NOT NULL,
`tel` varchar(20) NOT NULL DEFAULT '',
`realname` varchar(50) NOT NULL DEFAULT '',
`gender` tinyint(1) NOT NULL DEFAULT '0',
`birthday` date DEFAULT NULL,
`company` varchar(100) NOT NULL DEFAULT '',
`intro` text,
PRIMARY KEY (`mid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
读写扩展数据
// 读取
function GetMemberExt($mid) {
global $dsql;
$row=$dsql->GetOne("SELECT * FROM `dede_member_ext` WHERE mid='{$mid}'");
return $row ? $row : [];
}
// 写入
function SaveMemberExt($mid, $data) {
global $dsql;
$tel=$data['tel'];
$realname=$data['realname'];
// 先判断是否存在
$row=$dsql->GetOne("SELECT mid FROM `dede_member_ext` WHERE mid='{$mid}'");
if ($row) {
$dsql->ExecuteNoneQuery("UPDATE `dede_member_ext` SET
tel='$tel', realname='$realname' WHERE mid='$mid'");
} else {
$dsql->ExecuteNoneQuery("INSERT INTO `dede_member_ext`
(mid, tel, realname) VALUES ('$mid','$tel','$realname')");
}
}
前台调用会员扩展字段
会员中心首页
{dede:php}
global $dsql, $cfg_ml;
$ext=GetMemberExt($cfg_ml->M_ID);
echo "手机号:".$ext['tel'];
echo "真实姓名:".$ext['realname'];
{/dede:php}
文章页显示作者信息
{dede:field.mid runphp='yes'}
global $dsql;
$mid=@me;
$row=$dsql->GetOne("SELECT m.userid, m.face, e.realname, e.intro
FROM `dede_member` m
LEFT JOIN `dede_member_ext` e ON m.mid=e.mid
WHERE m.mid='$mid'");
@me="<div class='author'>
<img src='{$row['face']}'>
<span>{$row['realname']}</span>
<p>{$row['intro']}</p>
</div>";
{/dede:field.mid}
编辑表单开发
在 /member/templets/edit_info.htm 中扩展编辑表单:
<form action="edit_info.php" method="post">
<label>真实姓名:</label>
<input type="text" name="realname" value="<?php echo $ext['realname']; ?>">
<label>手机号:</label>
<input type="text" name="tel" value="<?php echo $ext['tel']; ?>">
<label>性别:</label>
<label><input type="radio" name="gender" value="1" <?php if($ext['gender']==1)echo 'checked'; ?>>男</label>
<label><input type="radio" name="gender" value="2" <?php if($ext['gender']==2)echo 'checked'; ?>>女</label>
<label>个人简介:</label>
<textarea name="intro" rows="4"><?php echo $ext['intro']; ?></textarea>
<button type="submit">保存</button>
</form>
处理脚本 edit_info.php 中调用 SaveMemberExt($cfg_ml->M_ID, $_POST)。
注意事项
1. 直接修改
dede_member 表结构会影响织梦升级,建议升级前备份表结构并对照官方 changelog。2. 扩展字段在注册页(
reg_new.php)默认不显示,需手动修改注册模板与处理逻辑。3. 手机号、邮箱等敏感字段建议加唯一索引,避免重复注册。
4. 用户提交的数据必须用
htmlspecialchars 转义后入库,防止 XSS 注入。5. 联动字段(如地区)需要先在“联动类别管理”中配置枚举,会员字段才能正常调用。
后续行动建议
会员字段扩展后,建议同步梳理“字段-表单-调用”清单,标注每个字段是否必填、是否对外展示、由谁维护。对于业务复杂的站点,可考虑把会员附加表拆为多个领域表(如基础信息表、企业信息表、社交信息表),通过 mid 关联,避免单表字段膨胀。同时开发会员数据导出功能,便于运营做精准营销与用户画像分析,让会员数据真正支撑业务决策。