dede完善资料页面如何正确操作?

99ANYc3cd6
预计阅读时长 22 分钟
位置: 首页 DEDE建站 正文

这个页面通常出现在用户登录后,后台会判断用户是否已经完善了资料(比如昵称、头像等),如果没有,则会引导或强制用户前往一个页面填写信息,这个页面的文件是 member/editinfo.php

dede消完善资料这页
(图片来源网络,侵删)

下面我将从 页面功能、文件结构、核心代码解析、常见问题及修改方法 四个方面为您详细拆解。


页面功能概述

“完善资料”页面的核心功能是:

  1. 信息展示:向当前登录的用户展示其当前的个人资料信息(如用户名、邮箱、手机号、会员等级等),这些信息通常是从 dede_member 数据表中读取的。
  2. 信息编辑:提供一个表单,允许用户修改或补充自己的个人资料,如昵称、性别、生日、QQ、MSN、头像等。
  3. 数据验证与提交:当用户提交表单后,后端PHP代码会验证数据的合法性(如格式、长度等),然后将更新后的数据写入到 dede_memberdede_member_tpl(用于存储模板信息)等数据表中。
  4. 页面跳转:提交成功后,通常会跳转到会员中心首页或其他指定页面。

文件结构

这个页面主要涉及以下文件:

  • 核心处理文件
    • /member/editinfo.php:处理用户提交数据、验证、更新数据库的核心逻辑。
  • 模板文件
    • /member/templets/editinfo.htm:这个页面的HTML模板,决定了页面的最终显示样式和布局,你主要在这里修改界面。
  • 语言包文件
    • /member/lang/xxx_utf8.php:页面中使用的文本,如标题、按钮文字、提示信息等,都定义在这里。xxx 代表你的语言,如 gbkutf8

核心代码解析 (/member/editinfo.php)

我们来逐段分析这个PHP文件的工作流程。

dede消完善资料这页
(图片来源网络,侵删)

判断登录状态

// 检查用户是否登录
if($uid == 0)
{
    ShowMsg('请先登录!', 'login.php');
    exit();
}

这是所有会员页面的标准开头,通过检查全局变量 $uid(用户ID)来判断用户是否登录,如果未登录,则跳转到登录页面。

获取用户信息

// 获取当前用户的信息
$row = $dsql->GetOne("SELECT * FROM `#@__member` WHERE mid = '{$uid}'");

使用SQL查询从 #@__member 表中获取当前登录用户的完整数据,并存储在 $row 数组中。#@__ 是DedeCMS的数据表前缀,在安装时被替换为你设置的前缀(如 dede_)。

处理表单提交 (POST请求)

这是页面的核心逻辑,当用户填写完资料并点击“提交”按钮时,会触发这部分代码。

// 判断是否是POST提交
if($dsql->IsTable('member_validate')) $dsql->ExecuteNoneQuery("DELETE FROM `#@__member_validate` WHERE mid='$uid';");
if(empty($safequestion)) $safequestion = '';
if(empty($safeanswer)) $safeanswer = '';
// 更新用户信息到主表
$rs = $dsql->ExecuteNoneQuery("UPDATE `#@__member` SET 
    mtype='$mtype', 
    sex='$sex', 
    birthday='$birthday', 
    email='$email', 
    uname='$uname', 
    qq='$qq', 
    msn='$msn', 
    tel='$tel', 
    mobile='$mobile', 
    address='$address', 
    postcode='$postcode', 
    occupation='$occupation', 
    company='$company', 
    position='$position', 
    income='$income', 
    education='$education', 
    residereside='$residereside', 
    note='$note' 
    WHERE mid = '{$uid}'");
// 更新用户信息到模板表
$rs2 = $dsql->ExecuteNoneQuery("UPDATE `#@__member_tpl` SET 
    mtype='$mtype', 
    sex='$sex', 
    birthday='$birthday', 
    email='$email', 
    uname='$uname', 
    qq='$qq', 
    msn='$msn', 
    tel='$tel', 
    mobile='$mobile', 
    address='$address', 
    postcode='$postcode', 
    occupation='$company', 
    position='$position', 
    income='$income', 
    education='$education', 
    residereside='$residereside', 
    note='$note' 
    WHERE mid = '{$uid}'");
if($rs && $rs2)
{
    ShowMsg('个人资料修改成功!', 'index.php'); // 成功后跳转到会员中心首页
    exit();
}
else
{
    ShowMsg('个人资料修改失败,请重试!', '-1');
    exit();
}
  • SQL更新:代码执行了两条 UPDATE 语句,分别更新 #@__member(主表)和 #@__member_tpl(模板表),这样做是为了保证数据的一致性。
  • 变量来源:表单中输入的值(如 $sex, $email 等)是通过 $_POST 全局数组自动获取的。
  • 结果反馈:使用 ShowMsg() 函数来显示操作结果,成功则跳转到 index.php(会员中心首页),失败则返回当前页面(-1 表示返回上一页)。

显示页面 (GET请求)

如果用户是直接访问这个页面(通过GET请求),或者提交失败后返回,则会执行下面的代码来加载模板并显示。

dede消完善资料这页
(图片来源网络,侵删)
// 加载模板文件
include(DEDEMEMBER.'/templets/editinfo.htm');
// 将用户数据传递给模板
$fields = array();
foreach($row as $k=>$v)
{
    $fields[$k] = htmlspecialchars($v);
}
  • include(DEDEMEMBER.'/templets/editinfo.htm');:加载HTML模板文件。
  • foreach($row as $k=>$v):将之前从数据库获取的用户数据 $row 进行处理,使用 htmlspecialchars() 函数转义HTML特殊字符,防止XSS攻击,然后将处理后的数据存入 $fields 数组。
  • 模板赋值:在较新版本的DedeCMS中,这里通常会使用 assign() 方法将 $fields 数组传递给模板引擎,以便在模板中调用。$tpl->assign('fields', $fields);

常见问题及修改方法

问题1:如何修改页面的标题和按钮文字?

解决方法:修改语言包文件。 打开 /member/lang/utf8.php(根据你的编码选择),找到类似以下的行并修改:

define('MEMBER_EDITINFO_TITLE', '完善个人资料');
define('MEMBER_EDITINFO_SUBMIT', '提交');

问题2:如何增加或删除一个表单字段?(例如增加一个“微信号”字段)

解决方法:这是一个典型的“三步走”操作,需要同时修改 PHP处理逻辑数据库HTML模板

步骤1:修改数据库#@__member#@__member_tpl 这两张表中,增加一个新的字段,wechat,类型为 varchar(100)

ALTER TABLE `dede_member` ADD `wechat` VARCHAR(100) NOT NULL DEFAULT '';
ALTER TABLE `dede_member_tpl` ADD `wechat` VARCHAR(100) NOT NULL DEFAULT '';

步骤2:修改PHP处理逻辑 (/member/editinfo.php)UPDATE 语句中,增加对新字段 wechat 的更新。

// 在第一个UPDATE语句中增加
$rs = $dsql->ExecuteNoneQuery("UPDATE `#@__member` SET ... , wechat='$wechat' WHERE mid = '{$uid}'");
// 在第二个UPDATE语句中也增加
$rs2 = $dsql->ExecuteNoneQuery("UPDATE `#@__member_tpl` SET ... , wechat='$wechat' WHERE mid = '{$uid}'");

步骤3:修改HTML模板 (/member/templets/editinfo.htm) 在表单的适当位置,增加一个输入框。

<tr>
    <td width="20%">微信号:</td>
    <td><input type="text" name="wechat" id="wechat" value="<?php echo $fields['wechat']; ?>" class="text" style="width:200px;" /></td>
</tr>
  • name="wechat":这个 name 属性必须与PHP中接收的变量名 ($_POST['wechat']) 一致。
  • value="<?php echo $fields['wechat']; ?>":这里会显示用户当前已填写的微信号。

问题3:如何强制用户在第一次登录时完善资料?

解决方法:这个逻辑通常在会员中心首页 (index.php) 或登录成功后的处理文件中实现,思路是:检查用户是否是“新注册”状态,如果是,则跳转到 editinfo.php

  1. dede_member 表中增加一个字段,如 is_new,默认值为 1

  2. 用户注册成功后,将 is_new 设为 1

  3. 在会员中心首页 (/member/index.php) 的开头加入判断逻辑:

    // 获取用户信息
    $row = $dsql->GetOne("SELECT is_new FROM `#@__member` WHERE mid = '{$uid}'");
    // 如果是新用户,则跳转到完善资料页面
    if ($row['is_new'] == 1) {
        ShowMsg('请先完善您的个人资料!', 'editinfo.php');
        exit();
    }
  4. 当用户在 editinfo.php 成功提交资料后,除了更新资料,还要将 is_new 字段更新为 0

    // 在 editinfo.php 的成功提交逻辑里增加
    $dsql->ExecuteNoneQuery("UPDATE `#@__member` SET is_new='0' WHERE mid = '{$uid}'");

通过以上详细的解析,你应该对DedeCMS的“完善资料”页面有了全面的理解,可以根据自己的需求进行定制和修改。

-- 展开阅读全文 --
头像
织梦列表页如何只调用前几个内容?
« 上一篇 03-04
dede缩略图如何设置为原图?
下一篇 » 03-04

相关文章

取消
微信二维码
支付宝二维码

目录[+]