php+redis实现注册、删除、编辑、分页、登录、关注等功能示例


Posted in PHP onFebruary 15, 2017

本文实例讲述了php+redis实现注册、删除、编辑、分页、登录、关注等功能。分享给大家供大家参考,具体如下:

主要界面

php+redis实现注册、删除、编辑、分页、登录、关注等功能示例

连接redis

redis.php

<?php
  //实例化
  $redis = new Redis();
  //连接服务器
  $a=$redis->connect("localhost",6379);
  //var_dump($a);
  //授权
  $redis->auth("107lab");

注册界面

add.php

<form action="reg.php" method="post">
  用户名:<input type="text" name="username"><br>
  密码:<input type="password" name="password"><br>
  年龄:<input type="text" name="age"><br>
  <input type="submit" value="注册">
  <input type="reset" value="重填">
</form>

注册实现

reg.php

<?php
  require("redis.php");
  $username = $_POST['username'];
  $password = md5($_POST['password']);
  $age = $_POST['age'];
  //echo $username.$password.$age;
  $uid = $redis->incr("userid");//设置自增id,相当于主键
  $redis->hMset("user:".$uid,array("uid"=>$uid,"username"=>$username,"password"=>$password,"age"=>$age));//用hash类型存储用户比较方便
  //将用户id存入一个链表中,便于统计数据
  $redis->rpush("uid",$uid);
  //将用id存入以用户名为键的字符类型中,便于查看用户是否存在。
  $redis->set("username:".$username,$uid);
  header('location:list.php');

列表页面

list.php

<a href="add.php" rel="external nofollow" >注册</a>
<?php
  require("redis.php");
  if(!empty($_COOKIE['auth'])){
    $id = $redis->get("auth:".$_COOKIE['auth']);
    $name = $redis->hget("user:".$id,"username");
?>
    欢迎您:<?php echo $name;?> <a href="logout.php" rel="external nofollow" >退出</a>
  <?php } else { ?>
  <a href="login.php" rel="external nofollow" >登录</a>
  <?php } ?>
<?php
  require("redis.php");
  //用户总数
  $count = $redis->lsize("uid");//获取链表的长度
  //echo $count;
  //页大小
  $page_size = 3;
  //当前页码
  $page_num=(!empty($_GET['page']))?$_GET['page']:1;
  //页总数
  $page_count = ceil($count/$page_size);
  $ids = $redis->lrange("uid",($page_num-1)*$page_size,(($page_num-1)*$page_size+$page_size-1));
  //var_dump($ids);
  foreach($ids as $v){
    $data[]=$redis->hgetall("user:".$v);
  }
  /*
  //以下为最初想到的分页处理,放入一个数组中,根据uid的最大值来当总个数,但是删除个别用户以后,uid不会变小,所以建议用链表,因为他有个lsize函数可以求出链表长度
  //根据userid获取所有用户
  for($i=1;$i<=($redis->get("userid"));$i++){
    $data[]=$redis->hgetall("user:".$i);
  }
  //过滤空值
  $data = array_filter($data);
  //var_dump($data);
  */
?>
<table border=1>
  <tr>
    <th>uid</th>
    <th>username</th>
    <th>age</th>
    <th>操作</th>
  </tr>
  <?php foreach($data as $v){ ?>
  <tr>
    <td><?php echo $v['uid']?></td>
    <td><?php echo $v['username']?></td>
    <td><?php echo $v['age']?></td>
    <td>
      <a href="del.php?id=<?php echo $v['uid'];?>" rel="external nofollow" >删除</a>
      <a href="mod.php?id=<?php echo $v['uid'];?>" rel="external nofollow" >编辑</a>
      <?php if(!empty($_COOKIE['auth']) && $id != $v['uid']){ ?>
      <a href="addfans.php?id=<?php echo $v['uid'];?>&uid=<?php echo $id;?>" rel="external nofollow" >加关注</a>
      <?php } ?>
    </td>
  </tr>
  <?php } ?>
  <tr>
    <td colspan="4">
      <?php if(($page_num-1)>=1){ ?>
      <a href="?page=<?php echo ($page_num-1);?>" rel="external nofollow" >上一页</a>
      <?php } ?>
      <?php if(($page_num+1)<=$page_count){ ?>
      <a href="?page=<?php echo ($page_num+1);?>" rel="external nofollow" >下一页</a>
      <?php } ?>
      <a href="?page=1" rel="external nofollow" >首页</a>
      <a href="?page=<?php echo ($page_count);?>" rel="external nofollow" >尾页</a>
      当前<?php echo $page_num;?>页
      总共<?php echo $page_count;?>页
      总共<?php echo $count;?>个用户
    </td>
  </tr>
</table>
<!--关注功能,建议用集合实现,因为集合元素唯一,并且可以容易求出两个用户粉丝之间交集与差集,进而进行好友推荐功能-->
<table border=1>
  <caption>我关注了谁</caption>
  <?php
    $data = $redis->smembers("user:".$id.":following");
    foreach($data as $v){
      $row = $redis->hgetall("user:".$v);
  ?>
  <tr>
    <td><?php echo $row['uid'];?></td>
    <td><?php echo $row['username'];?></td>
    <td><?php echo $row['age'];?></td>
  </tr>
  <?php } ?>
<table>
<table border=1>
  <caption>我的粉丝</caption>
  <?php
    $data = $redis->smembers("user:".$id.":followers");
    foreach($data as $v){
      $row = $redis->hgetall("user:".$v);
  ?>
  <tr>
    <td><?php echo $row['uid'];?></td>
    <td><?php echo $row['username'];?></td>
    <td><?php echo $row['age'];?></td>
  </tr>
  <?php } ?>
<table>

退出

logout.php

<?php
  setcookie("auth","",time()-1);
  header("location:list.php");

登录

login.php

<?php
  require("redis.php");
  $username = $_POST['username'];
  $pass = $_POST['password'];
  //根据注册时存储的以用户名为键的字符类型中查找用户id
  $id = $redis->get("username:".$username);
  if(!empty($id)){
    $password = $redis->hget("user:".$id,"password");
    if(md5($pass) == $password){
      $auth = md5(time().$username.rand());
      $redis->set("auth:".$auth,$id);
      setcookie("auth",$auth,time()+86400);
      header("location:list.php");
    }
  }
?>
<form action="" method="post">
  用户名:<input type="text" name="username"/><br>
  密码:<input type="password" name="password"><br>
  <input type="submit" value="登录"/>
</form>

删除

del.php

<?php
  require("redis.php");
  $uid = $_GET['id'];
  //echo $uid;
  $username = $redis->hget("user:".$id,"username");
  $a=$redis->del("user:".$uid);
  $redis->del("username:".$username);
  $redis->lrem("uid",$uid);
  //var_dump($a);
  header("location:list.php");

编辑界面

mod.php

<?php
  require("redis.php");
  $uid = $_GET['id'];
  $data=$redis->hgetall("user:".$uid);
?>
<form action="doedit.php" method="post">
  <input type="hidden" value="<?php echo $data['uid'];?>" name="uid">
  用户名:<input type="text" name="username" value="<?php echo $data['username'];?>"><br>
  年龄:<input type="text" name="age" value="<?php echo $data['age'];?>"><br>
  <input type="submit" value="提交">
  <input type="reset" value="重填">
</form>

编辑功能

doedit.php

<?php
  require('redis.php');
  $uid = $_POST['uid'];
  $username = $_POST['username'];
  $age = $_POST['age'];
  $a=$redis->hmset("user:".$uid,array("username"=>$username,"age"=>$age));
  if($a){
    header("location:list.php");
  }else{
    header("location:mod.php?id=".$uid);
  }

加关注

addfans.php

<?php
//关注功能,建议用集合实现,因为集合元素唯一,并且可以容易求出两个用户粉丝之间交集与差集,进而进行好友推荐功能
  $id = $_GET['id'];
  $uid = $_GET['uid'];
  require("redis.php");
  $redis->sadd("user:".$uid.":following",$id);
  $redis->sadd("user:".$id.":followers",$uid);
  header("location:list.php");

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
关于文本留言本的分页代码
Oct 09 PHP
PHP 中文乱码解决办法总结分析
Jul 30 PHP
彻底杜绝PHP的session cookie错误
Aug 09 PHP
删除无限分类并同时删除它下面的所有子分类的方法
Aug 08 PHP
php 多关键字 高亮显示实现代码
Apr 23 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
Apr 03 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
May 13 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 PHP
Laravel统计一段时间间隔的数据方法
Oct 09 PHP
is_file和file_exists效率比较
Mar 14 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 #PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
Feb 15 #PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 #PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 #PHP
Yii2中多表关联查询hasOne hasMany的方法
Feb 15 #PHP
php+Memcached实现简单留言板功能示例
Feb 15 #PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 #PHP
You might like
PHP字符编码问题之GB2312 VS UTF-8解决方法
2011/06/23 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
Javascript 自定义类型方法小结
2010/03/02 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
webpack打包node.js后端项目的方法
2018/03/10 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
Python实现Const详解
2015/01/27 Python
wxPython中listbox用法实例详解
2015/06/01 Python
详解python eval函数的妙用
2017/11/16 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
python django生成迁移文件的实例
2019/08/31 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
数学专业推荐信范文
2013/11/21 职场文书
会计电算化专业个人的自我评价
2013/11/24 职场文书
中药专业自荐信范文
2014/03/18 职场文书
小学生寒假家长评语
2014/04/16 职场文书
机械专业技术员求职信
2014/06/14 职场文书
服务整改报告
2014/11/06 职场文书
工作态度检讨书范文
2015/05/06 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python