一个基本的用户管理功能其实并不复杂,但是且比较全面的涉及到了动态网站开发的一些知识:数据库设计、表单提交、数据获取、php等动态语言、数据库访问、动态数据显示等等。
一、数据库设计
首先我们用户注册的信息需要保存到一个地方,以后登录的时候才能取出来进行对比,通常就是保存在数据库里面了,一般来说数据库表的设计需满足第三范式,这里我们只是一个最简单的用户结构,包含了登录用户名和登录密码。
- 表名:t_user
- 登录用户字段:name(唯一字段,整个网站只能有一个人叫这个名字,如果需要同名可以加个昵称字段,登录名不同,昵称相同)
- 登录用户密码:password
二、表单提交
让用户注册或登陆首先需要一个界面让用户进行输入,可以理解这个输入的内容就是表单,针对用户注册,我们的页面代码如下:
<!-- 这里是login.html 或者 login.php 里的表单 -->
<form method="post" action="addUser.php">
请输入用户名:<input type="text" name="name"><br>
请输入密码:<input type="password" name="password"><br>
<input type="submit" value="提交">
</form>
由上面代码看出,form和form包含的内容形成了一个表单,我们把表单放到最开始的html最小框架里面就可以形成一个简单的表单提交页面,其中method是http协议的一些方法,有put,get,delete等,当你不上传文件时你只要把这里写成post就行了。action是表单提交的处理页面,一般的页面是htm或者是html结尾的,这里是php,因为我们需要使用php语言来获取数据,访问数据库,而这些功能一般html或者javascript是不行的(不说node.js)。在form标签内有input标签,这是html的输入控件,类型可以是文本(text),密码(password)等,input标签有个那么属性,表单处理页面通过这个属性的值来获取用户输入值。最后一个表单内的控件是提交按钮(type="submit"),当点击此按钮时,用户数据就提交给处理页面了,这里是action="addUser.php".
三、数据获取
当用户编辑完成,点击提交时,数据被传送给addUser.php,我们用动态语言获取提交数据,这里我们用php。php其实可以理解为在html中塞入一段php语法。其中php语言通过<?php ?>标签来识别。php中通过内部变量_POST来获取post提交的数据,代码如下:
$name1 = $_POST['name'];
$password1 = $_POST['password'];
简单不?$表示这是变量,[]表示这是个数组,name和password是名称,也是表单里面控件name控件的值。
四、数据库访问
上面获取到了用户的输入信息,我们需要把这些信息持久化,也就是保存到数据库,数据库访问一般使用sql语言,数据插入的语言一般是insert into tab_name(field1, field2, f3, f4) values(v1, v2, v3, v4);针对本例用户注册可以使用以下拼接:
"insert into t_user(name, password) values('".$name."', '".$password."')"
但是由于sql拼接会有sql注入的风险,所以较安全的方法是使用预编译进行参数绑定,代码如下:
$name1 = $_POST['name'];
$password1 = $_POST['password'];
$mysql = new mysqli("localhost","dbloginname","dbpassword","defaultschemal");
$stmt = $mysql->prepare("insert into t_user(name, password) values(?, password(?))");
$stmt->bind_param('ss', $name1, $password1);
$stmt->execute();
$stmt->close();
$mysql->close();
上面的sql拼接使用?占位符代表需要绑定参数,然后调用bind_param传入相应的数据'ss'表示数据类型,这里是字符串(s)两个,其他类型请参阅手册,后面连个参数就是传入的值了。语句里面用了一个mysql函数password(),意思是把密码加工下,密文保存,这样用户信息就得到更好的保密了。最后记得关闭资源。到此用户注册就完成了。
五、用户登陆
用户登陆和注册的流程差不多,用户提交登陆信息,处理页面进行数据验证,根据验证结果更改登陆状态。区别如下,用户登录是数据验证,前面保存数据,这里查询数据,代码如下:
$name = $_POST['name'];
$password = $_POST['password'];
$stmt = $mysql->prepare("select * from t_user where name=? and password=password(?)");
$stmt->bind_param('ss', $name, $password);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows > 0) {
echo "login success";
session_start();
$_SESSION["name"]=name;
$_SESSION["nickname"]=name;
} else {
echo "login failure.";
}
上面代码意思是当存在用户名和密码一致的记录时登陆成功,否则登陆失败。登陆成功后,我们在后续的操作中怎么获取登陆状态呢?一般情况可以使用session或这cookie来设置状态,这里我们使用session。
session_start();
$_SESSION["name"]=name;
$_SESSION["nickname"]=name;
下次我们通过检查session来判断是否登陆了:
function is_login() {
$ret = isset($_SESSION["name"]);
return $ret;
}
好了,用户注册和登录就基本完成了,但这只是一个简单实现,还有数据验证等需要优化就留给大家来完善吧。
/*********************************
*转载请注明:http://www.aihaiyo.com
**********************************/