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 相关文章推荐
发挥语言的威力--融合PHP与ASP
Oct 09 PHP
处理单名多值表单的详解
Jun 08 PHP
浅析PHP原理之变量(Variables inside PHP)
Aug 09 PHP
PHP英文字母大小写转换函数小结
May 03 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
php生成图片验证码
Jun 09 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
Dec 17 PHP
Zend Framework教程之Autoloading用法详解
Mar 08 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
Jun 25 PHP
PHP实现随机发放扑克牌
Apr 21 PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 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
用Flash图形化数据(二)
2006/10/09 PHP
PHP的ASP防火墙
2006/10/09 PHP
杏林同学录(八)
2006/10/09 PHP
CI框架常用方法小结
2016/05/17 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
微信小程序自定义联系人弹窗
2020/05/26 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
[06:36]吞吞映像top1
2014/06/20 DOTA
Python Web服务器Tornado使用小结
2014/05/06 Python
python实现文本去重且不打乱原本顺序
2016/01/26 Python
Python切片知识解析
2016/03/06 Python
机器学习python实战之决策树
2017/11/01 Python
python http接口自动化脚本详解
2018/01/02 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
python 接口返回的json字符串实例
2018/03/27 Python
python程序控制NAO机器人行走
2019/04/29 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
给排水专业应届生求职信
2013/10/12 职场文书
卖房授权委托书样本
2014/10/05 职场文书
幼儿教师个人总结
2015/02/05 职场文书
小学远程教育工作总结
2015/08/13 职场文书
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers
MySQL数据库 安全管理
2022/05/06 MySQL