![](https://box.kancloud.cn/499db9463a8836aadb3be8c340e52c9b_613x55.png)首先建立一张注册用的数据表先,我这里新建了一张wemall_name表
里面数据大概是id username,password这几个,后期不一定会用到这张表,只能用来测试用的,因为还有很多字段没有建好,一开始没有设计数据库就会有一些后期的麻烦,无可避免的。
建好表之后就是控制器代码的实现了。
![](https://box.kancloud.cn/0d3d762bebbb14beec55c04d66e6d773_560x255.png)
前端页面代码app/index/view/register.html:
~~~
<!DOCTYPE html>
<html>
<head>
<title>注册页面</title>
<meta charset="utf-8">
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-touch-fullscreen" content="yes">
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<link href="__INDEX__/css/register.css" type="text/css" rel="stylesheet">
<link href="__INDEX__/css/global.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="__INDEX__/js/register.js"></script>
</head>
<body>
<div id="layout">
<span>账号注册</span>
<form method="post" action="{:url('index/login/register')}">
<ul>
<p id="err_msg"></p>
<li><i class="un"><img src="__INDEX__/images/user_name.png"></i><input class="username" type="text" id="username" name="username" value="{$Request.session.username}" placeholder="请输入用户名" onblur="checkusernamea()" /></li>
<div id="yhm"><p id="check1" style="color: red; font-size: 15px; text-align: center;"></p></div>
<li><i class="pw"><img src="__INDEX__/images/pwd.png"></i><input class="pwd" type="password" name="cpassword" id="cpassword" placeholder="请输入密码" onblur="checkpassword(this.value)"/></li>
<div id="yhm1"><p id="checkPasswordResult" style="color: red; font-size: 15px; text-align: center;"></p></div>
<li><i class="pw2"><img src="__INDEX__/images/pwd.png"></i><input class="pwd2" type="password" id="passwordd" name="passwordd" placeholder="请输入确认密码" onblur="checkpasswordd()" /></li>
<div id="yhm2"><p id="check3" style="color: red; font-size: 15px; text-align: center;"></p></div>
<div class="queren"><input class="fx" type="checkbox" checked="checked" /><p>我已阅读并同意《用户协议》</p></div>
</ul>
<div class="reg_btn">
<button class="submit" type="submit" onclick="return checkform(this.form);">注册</button>
<a href="{:url('index/login/index')}"><div class="reg-login"><p>已有帐号,立即登陆</p></div></a>
</div>
</form>
</div>
</body>
</html>
~~~
还有一些其他链接控制器的方法:
![](https://box.kancloud.cn/712a73ae8a966b29ea19eb4bd31eade8_953x683.png)
还有一个就是我使用了ajax的异步刷新来实现用户名检测:
![](https://box.kancloud.cn/c4eba1d1fcd94892e16ef69188659f7b_932x243.png)
控制器ajax代码:
![](https://box.kancloud.cn/9ec734304a97115f3a5a0c96be68b6f5_610x243.png)
![](https://box.kancloud.cn/d1f8308800893fa71078c655bf5232bb_684x81.png)
下面到注册代码了,在这个功能上我研究了几天(当然更多的因为我去追剧了 * _ *),看了好几份代码,最后发现,手册里早已经写好了方法,虽然耗费了些时间,但是也了解了一些其他方面的东西,还是有些许收获的。也能够了解到多种解决方法。
控制器app/index/login.php代码:
~~~
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2017/5/14
* Time: 22:44
*/
namespace app\index\controller;
use think\Controller;
use think\Db;
use think\Cookie;
use think\Request;
use think\Session;
class Login extends Controller{
public function index(){
return $this->fetch('login');
}
public function regi(){
return $this->fetch('register');
}
public function register(){
//检查数据库名
$userinfo = Db::name('name');
//判断是否post输入
if (input('post.')){
//实例输入获取
$data=input('post.');
//验证用户信息
if (!isset($data['username']) || empty($data['username'])){
return $this->erro('请输入用户名!');
}
if (!isset($data['cpassword']) || empty($data['cpassword'])){
return $this->error('请输入密码',-1);
}
if (!isset($data['passwordd']) || empty($data['passwordd'])){
return $this->error('请确认密码',-1);
}
if ($data['cpassword'] != $data['passwordd']){
return $this->error('两次密码不一致',-1);
}
}
//接收post数据
$username = input('post.username');
$password = input('post.cpassword');
$repassword = input('post.passwordd');
//获取数据并生成数组
$value['username'] = $username;
$value['password'] = $password;
//插入数据
$res = $userinfo->insert($value);
//插入数据
//$data=input('post.');
//$ids = $userinfo->insert($usss);
//插入数据id
//$ids = $userinfo->insertGetId($data);
//插入数据
//$idss = $userinfo->insert($data);
//$newdata['id'] = $ids;
//$newdata['username'] = $idss;
//$aaa = Request::instance();
//$bbb = $aaa->post("cpassword");
//$ids = $userinfo->insert($bbb);
//$newdata['cpassword'] = $ids;
//$dataa = $this->request->post('username');
//$datab = $this->request->post('cpassword');
//$ids = $userinfo->insert($dataa);
//$ids = $userinfo->insert($datab);
//$newdata['username'] = $ids;
//$newdata['password'] = $idsb;
//$newids = $userinfo->update($res);
//进行判断
if ($res){
//$__SESSION['id'] = $ids;
//记录到session中
Session::set('username');
return $this->success('注册成功',url('index/login/index'));
}else{
return $this->error('注册失败');
}
//记录用户登录信息
//cookie('id',$has['id'],7200);
//cookie('username',$has['username'],7200);
//跳转登录
}
//判断用户名是否已经存在
public function check($username)
{
$info = db('name')->where('username','=',$username)->find();
if ($info){
echo "用户名已存在";
}else{
echo "";
}
exit;
}
}
/*//插入数据
//判断是否post输入
* if (request()->isPost()) {
* //链接数据库名
$userinfo = Db::name('name');
$data = input('post.');
$res = $userinfo->insert($data);
if ($res) {
return $this->success('注册成功');
} else {
return $this->success('注册失败');
}
}
*/
~~~
在表单提交这方面花费了一些功夫,虽然最后解决了,但是我还是不能太满意,我觉得有更好的方法来解决,可惜技术不到家。
其他的注册插入数据方法我也一起截图进来吧。
这是我参考的其中一份代码:
![](https://box.kancloud.cn/c8fb13e9ecc201ee9b50bbf0ca59d8aa_663x811.png)
这个也是注册方法
![](https://box.kancloud.cn/b4f55b4d4fec9afca5abbabe94835c5a_498x399.png)
注册跳转页面:
![](https://box.kancloud.cn/75117a61632c6f5a4bfb8b8d9a73da95_351x254.png)
![](https://box.kancloud.cn/4b82eba878016cb2cbcc011eb8d71566_379x20.png)
下面将会实现一些功能,比如用户名判断是否存在,虽然ajax实现了但是控制器还需要再验证一次,还有就是用户名长度问题,使用session记录登录用户信息功能的实现。
在app/index/login.php/sutr方法中添加判断条件(上面使用的register方法修改成了sutr,并在注册页面url里修改好方法名),通过查询数据库数据来实现验证用户名是否存在与用户名的长度。
![](https://box.kancloud.cn/ea9fc24b7aefc739c0ada5a1351d8434_690x551.png)
使用session记录注册的用户名
在config配置里找到session开启并在类中引用use think\Session
![](https://box.kancloud.cn/9942c67d8e04c043cb38b73b09fc5068_534x266.png)
记录session,赋值给session中,第一个填写前端页面的表单名字,第二个写的是接受到表单post数据的变量名。
![](https://box.kancloud.cn/499db9463a8836aadb3be8c340e52c9b_613x55.png)
在页面中引入value,这里的意思是引用session保存的用户名。
![](https://box.kancloud.cn/261bffebfcc2584b7865eade3337f6f9_923x144.png)
到这里基本已经完成了注册功能的实现,下一节将会讲到我这次遇到的新函数和方法,基本上了解完这些也算是学会新增数据了。