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 相关文章推荐
require(),include(),require_once()和include_once()的异同
Jan 02 PHP
PHP中cookies使用指南
Mar 16 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 PHP
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
php实现图片缩放功能类
Dec 18 PHP
PHP中file_exists函数不支持中文名的解决方法
Jul 26 PHP
Yii学习总结之安装配置
Feb 22 PHP
php获取文件后缀的9种方法
Mar 22 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
Jun 12 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
php基于 swoole 实现的异步处理任务功能示例
Aug 13 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
Apr 22 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 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
测试php连接mysql是否成功的代码分享
2014/01/24 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
简单实现node.js图片上传
2016/12/18 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
Vue加载json文件的方法简单示例
2019/01/28 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
Python中dict和set的用法讲解
2019/03/28 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
网络维护中文求职信
2014/01/03 职场文书
军训 自我鉴定
2014/02/03 职场文书
教师职位说明书
2014/07/29 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
导游词之包公祠
2019/11/25 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python