微博项目_个人中心

在微博项目中有个人中心页面,用户可以在该页面中修改个人资料信息以及密码等。而这一节中,我会针对一些简单的信息修改进行代码实现。

修改基本资料

根据我们之前的数据库建模,用户资料信息都是存储在用户信息表中,所以个人资料的修改与该表有关,而我们的目的即是将原数据表中的信息替换为用户提交的修改信息。

前端页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<!-- /practice/Home/View/UserSetting/index.html -->

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content="text/html;charset=UTF-8" />
<title>修改个人资料</title>
</head>
<body>
<div>
<form action="{:U(editBasic)}" method="post">
<fieldset>
<legend>基本信息</legend>
<p>
<label for="username">昵称:</label>
<input type="text" name="username" value="{$user.username}" id="username">
</p>
<p>
<label for="truename">真实姓名:</label>
<input type="text" name="truename" value="{$user.truename}" id="truename">
</p>
<p>
<label for="">性别:</label>
<input type="radio" name="sex" <if condition='$user["sex"] == "男"'>checked="checked"</if> >男
<input type="radio" name="sex" <if condition='$user["sex"] == "女"'>checked="checked"</if> >女
</p>
<p>
<label for="">星座:</label>
<select name="constellation">
<option value="">请选择:</option>
<option value="白羊座">白羊座</option>
<option value="金牛座">金牛座</option>
<option value="双子座">双子座</option>
<option value="巨蟹座">巨蟹座</option>
<option value="狮子座">狮子座</option>
<option value="处女座">处女座</option>
<option value="天秤座">天秤座</option>
<option value="天蝎座">天蝎座</option>
<option value="射手座">射手座</option>
<option value="魔羯座">魔羯座</option>
<option value="水瓶座">水瓶座</option>
<option value="双鱼座">双鱼座</option>
</select>
</p>
<p>
<label for="intro">个人简介:</label>
<input type="text" name="intro" value="{$user.intro}" id="intro">
</p>
<p>
<input type="submit" value="保存修改">
</p>
</fieldset>
</form>
</div>

上面的html页面中,我列出了用户个人资料中的几项:昵称、真实姓名、性别、星座、个人简介。从代码中可以看出,并不是简单的静态页面,而是已经结合了php代码,从而实现动态页面的效果。

后端业务处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* /practice/Home/Controller/UserSettingController.class.php */

<?php
namespace Home\Controller;
use Think\Controller;

class UserSettingController extends Controller {

//用户基本信息视图
public function index() {
$where = array('id' => $_SESSION['uid']);
//从数据库中取出有用的字段
$field = array('username','truename','constellation','sex','intro');
$user = M('userinfo')->where($where)->field($field)->find();

$this->user = $user; //传递变量到模板中,可供模板调用
$this->display();
}
//修改基本信息
public function editBasic() {
if (!IS_POST) {
E('页面不存在');
}
//整理待插入数据库的数据
$data = array(
'username' => I('post.username'),
'truename' => I('post.truename'),
'sex' => I('post.sex/d'),
'constellation' => I('post.constellation'),
'intro' => I('post.intro')
);

$where = array('id' => $_SESSION['uid']);
if (M('userinfo')->where($where)->save($data)) {
$this->success('修改成功',U('index'));
} else {
$this->error('修改失败');
}
}
}
?>

修改密码

根据之前的数据库建模,用户的账号和密码信息都保存在用户表中,所以我们只需要将原先数据表中保存的密码信息替换为用户提交的新密码信息即可。

前端页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!-- UserSetting/index.html -->

<form action="{:U(editPwd)}" method="post">
<fieldset>
<legend>修改密码</legend>
<p>
<label for="old">旧密码:</label>
<input type="password" name="old" id="old">
</p>
<p>
<label for="new">新密码:</label>
<input type="password" name="new" id="new">
</p>
<p>
<label for="newed">确认密码:</label>
<input type="password" name="newed" id="newed">
</p>
<p>
<input type="submit" value="确认修改">
</p>
</fieldset>
</form>

后台业务处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/* UserSettingController.class.php */

//修改密码
public function editPwd() {
if (!IS_POST) {
E('页面不存在');
}
$old = I('post.old','','md5');
$where = array('id' => $_SESSION['uid']);
$value = M('user')->where($where)->field('password')->find();

if ($old != $value['password']) {
$this->error('旧密码不正确');
}
if ($_POST['new'] != $_POST['newed']) {
$this->error('两次密码不一致');
}
$data = array(
'password' => I('post.new','','md5')
);

if(M('user')->where($where)->save($data)) {
$this->success('修改成功',U('index'));
} else {
$this->error('修改失败');
}
}
-------------The End-------------