Home  >  Article  >  Backend Development  >  PHP+redis method to implement registration, deletion, editing, paging, login, following and other functions

PHP+redis method to implement registration, deletion, editing, paging, login, following and other functions

墨辰丷
墨辰丷Original
2018-05-25 14:33:382029browse

This article mainly introduces the functions of registration, deletion, editing, paging, login, and following in PHP redis. It analyzes the registration, deletion, editing, paging, login, and following functions commonly used in PHP redis project development in the form of examples. For related implementation skills, friends in need can refer to

. This article describes how to implement registration, deletion, editing, paging, login, follow and other functions in php redis. Share it with everyone for your reference, the details are as follows:

Main interface

##Connect to redis

redis.php

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

Registration interface

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>

Registration Implementation

reg.php

<?php
  require("redis.php");
  $username = $_POST[&#39;username&#39;];
  $password = md5($_POST[&#39;password&#39;]);
  $age = $_POST[&#39;age&#39;];
  //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(&#39;location:list.php&#39;);

List page

list.php

<a href="add.php" rel="external nofollow" >注册</a>
<?php
  require("redis.php");
  if(!empty($_COOKIE[&#39;auth&#39;])){
    $id = $redis->get("auth:".$_COOKIE[&#39;auth&#39;]);
    $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[&#39;page&#39;]))?$_GET[&#39;page&#39;]: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[&#39;uid&#39;]?></td>
    <td><?php echo $v[&#39;username&#39;]?></td>
    <td><?php echo $v[&#39;age&#39;]?></td>
    <td>
      <a href="del.php?id=<?php echo $v[&#39;uid&#39;];?>" rel="external nofollow" >删除</a>
      <a href="mod.php?id=<?php echo $v[&#39;uid&#39;];?>" rel="external nofollow" >编辑</a>
      <?php if(!empty($_COOKIE[&#39;auth&#39;]) && $id != $v[&#39;uid&#39;]){ ?>
      <a href="addfans.php?id=<?php echo $v[&#39;uid&#39;];?>&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[&#39;uid&#39;];?></td>
    <td><?php echo $row[&#39;username&#39;];?></td>
    <td><?php echo $row[&#39;age&#39;];?></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[&#39;uid&#39;];?></td>
    <td><?php echo $row[&#39;username&#39;];?></td>
    <td><?php echo $row[&#39;age&#39;];?></td>
  </tr>
  <?php } ?>
<table>

##Exit

logout.php

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

Login

login.php

<?php
  require("redis.php");
  $username = $_POST[&#39;username&#39;];
  $pass = $_POST[&#39;password&#39;];
  //根据注册时存储的以用户名为键的字符类型中查找用户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>

Delete

del.php

<?php
  require("redis.php");
  $uid = $_GET[&#39;id&#39;];
  //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");

Edit interface

mod.php

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

Edit function

doedit.php

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

Add follow

addfans.php

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

The above is the entire content of this article, I hope it will be helpful to everyone's study.


Related recommendations:

Detailed explanation of application messaging for Redis in php


Detailed explanation of the method of PHP publishing Weibo based on the Redis message queue


Detailed explanation of the method of PHPSession storage/depositing

redis

The above is the detailed content of PHP+redis method to implement registration, deletion, editing, paging, login, following and other functions. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn