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 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
PHP文件操作实现代码分享
Sep 01 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
Jun 13 PHP
php实现删除空目录的方法
Mar 16 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
PHP微信H5支付开发实例
Jul 25 PHP
Yii2.0框架模型多表关联查询示例
Jul 18 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
Dec 16 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 Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
php的一个简单加密解密代码
2014/01/14 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
2017/08/11 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
JavaScipt基本教程之前言
2008/01/16 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
2020/03/07 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
javascript实现倒计时关闭广告
2021/02/09 Javascript
python从入门到精通(DAY 2)
2015/12/20 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
基于python实现地址和经纬度转换
2020/05/19 Python
python3中编码获取网页的实例方法
2020/11/16 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
银行毕业实习自我鉴定
2013/09/19 职场文书
英文版餐饮业求职信
2013/10/18 职场文书
房地产销售计划书
2014/01/10 职场文书
导游词之沈阳清昭陵
2019/12/28 职场文书
如何利用pygame实现打飞机小游戏
2021/05/30 Python
Pygame Time时间控制的具体使用详解
2021/11/17 Python