完成用户注册,用户登录,分页功能,完成数据的增删改查,添加好友的功能
1、完成用户注册
公共文件:redis.php
注册页面:reg.php
处理注册用户的页面action.php
用户列表页面:index.php
登录页面:login.php
我们要考虑reg发送数据到actrion页面后如何redis数据库
废话不多说,开干
使用哈希来存储注册的用户信息:
如何构建存储用户的哈希的键
$id = $redis->incr(‘id’);//没刷新一次+1和mysql里面的自动增长其实差不多
user:id:$id ==èhmset(user:id:$id,array(‘id’=>$id,’username’=>$username))
因为连接redis属于一个公共文件,所以创建一个redis.php
<?php
$redis = new Redis();
$redis -> connect('localhost',6379);
$redis -> auth('123456');//因为我修改了配置文件的密码是123456
下一步就开始写注册页面了reg.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<form action="action.php?act=reg" method="post">
<table>
<caption><h1>用户注册</h1></caption>
<tr>
<th>name</th>
<td><input type="text" name="username"></td>
</tr>
<tr>
<th>pass</th>
<td><input type="password" name="pass"></td>
</tr>
<tr>
<th>age</th>
<td><input type="text" name="age"></td>
</tr>
<tr>
<td align="rigth"><input type="submit" value="注册" /></td>
<td align="center"><input type="reset" value="重置"></td>
</tr>
</table>
</form>
</body>
</html>
这里完事,下一步就到了注册成功跳转页面了index.php
<?php
header("Content-Type:text/html;charset=utf-8");
echo "欢迎来到首页";
echo "<a href='./action.php?act=unse'>清空session</a>";
session_start();
var_dump($_SESSION);
下一步就开始写注册处理页了,action.php
<?php
header("Content-Type:text/html;charset=utf-8");
require "redis.php";
$act = isset($_GET['act']) ? $_GET['act'] : '';
if($act == 'reg'){
//完成用户注册处理
//接收用户名和密码以及年龄
$username = $_POST['username'];
$password = $_POST['pass'];
$age = $_POST['age'];
$res = $redis -> get('username:'.$username);
//判断下如果帐号是否存在
if(!empty($res)){
echo "<script>alert('抱歉,您的的用户名已存在!');window.location.href='./reg.php';</script>";die;
}
//生成自增的id
$id = $redis -> incr('id'); //就算一开始没有id这个键,他也会自动增长的
//构建哈希的键
$key = "user:id".$id;
//数据存储成哈希
$redis -> hmset($key,array('id'=>$id,'username'=>$username,'password'=>$password,'age'=>$age));
//把用户名和id的关系存储起来,便于在登录时验证
//我们使用字符串类型来存储该关系'username:'.$username;作为字符串的键,值为id
//$redis -> get('username:'.$username);//在存储前,验证下用户名是否存在
$redis -> set('username:'.$username,$id);
session_start();
$_SESSION['username'] = $username;
$_SESSION['user_id'] = $id;
header("location:index.php");
}else if($act=='login'){
//处理登录的程序
//接收输入的用户名和密码
$username = $_POST['username'];
$password = $_POST['pass'];
//更具用户名找出id
$id = $redis -> get("username:".$username); //取出存储的id
if(!$id){
echo "<script>alert('抱歉,您输入的用户名有误!');window.location.href='./login.php';</script>";die;
}
//根据id拼接哈希的键
$key = "user:id".$id;
//在哈希里取出密码的字段
$pass = $redis -> hget($key,'password');
//判断用户输入的密码和取出的密码是否一致
if($password == $pass){
//如果一样的证明是合法的用户
session_start();
$_SESSION['username'] = $username;
$_SESSION['user_id'] =$id;
header("location:index.php");
}else{
echo "<script>alert('抱歉,您输入的用户名或密码有误!');window.location.href='./login.php';</script>";die;
}
}else if($act =='unse'){
session_start();
session_destroy();
header("location:login.php");
}
完事后开始测试注册两个帐号,然后查看redis里面没注册前数据时空的,注册后数据是否和这里的一样,如果一样,恭喜成功
下一步就开始写登录页面了login.php,我们做的前提是要考虑下如何从redis里面将数据拿出来和用户输入进来的进行匹配
决解的思路是:
找到哈希的键,取出密码的字段进行匹配即可
哈希的键我们目前只是知道user:id:$id,但这里面的$id我们可以根据用户输入的用户名找出id,只要id能找出来,那哈希的键也意味着找到了。
这样说明我们刚才所做的注册还没完成做好,要把用户名和id的关系存储起来,才可以更加的便于在登录时候做验证。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="action.php?act=login" method="post">
<table>
<caption><h1>用户登录</h1></caption>
<tr>
<th>name</th>
<td><input type="text" name="username"></td>
</tr>
<tr>
<th>pass</th>
<td><input type="password" name="pass"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" name="重置"></td>
</tr>
</table>
</form>
</body>
</html>