用户注册 用户登录 用户的删除和修改 分页显示用户 添加用户的好友
redis.php:
<?php
$redis = new Redis();//实例化
$redis->connect("192.168.114.251");//连接redis的服务器。
$redis->auth('guangzhou');//密码验证
?>
register.php用户注册页面,
思考:如何来存储用户的具体信息,使用哈希,构造一个用户键
user:id
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>新建网页</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<script type="text/javascript">
</script>
<style type="text/css">
</style>
</head>
<body>
<h1>用户注册页面</h1>
<form action="action.php?act=reg" method="post"/>
用户名:<input type="text" name="username"/><br/>
密 码:<input type="text" name="password" /> <br/>
年 龄:<input type="text" name="age"/><br/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
action.php:
<?php
require 'redis.php';
$act = isset($_GET['act'])?$_GET['act']:'';
if($act=='reg'){//完成用户的注册
//接收传递过来的用户名和密码和年龄
$username = $_POST['username'];
$password = $_POST['password'];
$age = $_POST['age'];
///创建一个用户的id
$userid = $redis->incr('id');//
//把用户信息存储到哈希里面,设置哈希的键
$redis->hmset("user:".$userid,array('userid'=>$userid,'username'=>$username,'password'=>$password,'age'=>$age));
//把注册用户的id,存储到链表里面。
//构造链表的一个键 userid
$redis->lpush('userid',$userid);
//构建一个字符串的键,用于存储用户的id
$redis->set('username:'.$username,$userid);
//添加完成后,跳转到index.php页面
header("location:index.php");
}
?>
index.php 首页面,用于显示用户列表页面。
<?php
require 'redis.php';
//取出当前登录用户的好友,
session_start();
$userid = $_SESSION['id'];//登录用户的id
$username = $_SESSION['username'];
echo $username;
echo '<hr>';
//取出所有的用户,从链表里面取出用户的id,根据id拼接成哈希的键,再取出具体的数据
//完成分页显示用户:
//(1)先计算总的记录数,计算链表里面元素的个数
$count = $redis->lsize('userid');
//(2)定义每页显示的记录数;
$perpage = 2;
//(3)计算总的页数
$pagecount = ceil($count/$perpage);
//(4)定义当前页面
$page = isset($_GET['page'])?max(1,min($_GET['page'],$pagecount)):1;
//(5)构建limit变量
/*
第1页: lrange('userid',0,1) ($page-1)*$perpage ($page-1)*$perpage+$perpage-1
第2页: lrange('userid',2,3)
第3页: lrange('userid',4,5)
*/
//取出链表里面的数据
//$ids = $redis->lrange('userid',0,-1);//取出链表里面的 所有数据
$ids = $redis->lrange('userid',($page-1)*$perpage,($page-1)*$perpage+$perpage-1);//取出链表里面的 所有数据
//定义一个空数组,用于接收从哈希里面取出的用户数据
$data=array();
foreach($ids as $v){
$data[]=$redis->hgetall("user:".$v);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>新建网页</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<script type="text/javascript">
</script>
<style type="text/css">
</style>
</head>
<body>
<h1><a href="register.php">用户注册</a></h1>
<h1>用户列表</h1>
<table width="600" border="1">
<tr>
<td>用户名称</td>
<td>用户密码</td>
<td>用户年龄</td>
<td>操作</td>
</tr>
<?php foreach($data as $v){?>
<tr>
<td><?php echo $v['username']?></td>
<td><?php echo $v['password']?></td>
<td><?php echo $v['age']?></td>
<td><a href="del.php?id=<?php echo $v['userid']?>">删除</a> | 修改|<a href="addfield.php?id=<?php echo $v['userid']?>">添加好友</a></td>
</tr>
<?php } ?>
<tr>
<td colspan="4"><a href="?page=<?php echo min($page+1,$pagecount)?>">下一页</a>|<a href="?page=<?php echo max($page-1,1)?>">上一页</a></td>
</tr>
</table>
<?php
//构造集合的键field:$userid
$haoyou = $redis->sMembers("field:".$userid);//存储的是id
//通过好友的id,从哈希里面取出具体用户信息。
//定义一个空数组,用于接收从哈希里面取出的用户数据
$haoyoudata=array();
foreach($haoyou as $v){
$haoyoudata[]=$redis->hgetall("user:".$v);
}
echo '<pre>';
print_r($haoyoudata);
?>
</body>
</html>
del.php 用于删除用户,要注意删除 哈希键 ,还要删除链表里面用户的id
<?php
require 'redis.php';
$id = $_GET['id'];
//删除哈希键 user:$id
$redis->del('user:'.$id);//删除哈希键
//删除链表里面的id值
$redis->lrem('userid',$id);
header("location:index.php");
?>
login.php:用户登录的页面,
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>新建网页</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<script type="text/javascript">
</script>
<style type="text/css">
</style>
</head>
<body>
<h1>用户登录页面</h1>
<form action="loginok.php" method="post"/>
用户名:<input type="text" name="username"/><br/>
密 码:<input type="text" name="password" /> <br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
loginok.php处理用户登录的页面:
<?php
require 'redis.php';
$username = $_POST['username'];
$password = $_POST['password'];
//拼接字符串的键,根据该键获取用户的id
$id = $redis->get('username:'.$username);
if(!$id){
die('该用户不存在');
}
//根据id构造哈希的键,根据哈希的键,或者密码字段
$passwd = $redis->hget('user:'.$id,'password');//返回哈希里面password键的值
if($password ==$passwd){
//登录成功,把当前用户存储到session里面。
/**/
session_start();
$_SESSION['username']=$username;
$_SESSION['id']=$id;
header("location:index.php");
//echo 'ok';
}else{
die('用户名或密码错误');
}
?>
接收到$username 和 $password 如何验证用户合法呢?
用户的数据是存储到哈希里面,哈希的键user:id
思路:根据用户输入的用户名,获取到用户的id,根据id从哈希里面获取用户的密码,该密码再和用户输入的密码进行比较。
在用户注册时,通过设置一个字符串,该字符串用于存储用户的id.
字符串的键:如何设计:’username:’.$username,$userid
addfield.php 添加好友页面,
<?php
require 'redis.php';
$id = $_GET['id'];
//取出当前登录的用户,
session_start();
$userid = $_SESSION['id'];//登录用户的id
//构建集合的键名,集合元素是好友的id
$redis->sadd('field:'.$userid,$id);//向集合里面添加好友
header("location:index.php");
?>